3

为了让我的所有配置文件保持同步,我有一个包含所有设置的Github 存储库。虽然这在大多数情况下运行良好,但某些应用程序在不同的机器上具有不同的版本。

所以现在我想知道......有没有办法设置像这样的 Git 全局配置设置(这会在我的笔记本电脑上引起警告),而不会在具有旧 Git 版本的不同机器上导致错误?

一个选项可能是包装git push命令以在支持时添加标志,但这似乎是一种 hack。

4

3 回答 3

1

带有特制 git瓷器脚本的隐藏目录,您可以将其签入到您处理的每个存储库中。(或者一个单独的实用程序存储库,然后您可以使用清单和 repo 命令行实用程序签出。)您的脚本将根据 git 版本使用您需要的任何标志调用 push,而与您所在的机器无关。

于 2014-02-08T23:47:32.767 回答
1

不同机器的单独配置

为不同的机器创建不同的配置文件,并在每台机器上符号链接其中一个作为真实配置。符号链接本身不会被跟踪,请将其添加到.gitignore.

符号链接可以在post-checkouthook中完成。您需要识别当前主机(例如uname -n)并拥有一个包含相应挂钩设置的文件。

这个解决方案的缺点是不是动态的。在主机上安装新版本的 Git 后,您必须检查适当的配置是否适用于它。

什么是不可能的

如果您想要检查某个选项是否支持某个值并使用另一个值作为后备,则必须解析联机帮助页并依赖其内容。Git 没有类似的实现。您无法检查是否支持某个值,也无法编写动态选择该值本身的配置文件。

动态生成的配置

但是,可以动态生成配置。与使用符号链接替换普通文件以在多个静态文件之间进行选择的方式类似,您可以将其替换为连接到生成配置的守护进程的命名管道。

在守护程序中,您可以检查git --version并基于该选择配置选项的值。虽然这是一个巧妙的解决方案,充分利用了 Unix 文件系统的功能,但它是一个相当 hacky 的解决方案。您必须保持守护程序运行,如果它停止,Git 将无法读取配置并挂起。

于 2014-02-08T23:00:39.303 回答
0

不是一个全面的解决方案,但我使用的一个技巧是将 1.7.12+ 选项(如push.default=simple)放入~/.config/git/config,旧的 git 不会读取这些选项。

我设置了适用于所有 git 版本的所有内容~/.gitconfig

于 2015-11-23T18:15:22.197 回答