git - 为所有子文件夹设置 git 配置值

标签 git

我知道可以设置覆盖用户级配置的每个 repo 配置(即 /path/to/my/repo/.gitconfig 覆盖 ~/.gitconfig)。是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置?即,我有

|--topLevelFolder1
|--\
|   ---.gitconfig_override
|--\
|   ---childFolder1
|       \---[...]
|--\
|   ---childFolder2
|       \---[...]

我希望 .gitconfig_override 中定义的设置应用于 childFolder1childFolder2

我这样做的动机如下:我有一台工作笔记本电脑,我也在业余时间用于个人项目。我所有的工作代码都嵌套在一个文件夹中。当我 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/

相关文章:

git - GitHub 如何知道我使用的是哪个帐户?

git - 在 Hudson 中,如何获取当前构建的 git commit sha?

git - TortoiseGit:如何查看即将推送的提交列表

git - 系统配置文件(nginx/php.ini 等)的 git repo 的最佳实践

git - 如何在 IIS 上设置 Git 裸 HTTP 可用存储库

git - 查找包含特定提交的 merge 提交

git - 无法从 github repo 中删除奇怪命名的文件

git - Visual Studio Code - git 颜色和项目层次结构

git - 无法在 Cygwin : error while loading shared libraries 上执行 git push/pull

php - OpenShift 操作 Hook 部署问题