将git config存储为存储库的一部分


147

我使用的过滤器等中记载到结账时裂伤文件在这里。现在的问题是过滤器定义仅存储在我的本地配置文件中:

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

如果我的同事希望从此Date扩展中受益,他们需要复制我的过滤器定义。如果我进行更改,则需要通知他们,等等。

那么我可以将此过滤器定义的一部分存储.git/config在存储库中并让git使用它吗?


您可能会发现此链接对于自动共享团队范围的配置很有用。
mljrg

Answers:


163

有3个受支持的.gitconfig文件范围:--system, --global, --local。您还可以创建一个自定义配置文件,并将其包括在支持的文件之一中。

根据您的需求定制 -是正确的选择。与其编写过滤器,.git/config不如将其保存.gitconfig在存储库根目录下的文件中:

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

.gitconfig使用您的过滤器创建并提交更改。然后,您的同事将始终保持更新-但他们将不得不手动添加它。不可能仅通过git 自动包括您的自定义配置文件,因为它会创建一个安全漏洞。

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

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

注意不要将个人数据存储在风俗习惯中.gitconfig,例如user.*,将这些数据保留在全局中.gitconfig


40
我想避免通知每个可能的用户,它需要包括回购的.gitconfig~/.gitconfig。没有人会记住它。有没有一种方法可以使git始终读取存储库.gitconfig
Zaar Hai

9
@ZaarHai:我猜不是,因为那很危险。(想象一下,克隆一个以“有趣”为别名的命令的存储库,例如导出主目录的内容)。如果您具有configure用户必须运行的脚本或类似内容,则可以设置包含(或提示用户输入)。
Hasturkun

4
@HenryBlyth似乎有一个--file选项git config,您可以将其设置为指向您的存储库.gitconfig。我尚未测试过,但似乎可以回答您的问题。您可以在文档上阅读。 git-scm.com/docs/git-config#FILES
TheUnknown777

12
如果Git不假设您正在编写在组织外部分发的代码,那太好了,您必须在其中关心安全威胁。有时,系统可用性和自动化比安全性具有更高的优先级。
Geordie

2
您可以将命令偷偷地添加到团队通常使用的任务中(假设您正在使用任务运行器)。
米什科

19

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

您可以像这样链接到它:

[include]
  path = ../.gitconfig

我创建了一个简单的脚本 gitconfig.sh,可以为您执行此操作(比复制快得多)+简单.gitconfig文件,因此,如果您愿意,请查看此仓库https://github.com/HoBi/dotfiles


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


@XmlmXmlmX已修复。:-)
tenhobi '16

@HoBi似乎您已经从GitHub删除了gitconfig.sh,是您不再想要它的原因了吗?
新手C

1
@NoviceC如果您需要该文件。github.com/HoBi/dotfiles/blob/… 我已经相信,您不应该将.gitconfig或gitconfig.sh存储在git项目中-这些是个人设置,应该存储在全局设置中的~/文件夹中。而且每个人可能都有不同的需求,所以为什么要在git repo中用您的配置来打扰每个人。:-)
tenhobi

@tenhobi有一些配置,每个人都可以在项目中共享。我将使用项目编码流程来别名
Z. Khullah
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.