共计 1637 个字符,预计需要花费 5 分钟才能阅读完成。
我们有时候在多平台开发代码或者批量修改了文件夹的权限时,使用 git status
命令你很有可能会看到一大片的文件变更记录。其实不用担心,这些只是权限变更的文件也会被显示出来而已。如果你的工程目录不用考虑文件的权限,那么我们可以关闭这个特性:
git config core.filemode false
今天我们介绍下 git 常用的一些配置参数。
git 配置文件
当我们初始化或者 clone
一个 git
仓库的时候,会自动生成 .git
的目录,默认隐藏,但我们依然可以查看其文件,其中有一个 config
的文件是基础的配置文件:
$ cat .git/config
[core]
# 用于未来能够兼容 git 版本,决定怎么处理 git 命令和文件的
repositoryformatversion = 0
# 是否提供文件权限的 diff
filemode = true
# 决定当前仓库是中心仓库还是开发库
bare = false
# 记录所有的 ref 更新:决定变更 ref 时,会不会被记录在 `$GIT_DIR/logs/<ref>` 目录下
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = ssh://zhaoshuaiqiang@git.com:8235/reposity
[branch "master"]
remote = origin
merge = refs/heads/master
repositoryformatversion
仓库版本
现在发布的版本号都是 0
,但这个属性是为了未来的兼容性,当开发者认为有新的特性需要加入的时候,可以将这个版本号改为1
,此时,新的Git
版本可以正确执行功能,而老的版本会出现报错:
"Expected git repo version <= 0, found 1. Please upgrade Git"
filemode
文件权限
# diff 时考虑文件权限为 true,不考虑为 false
core.filemode = true | false
我们通过这个参数来决定是否会 diff
文件的权限,如果是源代码,可以关闭这个选项,如果是脚本、二进制程序等需要权限认证之类的还是要开启该参数的:
git config core.filemode false
更改完成后再 cat
下.git/config
就会发现该参数变了。
bare
裸仓库
我们可以使用 git init
来将我们的目录转换为一个 Git
本地仓库或者初始化为一个新仓库。在初始化的时候我们可以加上 --bare
参数来决定是否创建一个裸仓库。
裸仓库一般指的是远端的中心仓库,可以被 clone
和push
更新,但不包含工作区,因此不能执行常规的 git
命令,也不能进行直接的提交和变更。而普通仓库却正好相反,用于我们常规协作开发时的修改和提交。
# 裸仓库为 true,普通仓库为 false
core.bare = true | false
logallrefupdates
记录引用更新
core.logallupdates = true | false | always
当值为 true
时,会将所有引用 (ref)
的更新记录到 $GIT_DIR/logs/<ref>
中,包括更新的编号、日期和原因等内容。<ref>
的值根据分支的不同为 refs/heads/
或 refs/remotes/
等。
当值为 always
时,<ref>
的值为refs/reflog
。
当仓库为裸仓库时,值为false
。
总结
我们可以通过文档来了解所有的参数,这里我们只需要了解 bare
和filemode
两个即可,同时 filemode
可以通过命令来修改。
参考资料
- https://stackoverflow.com/que…
- git tips: 设置 filemode:https://www.jianshu.com/p/3b0…
- Git 本地仓库和裸仓库:https://segmentfault.com/a/11…
- Git 文档:https://git-scm.com/docs/git-…