我知道可以设置每个存储库的配置来覆盖用户级配置(即/path/to/my/repo/.gitconfig
覆盖~/.gitconfig
)。是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置?即,我有
|--topLevelFolder1
|--\
| ---.gitconfig_override
|--\
| ---childFolder1
| \---[...]
|--\
| ---childFolder2
| \---[...]
我想要定义的设置.gitconfig_override
申请在childFolder1
and childFolder2
.
我这样做的动机如下:我有一台工作笔记本电脑,我也在业余时间使用它来完成个人项目。我的所有工作代码都嵌套在一个文件夹中。当我推送工作 git 存储库时,我需要使用我的工作角色来执行此操作 - 工作登录名而不是姓名和工作电子邮件。当我推送到我自己的个人 (github) 存储库时,我想使用我的真实姓名和个人电子邮件进行操作。
我想到的其他可能的解决方案(和问题):
- 为“工作”和“娱乐”创建单独的用户,适当地设置其用户级别设置,并在切换上下文时以适当的用户身份登录(很麻烦,而且我很容易忘记切换)
- 创建一个脚本,在“workFolder”内搜索 git 存储库,并添加/更新其 .gitconfig 文件以保存适当的详细信息(如果我创建存储库并忘记在推送之前运行该脚本,我将作为错误的人推送)
- “hack”git,这样每次创建一个存储库时,它都会检查文件路径,并在适当的情况下更新 .gitconfig 文件(复杂、混乱,而且几乎肯定是错误的方法 - 另外,我不会第一个线索如何去做!)
我检查了这个问题 https://stackoverflow.com/questions/4220416/can-i-specify-multiple-users-for-myself-in-gitconfig,它似乎只包含单个存储库的解决方案,而不包含多个存储库的解决方案。希望有人会看到这个问题而错过了这个问题!
正如所提到的内特伊格的编辑 https://stackoverflow.com/a/24463387/1091015, git's 有条件包括 https://git-scm.com/docs/git-config#_conditional_includes非常适合这个。由于这个答案是为 git
首先,在某个位置创建一个新的配置文件,其中包含您想要在子文件夹中生效的设置 - 使用原始问题的文件夹,假设它位于~/topLevelFolder1/.gitconfig_include
In ~/.gitconfig
, add:
[includeIf "gitdir:~/toplevelFolder1/"]
path = ~/topLevelFolder1/.gitconfig_include
的任何子文件夹~/topLevelFolder1
现在将包含配置~/toplevelFolder1/.gitconfig_include
- 无需手动更改.git/config
在每个子文件夹的存储库中。 (这不override子文件夹配置中的任何内容 - 它只是adds正如“包含”所暗示的那样。)
Notes:
- Within
~/.gitconfig
该设置应该位于after您想要覆盖的配置,因为includeIf
将被其后的任何配置再次覆盖。
- 仅当您是时,此设置才包含该文件在存储库中在给定的路径下。如果您位于任何非存储库子路径中,它将被忽略。
- 尾随正斜杠 (
/
) 在里面gitdir
条件很重要。
-
git config --list
非常适合测试这个。您将在下面看到任何覆盖includeIf
输出中的行。您还可以使用以下命令检查特定条目:git config --get user.email
- On 适用于 Windows 的 Git,指定相对于您的用户目录的路径
~/
以及 Windows 风格驱动器的绝对路径,例如C:/
仅使用正斜杠。反斜杠和 Unix 风格的挂载点,例如/c/
不工作。此外,在includeIf
部分,您必须指定大小写正确的路径,因为比较是区分大小写.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)