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

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

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

我这样做的动机如下:我有一台工作笔记本电脑,我也在业余时间用于个人项目。我所有的工作代码都嵌套在一个文件夹中。当我推送工作 git repos 时,我需要使用我的工作角色 - 工作登录名而不是姓名和工作电子邮件。当我推送到我自己的个人 (github) 存储库时,我想使用我的真实姓名和个人电子邮件。

我想到的其他可能的解决方案(和问题):
  • 为“工作”和“娱乐”创建单独的用户,适本地设置他们的用户级别设置,并在我切换上下文时以适当的用户身份登录(麻烦,而且我很容易忘记切换)
  • 创建一个在“workFolder”中搜索 git repos 的脚本,并添加/更新他们的 .gitconfig 文件以保存适当的细节(如果我创建了一个 repo 并且在推送之前忘记运行脚本,我会推送错误的人)
  • "hack"git 这样每次创建 repo 时,它都会检查文件路径,并在适当的情况下更新 .gitconfig 文件(复杂、困惑,而且几乎可以肯定是错误的方法 - 另外,我不会第一个线索如何去做!)

  • 我检查了 this question ,它似乎只包含单个 repos 的解决方案,而不是多个。希望有人会看到这个问题而错过了那个问题!

    最佳答案

    编辑:Git 2.13 引入了 conditional includes ,旨在解决这个确切的问题。

    为了历史的缘故(并且用户坚持使用旧版本的 git),我的原始答案保留在下面。

    ====================================

    根据阅读 gitconfig 联机帮助页,不支持您想要的确切行为。

    但是,从 git 1.7.12 开始,Git 从 four different sources 读取配置数据,其中两个是特定于用户的:
    $XDG_CONFIG_HOME/git/config~/.gitconfig~/.gitconfig 中的条目覆盖 $XDG_CONFIG_HOME/git/config 中的条目。

    这意味着您可以将您的个人 gitconfig 存储在 $XDG_CONFIG_HOME/git/config 并将特定于机器的覆盖放在 ~/.gitconfig 中。就像是

    [user]
        email = username@example.com
    

    ~/.gitconfig 中应该涵盖您的电子邮件案例。

    请注意,如果 $XDG_CONFIG_HOME 未设置,git 将查找 ~/.config/git/config

    这对我很有效,因为我在工作机器上只有两个个人存储库(我的 emacs 配置和我的 dotfiles)。如果您经常将个人存储库添加到您的工作机器中,这对您来说可能还不够好。

    在这种情况下,围绕 git initgit clone 的自定义包装器将是您最好的选择。

    $PATH 上名称与“git-*”匹配的任何二进制文件都可以作为 git 命令调用,因此您只需要一对 shell 脚本来调用带有所有传递的参数的原始命令,然后将正确的配置文件复制到.git/config

    关于git - 为所有子文件夹设置 git 配置值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21307793/

    10-13 09:18
    查看更多