如何将Git配置存储为仓库的一部分?

234

我正在使用过滤器来在检出时改变文件,就像这里描述的一样。 现在的问题是过滤器定义仅存储在我的本地配置文件中:

$ cat .git/config
....
[filter "dater"]
        smudge = /home/.../expand_date
        clean = perl -pe \"s/\\\\\\$Date[^\\\\\\$]*\\\\\\$/\\\\\\$Date\\\\\\$/\"

如果我的同事想要获得这个Date扩展的好处,他们需要复制我的筛选器定义。而且如果我更改它,我需要通知他们等等...

那么我可以将这个筛选器定义部分存储在仓库的.git/config中,并让Git使用它吗?


3
你可能会发现这个链接很有用,可以自动共享团队范围的配置。 - mljrg
2个回答

264

支持三种作用域的.gitconfig文件:--system,--global,--local。您还可以创建自定义配置文件,并将其包含在支持的文件之一中。

对于您的需求,custom是正确的选择。您应该将过滤器保存在存储库根目录下的.gitconfig文件中,而不是在.git/config中编写它:

your-repo/
│
├── .git/
│   ├── config
│
├── .gitconfig
│

创建包含你的过滤器的.gitconfig文件并提交更改。这样你的同事就可以始终保持文件更新——但是他们需要手动包含它。在仅使用git时,无法自动包含你的自定义配置文件,因为这会产生安全漏洞。

要将此配置应用于单个仓库,每个用户都需要在your-repo/中运行以下命令:

git config --local include.path ../.gitconfig

参考文献:https://git-scm.com/docs/git-config#_includes

注意不要在自定义.gitconfig文件中存储个人数据,例如user.*,请将这些数据保存在全局的.gitconfig文件中。


71
我希望你能翻译以下内容:我想避免通知每个可能的用户,告诉他需要将repo的.gitconfig添加到自己的~/.gitconfig中。没有人会记得这个。有没有办法让git始终读取repo的.gitconfig呢?可以不用通知每个用户,在不改变原意的情况下,翻译为:我希望避免通知每个潜在用户,要求他们将repo的.gitconfig包含在自己的~/.gitconfig文件中。由于没有人会记得这个步骤,所以是否有一种方法可以让git始终读取repo的.gitconfig文件? - Zaar Hai
16
我猜不行,因为那样很危险。 想象一下克隆一个使用了“有趣”命令别名的repo,例如导出您的主目录内容。 如果您有类似于“configure”脚本或用户必须运行的其他脚本,您可以设置包含路径(或提示用户设置)。 - Hasturkun
5
@HenryBlyth 在 git config 上似乎有一个 --file 选项,你可以将其设置为指向你的仓库的 .gitconfig。我还没有测试过,但这似乎回答了你的问题。你可以在文档中阅读它。http://git-scm.com/docs/git-config#FILES - theUnknown777
40
如果Git不假定你正在编写分布在组织外部的代码,那就太好了,这样你就不必关心安全威胁。有时候,系统的可用性和自动化比安全性更为重要。 - Geordie
4
@Mieszko 和 @Synoli,我经常在我的项目中添加 Makefile,并在需要时插入一个 make setup 命令以确保项目能够正确运行。这是显式的,所以没有道德上的顾虑,也是语义化的,所以与关注点分离没有问题。但缺点是每个人都需要记得在克隆项目后运行它,但如果你为所有可能需要它的项目执行此操作,那么就容易记住了。 - VinGarcia
显示剩余8条评论

31

默认情况下,您不能在git存储库中使用.gitconfig文件,但是您可以将其链接到存储库中以便对其进行版本控制。

您可以像这样链接它:

[include]
  path = ../.gitconfig

我创建了一个简单的脚本gitconfig.sh,可以为您完成这个操作(比复制要快得多)+简单的.gitconfig文件。所以如果您想要,可以查看此存储库https://github.com/HoBi/dotfiles


编辑:我已经删除了该文件,但您可以在此处找到它https://github.com/tenhobi/dotfiles/blob/7e4376c006c508370b82bc7bd37173fab51dbd01/git/.gitconfig.sh


@HoBi,看起来你已经从GitHub中删除了gitconfig.sh文件,有什么原因你不再需要它了吗? - Novice C
3
如果你需要的话,这里有一个文件。 https://github.com/HoBi/dotfiles/blob/7e4376c006c508370b82bc7bd37173fab51dbd01/git/.gitconfig.sh 我认为,你不应该将.gitconfig或gitconfig.sh存储在你的git项目中 - 这些是个人设置,应该存储在你的全局设置中的 ~/ 文件夹中。每个人的需求可能都不同,所以为什么要在git仓库中麻烦其他人来处理你的配置呢 :-) - tenhobi
4
@tenhobi,有一些配置是对于每个人在项目中共享的可能很有趣的。 我将为别名提供此类配置,介绍项目编码流程。 - Bernardo Dal Corno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接