Git 专题
Abstract Keywords 专题 Git Git 专题
Citation Yao Qing-sheng.Git 专题.FUTURE & CIVILIZATION Natural/Social Philosophy & Infomation Sciences,20220609. https://yaoqs.github.io/20220609/git-zhuan-ti/
Git 配置文件的常用参数解析 https://segmentfault.com/a/1190000019793936
我们有时候在多平台开发代码或者批量修改了文件夹的权限时,使用 git status
命令你很有可能会看到一大片的文件变更记录。其实不用担心,这些只是权限变更的文件也会被显示出来而已。如果你的工程目录不用考虑文件的权限,那么我们可以关闭这个特性:
1 | git config core.filemode false |
今天我们介绍下 git 常用的一些配置参数。
¶git 配置文件
当我们初始化或者 clone
一个 git
仓库的时候,会自动生成.git
的目录,默认隐藏,但我们依然可以查看其文件,其中有一个 config
的文件是基础的配置文件:
1 | $ cat .git/config |
¶repositoryformatversion
仓库版本
现在发布的版本号都是 0
,但这个属性是为了未来的兼容性,当开发者认为有新的特性需要加入的时候,可以将这个版本号改为 1
,此时,新的 Git
版本可以正确执行功能,而老的版本会出现报错:
1 | "Expected git repo version <= 0, found 1. Please upgrade Git" |
¶filemode
文件权限
1 | # diff时考虑文件权限为true,不考虑为false |
我们通过这个参数来决定是否会 diff
文件的权限,如果是源代码,可以关闭这个选项,如果是脚本、二进制程序等需要权限认证之类的还是要开启该参数的:
1 | git config core.filemode false |
更改完成后再 cat
下.git/config
就会发现该参数变了。
¶bare
裸仓库
我们可以使用 git init
来将我们的目录转换为一个 Git
本地仓库或者初始化为一个新仓库。在初始化的时候我们可以加上 --bare
参数来决定是否创建一个裸仓库。
裸仓库一般指的是远端的中心仓库,可以被 clone
和 push
更新,但不包含工作区,因此不能执行常规的 git
命令,也不能进行直接的提交和变更。而普通仓库却正好相反,用于我们常规协作开发时的修改和提交。
1 | # 裸仓库为true,普通仓库为false |
¶logallrefupdates
记录引用更新
1 | 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-…
git 配置 config 文件 https://www.cnblogs.com/hellokitty2/p/10428001.html
1.Git 有一个工具被称为 git config,它允许你获取和设置变量;这些变量可以控制 Git 的外观和操作的各个方面。这些变量以等级的不同可以被存储在三个不同的位置:
(1) /etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’–system’ 给 git config,它将明确的读和写这个文件。
(2) ~/.gitconfig 文件 :具体到你的用户。你可以通过传递–global 选项使 Git 明确的读或写这个特定的文件。
(3) .git/config 位于 git 目录的 config 文件,特定指向该单一的库。如果 git config 时不加–system 也不加–global 选项,那么只作用于当前的 git 版本库,配置产生的修改都体现在.git/config 文件中
三个 config 文件是逐级覆盖的关系,具体的覆盖非具体的。
2. 例子
(1) 用户标识配置
$ git config --global user.name “John Doe” //user.name 就是对 [user] 下的 name 进行配置
$ git config --global user.email johndoe@example.com
$ cat ~/.gitconfig
[user]
email = johndoe@example.com
name = John Doe
…
这里的修改是针对这个用户的所有 git 版本库的,若不加–global 可以就是只针对某一个具体的版本库起作用,修改体现在.git/config 下。
3. 更多例子
$ git config --global core.editor emacs 指定你的编辑器
$ git config --global merge.tool vimdiff 指定你的比较工具 (Your Diff Tool)
$ git config --list 检查你的设置 (Checking Your Settings)
$ git help config 获取帮助 (Getting help)
4. 分别移除各个等级的一个配置项
git config --unset user.name
git config --unset --global user.name
git config --unset --system user.name
5. 移除一组配置项
git config --remove-section color
6.git config get user.name 获取一个属性的值,当然也可以直接 cat 上面的 config 文件。
git 常用命令
1 | git init # 初始化本地git仓库(创建新仓库) |
Address:Department of Natural/Social Philosophy & Infomation Sciences, CHINA
Biography...
Like this article? Support the author with