如何指定自定义的全局gitconfig路径?

12

我在使用Git时遇到了一些麻烦。我正在尝试执行git commit命令,但我需要能够在~/.gitconfig1~/.gitconfig2之间切换。是否有命令行开关或其他方法可以让Git使用不同于在/etc/gitconfig~/.gitconfig.git/config中找到的gitconfig文件?


在同一个repo中,你真的需要使用两个不同的配置吗?你能否只是使用每个repo的.git/config来获得你想要的东西?我想如果你只有两个常见的设置要分散到数十个repos中,这并不是很优雅的做法。 - Cascabel
@Jefromi 是的,我需要。这是我遇到的一种独特情况,需要两个配置。 - Marco Ceppi
2
另一个明显的选择是将 git commit-v2(或更短的名称)全局别名为 !export GIT_AUTHOR_NAME="Second name"; git commit - Cascabel
@Torek - 更多Git好东西。这些开发者应该为他们的无能而感到自豪... - jww
1
你尝试过使用 includeIf 吗?请参考 https://git-scm.com/docs/git-config。 - amirouche
5个回答

16

我找到了一种执行此操作的方法 - 它并不优雅,但确实可行 - 目前似乎是使其正常工作的唯一方法。

Git使用 HOME 路径来确定 .gitconfig 的位置。我能够执行类似于以下的内容:

/home/marco/.silly/.gitconfig
/home/marco/.stupid/.gitconfig
/home/marco/.gitconfig

当执行Git提交(这是唯一需要.gitconfig的命令)时,我覆盖了主目录路径。

HOME=/home/marco/.silly/ git commit -m "silly configuration"

你可以使用别名(alias)轻松地实现这一点

alias sillygit="HOME=/home/marco/.silly/ git"
sillygit commit -m "silly stuff"

1
不错的技巧。我似乎找不到任何真正的方法来做到这一点 - 有一个GIT_CONFIG环境变量,但它只影响git config本身,就像它的-f,--file选项一样。 - Cascabel
对于 Git 版本 2.35.2 及以上,第一个用户必须应用以下命令:env HOME=/home/marco/.silly git config --global --add safe.directory <repo-path> - alper

3
Mario Ceppi的别名方法可以通过使用-c config=value参数来更加优雅地应用到git中:
$ alias sillygit="git -c user.name=Silly -c user.email=silly@silly.org"
$ sillygit commit

当然,这假设您不介意将不同的配置键保存在.bashrc或类似文件中,而不是.gitconfig中,并且这会破坏Shell完成。

0
如果您在每个工作区只需要使用一个.gitconfig文件,而不是在一个工作区中切换配置,那么includeIf可能就足够了,因为它可以根据工作区路径元素或远程URL加载自定义配置。详细信息请参阅https://git-scm.com/docs/git-config#_conditional_includes

0

@amirouche的评论 Emil Lundberg的答案可以结合起来实际加载另一个Git配置文件:

alias git="git -c 'include.path=/some/path/to/my/custom/.gitconfig'"

然而,用户的~/.gitconfig文件仍然被加载。这种方法只会覆盖其他git配置文件中的设置。


-3

你可以使用 --git-dir

git --git-dir /home/marco/silly/.git commit ...

--git-dir设置要编辑的代码库,而提问者特别想避免这种情况。 - Dan Hulme

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