如何给 .git/config 文件进行版本控制?

7

我有一个如下所示的.gitignore文件:

.*
!.gitignore

我希望能够对我的.git/config文件进行版本控制,这样当我执行git pull命令时,.git/config文件会自动更新。

我应该怎么做呢?

我尝试过类似以下的操作:

.*
!.gitignore
!.git/config

但是这种方法并不奏效。我知道如果我创建一个链接(ln -s .git/config configurations/git/config),我就可以对其进行版本控制,但我希望有更好的方法来自动更新原始文件。
我考虑创建一个硬链接(ln .git/config configurations/git/config configuration/git),但这似乎不是最好的方法。有没有办法避免这个问题?当使用硬链接进行版本控制时,Git是否能正常工作?
编辑:解释为什么要这样做
这样做的主要动机是我想要对我的用户的主目录进行版本控制。我将使用此版本控制来帮助我进行某种部署。我希望保持所有克隆的同步。如果我管理得不好,冲突就会出现,而我会负责处理这些冲突。也许我还会对其他受保护的git文件进行版本控制。

1
你为什么需要这个?听起来像是一个坏主意。 - BenC
请查看我上面的编辑。 - GarouDan
4个回答

4
您无法“版本化”您的 .git/config 文件。您可以在您的工作目录中创建一个 .gitconfig 文件并提交它。然后,在克隆之后执行以下操作。
  cat .gitconfig >> .git/config

当然,这充满了各种潜在的问题。如果有人编辑 .gitconfig,你需要撤销 .git/config 然后在 git pull 之后重新添加。如果在不同的分支上更改了 .gitconfig 呢?你需要撤销 .git/config 并在 git checkout <branch> 上重新添加。

因此,我不建议更改 .git/config,但如果必须更改,则必须更改。


GoZoner,我同意这个解决方案是可行的,但我想避免这样做,因为也许我会对其他受保护的git文件进行版本控制。但如果我真的无法避免这种情况,我将需要创建一个shell脚本来执行类似的操作。 - GarouDan

4

正如 @Tuxdude 所说,分享 .git/config 本身是不好的信息。

但是,Git(1.7.10+)现在支持配置包含

因此,对于重要选项,您可以将它们放置在文件中:.git.config/repository.config,然后在 .git/config 中仅放置指向该文件的链接,如下所示:

[include]
        path = ../.git.config/repository.config

我刚刚在存储库的readme文件中添加了这样的建议。只需复制/粘贴许多行并对重要设置(如常规文件)进行版本控制即可轻松完成。它还可以传输所有存储库用户的更新。


1

在版本控制中,不建议对 .git/config 文件进行版本控制。

git 不允许您在 .git 目录下版本控制任何内容,因为 .git 的内容是本地的,两个从相同远程 URL 克隆的人,在克隆后不需要拥有相同的 .git 目录下的文件集。

例如,您可能只有一个名为 origin 的远程仓库,而另一个开发者可能将远程命名为 foo。另一位开发者可能有两个名为 barbaz 的远程仓库。

关于远程仓库(URL、refspec 等)和本地分支(如上游跟踪分支等)的信息存储在您的 .git/config 文件中。

如果您确实需要覆盖某些配置,可以在本地编辑 .git/config 文件,或者如果可以在全局范围内设置选项,则使用您的 ~/.gitconfig 或等效文件。


Tuxdude,也许这是个不好的想法,但正如我在问题中所解释的(请参见编辑),我想对此进行版本控制,因为我希望将此文件同步到我的所有克隆版本中。如果出现冲突或配置错误,那只取决于我的管理能力。 - GarouDan
我不理解所有这些“否定”的回答……有很多好的理由来对配置文件进行版本控制。例如,如果您为存储库设置了gitflow,为什么要让每个人都在本地设置它?您需要创建文档,而您可以只对其进行版本控制…… - Inc33

0

除了已经出色的答案之外,实际回答OP的问题:

我想创建一个硬链接到它(ln .git/config configurations/git/config configuration/git),但这似乎不是最好的方法。
有没有办法避免这种情况?
Git在版本控制硬链接时会正常工作吗?

不行:

  • Git中没有硬链接的表示方式:请参见 "Git and hard links"
  • 符号链接将仅存储为文本文件,并带有链接文件的路径。

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