我知道可以设置覆盖用户级配置的每个 repo 配置(即 /path/to/my/repo/.gitconfig
覆盖 ~/.gitconfig
)。是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置?即,我有
|--topLevelFolder1
|--\
| ---.gitconfig_override
|--\
| ---childFolder1
| \---[...]
|--\
| ---childFolder2
| \---[...]
我希望 .gitconfig_override
中定义的设置应用于 childFolder1
和 childFolder2
。
我这样做的动机如下:我有一台工作笔记本电脑,我也在业余时间用于个人项目。我所有的工作代码都嵌套在一个文件夹中。当我 push 工作 git repos 时,我需要使用我的工作角色 - 工作登录名而不是姓名和工作电子邮件。当我推送到我自己的个人 (github) 存储库时,我想使用我的真实姓名和个人电子邮件。
我想到的其他可能的解决方案(和问题):
- 为“工作”和“娱乐”创建单独的用户,适本地设置他们的用户级别设置,并在我切换上下文时以适当的用户身份登录(麻烦,而且我很容易忘记切换)
- 创建一个脚本,在“workFolder”中搜索 git repos,并添加/更新它们的 .gitconfig 文件以保存适当的详细信息(如果我创建了一个 repo 并且忘记在推送之前运行脚本,我将推送错误人)
- “破解”git,这样每次它创建一个 repo 时,它都会检查文件路径,并在适当的情况下更新 .gitconfig 文件(复杂、困惑,而且几乎可以肯定是错误的方法 - 另外,我不会'我不知道该怎么做!)
我检查了this question ,它似乎只包含单个 repo 的解决方案,而不是多个。希望有人会看到这个问题而错过了那个问题!
最佳答案
如 NateEag's edit 所述, git 的 Conditional Includes非常适合这个。因为这个答案是为 git < 2.13 的人准备的,所以这里是为那些拥有更新版本的人准备的。
首先,在某个地方创建一个新的配置文件,其中包含您想要在子文件夹中生效的设置 - 使用原始问题的文件夹,假设它位于 ~/topLevelFolder1/.gitconfig_include
/p>
在~/.gitconfig
中,添加:
[includeIf "gitdir:~/toplevelFolder1/"]
path = ~/topLevelFolder1/.gitconfig_include
~/topLevelFolder1
的任何子文件夹现在都将包含 ~/toplevelFolder1/.gitconfig_include
中的配置 - 无需手动更改 。 git/config
在每个子文件夹的 repo 中。 (这不会覆盖子文件夹配置中的任何内容 - 它只是添加到它,正如“include”所暗示的那样。)
注意事项:
- 此设置应位于之后您要在
~/.gitconfig
中覆盖的配置,因为includeIf
将被任何配置再次覆盖紧随其后。 - 仅当您位于给定路径下的存储库中时,此设置才包括该文件。如果您在任何非存储库子路径中,它将被忽略。
gitdir
条件中的尾部正斜杠 (/
) 很重要。git config --list
非常适合测试这个。您将在输出中的includeIf
行下方看到任何覆盖。您还可以检查特定条目,例如git config --get user.email
- 在 Windows 版 Git 上,使用
~/
指定相对于您的用户目录的路径,使用 Windows 风格的驱动器指定绝对路径,例如C:/
仅使用正斜杠。反斜杠和 Unix 风格的挂载点如/c/
不起作用。此外,在includeIf
部分,您必须使用正确的大小写指定路径,因为比较区分大小写。
关于git - 为所有子文件夹设置 git 配置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21307793/