Git 的特殊配置文件
文章目录
- 1.前言
- 2.Git 标准配置文件
- .gitignore
- 作用
- 格式
- 示例
- .gitattributes
- 作用
- 格式
- 示例
- .gitmodules
- 作用
- 格式
- 示例
- .gitconfig
- 作用
- 格式
- 示例
- 3.非 Git 标准约定文件
- .gitkeep
- 简介
- 示例
- .gitacls
- 作用
- 格式
- 示例
- 参考文献
1.前言
Git 是一个强大的版本控制系统,它使用多个配置文件来管理项目的行为和设置。
2.Git 标准配置文件
.gitignore
作用
.gitignore 文件用于指定哪些文件或目录应被 Git 忽略,不进行版本控制。这有助于避免将不必要的文件(如临时文件、编译生成的文件、日志文件等)添加到版本库中。
格式
- 每一行指定一个要忽略的模式。
- 可以使用通配符:
*
匹配零个或多个字符。?
匹配一个字符。**
匹配任意级别的目录。 - 以 / 开头表示相对于仓库根目录的路径。
- 以 # 开头的行是注释。
示例
# 忽略所有的日志文件及目录
*.log
/log/
# 忽略临时文件及目录
*.tmp
/temp/
# 忽略编译生成的文件
*.exe
/build/
/dist/
# 忽略根目录下的 .env 文件
/.env
# 忽略多层级目录
# 忽略 a/b, a/x/b, a/x/y/b 等
/a/**/b
.gitattributes
作用
.gitattributes 文件用于定义 Git 在处理特定文件或目录时的行为。可以设置文件的文本编码、行结束符、合并策略、差异输出等。
格式
- 每一行指定一个路径模式和一个或多个属性。
- 属性名可以是标准属性(如 text、binary、diff)或自定义属性。
示例
# 将所有的文本文件处理为 LF
*.txt text eol=lf
# 将 PNG 文件标记为二进制文件
*.png binary
# 禁用某些目录中文件的 diff 输出
internal/app/pb/** -diff
# 对于特定类型的文件使用自定义的 diff 工具
*.md diff=markdown
.gitmodules
作用
.gitmodules 文件用于管理 Git 子模块的配置信息。
子模块是指在一个 Git 仓库中嵌套的另一个 Git 仓库。此文件包含子模块的路径和 URL,允许您在主仓库中引用其他仓库。
git submodule add https://github.com/XXX [<path>]
默认情况下,子模块会将子项目放到一个与仓库同名的目录中,即“XXX”。
如果你想要放到其他地方,那么可以在命令结尾添加一个不同的路径 path。如果这时运行 git status,注意到新的.gitmodules文件。该配置文件保存了项目 URL 与已经拉取的本地目录之间的映射。
格式
- 使用 [submodule “path”] 格式来定义子模块。
示例
[submodule "libs/some-library"]
path = libs/some-library
url = https://github.com/user/some-library.git
[submodule "libs/another-library"]
path = libs/another-library
url = https://github.com/user/another-library.git
.gitconfig
作用
.gitconfig 文件是 Git 的配置文件,它用于配置 Git 的行为和用户信息,如用户名、邮箱、颜色输出、别名等。
可通过 git config 命令进行配置,并将配置存储至 .gitconfig 文件。
根据其位置和作用级别,.gitconfig 文件可以分为三种主要类型:
- 仓库级别的配置(.git/config)具有最高优先级。
- 用户级别的配置(~/.gitconfig)次之。
- 系统级别的配置(/etc/gitconfig)具有最低优先级。
格式
示例
.git/config 示例:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = git@gitlab.foo.com:foo/foo_svr.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
~/.gitconfig 示例:
[url "git@gitlab.foo.com:"]
insteadOf = https://gitlab.foo.com/
insteadOf = http://gitlab.foo.com/
[user]
email = dablelv@foo.com
name = dablelv
[core]
autocrlf = input
editor = vim
[alias]
co = checkout
br = branch
ci = commit
/etc/gitconfig 示例:
[diff "astextplain"]
textconv = astextplain
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[http]
sslBackend = openssl
sslCAInfo = C:/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt
[core]
autocrlf = true
fscache = true
symlinks = false
[pull]
rebase = false
[credential]
helper = manager
[credential "https://dev.azure.com"]
useHttpPath = true
[init]
defaultBranch = master
3.非 Git 标准约定文件
.gitkeep
简介
Git 默认是不跟踪空文件夹和空目录的,所以要想推送空文件夹或空目录,就必须在里面放一个文件,即使是空文件也行,但必须要有。
于是,就有了一个不成文的规定,通常我们放一个名为 .gitkeep 的文件到空文件夹或空目录,以此实现其 Git 跟踪。该规定并没有在官方文档中定义,只是一个公认的约定罢了。
.gitkeep 实则是一个空的占位文件,并没有其它特性,通俗点讲,.fu*k 可以实现和 .gitkeep 相同的功能。
示例
假设您有一个项目目录结构如下:
my_project/
├── src/
└── empty_folder/
如果您希望在 Git 中保留 empty_folder,可以在该目录中创建一个 .gitkeep 文件:
my_project/
└── empty_folder/
└── .gitkeep
.gitacls
作用
.gitacls 文件用于定义 Git 仓库的访问控制列表(ACL,Access Control List)。虽然这个文件并不是 Git 的标准部分,但在一些特定环境中,特别是与安全性和权限管理相关的项目中,可能会使用此文件来控制对仓库中文件或目录的访问权限。
格式
具体内容和格式取决于团队的约定。
示例
# 定义哪些用户或组可以访问特定目录
# 例如,允许 user1 和 user2 访问 src/ 目录
src/ user1 user2
参考文献
Git - gitignore Documentation
Git - gitattributes Documentation
Git - gitmodules Documentation