【问题标题】:Changing .gitconfig location on Windows在 Windows 上更改 .gitconfig 位置
【发布时间】:2011-05-02 08:13:43
【问题描述】:

默认情况下,Windows Git 将全局 .gitconfig 放置在 c:\documents and settings\user\

如何更改该位置,以便将 .gitconfig 存储在 c:\my_configuration_files\ 中?

能做到吗?

【问题讨论】:

  • 只是想补充一下,我也遇到了这个问题。我在 %userprofile%/.git/.gitignore 中有我所有其他全局 git 配置文件(“exludesfiles”和“attrirutesfile”)(所以在一个文件夹中),但是 .gitconfig 我希望它就在它们旁边, 但必须在 %userprofile% 的根目录下.. 真的很烦人。
  • 自提出问题以来有什么进展吗?我的 .gitconfig 默认位于网络驱动器上,这意味着当我离线时它无法读取它。
  • 这背后的真正问题是:你为什么要这样做?

标签: windows git


【解决方案1】:

如果你将HOME 设置为c:\my_configuration_files\,那么 git 会在那里找到 .gitconfig。 here 描述了编辑环境变量。您需要设置 HOME 变量,然后重新打开任何 cmd.exe 窗口。使用“set”命令验证 HOME 确实指向正确的值。

当然,更改 HOME 也会影响其他应用程序。但是,从阅读 git 的源代码来看,这似乎是无需调整命令行即可更改这些文件位置的唯一方法。您还应该考虑 Stefan 的回应:您可以设置 GIT_CONFIG 变量。但是,为了达到您想要的效果,您需要将 --global 标志传递给所有 git 调用(以及任何本地 .git/config 文件都被忽略)。

【讨论】:

  • 嗯,不确定我是否理解正确但不会更改 HOME 对使用它的所有其他应用程序也有影响?有没有办法改变HOME,但Git本地?
  • 是的,它也会对其他应用程序产生影响。你问如何改变位置,我告诉你。查看我的编辑。
  • 有没有人真的让它工作而不会因为搬家而弄乱一大堆其他事情?
  • 这很可能是适用于 Windows 平台的解决方案。它也对我有用。我使用 Chocolatey 的 refreshenv 脚本来刷新我设置的环境变量 HOME(用户环境变量)。之后,我得到了所需的文件位置。
  • 我必须重新安装 Git 才能正常工作。如果我只是添加了一个名为 HOME 的新环境变量并将 .gitconfig 文件移动到该目录,它就不起作用了。
【解决方案2】:

更改 HOME 目录是错误的。更好的是为 gitconfig 创建到 HOME 目录的符号链接。

  1. 将 .gitconfig 从用户主目录移动到所需的目录。
  2. 以管理员身份运行命令行
  3. 转到您的用户主目录
  4. 输入 mklink .gitconfig \PathForNewLocationOfConfig.gitconfig

【讨论】:

  • 可能值得补充的是,如果您运行 git config --global 将一个项目添加到您的配置中,您的符号链接将被正在使用的 .gitconfig 的实际副本覆盖。我在测试 \PathForNewLocationOfConfig.gitconfig 是我的 Dropbox 文件夹的位置时遇到了这个问题
  • 如果您的 .gitconfig 位于网络驱动器上,您可能会收到“设备不支持符号链接”消息,排除此选项。
  • 我不认为这个解决方案适用于任何人。在我们公司,$HOME在网络驱动器上,每当网络连接出现问题时,链接也无法访问。
  • @MotoWilliams 在 2017 年重新审视这一点:使用 --global 编辑后符号链接保持不变
  • 这里,组警 (AD) 设置 HOMEDRIVE、HOMEPATH 和 HOMESHARE,但不是普通的、旧的、简单的 HOME。在没有 HOME 的情况下,git 似乎使用了前三种的某种组合。但是设置 HOME(通过设置用户特定环境变量的常用方法)有效:GIT 使用您设置的 HOME 值,并且 grouppolicy 不会破坏 HOME。
【解决方案3】:

我使用一种与其他配置文件略有不同的方法解决了这个问题。 Git Config 支持 includes,允许您指向另一个位置的配置文件。然后将该备用位置导入并扩展到位,就好像它是 .gitconfig 文件的一部分一样。所以现在我在 .gitconfig 中只有一个条目:

[include]
   path = c:\\path\\to\\my.config

Git 写入 .gitconfig 文件的任何更新都不会覆盖我的包含路径。这确实意味着有时我可能需要将值从 .gitconfig 移动到 my.config。

【讨论】:

  • +1:没有奇怪的配置,我的全局 gitconfig 是我存储在 git repo 本身中的东西,所以跟踪里面的内容是我的工作。进行全局更改时,我只需手动编辑全局文件。所以这对我来说非常有效,不需要像改变你的“HOME”环境变量那样奇怪,这是一个奇怪的想法,只是为了把 Git 的配置放在你想要的地方。毕竟,主目录对许多其他程序具有其他含义。您还可以在顶部放置不同的身份,并使用此解决方案在各个身份之间保持密钥设置相同。太棒了!
  • 我想知道是否可以让 git config 写入 [include]d 文件中的文件。
  • @JonathanNazario git config --file "included.file"
  • 创建一个 bash 别名似乎效果很好:alias git="git -c include.path $PATH_TO_GITCONFIG" 然后,您根本不需要任何 $HOME/.gitconfig
【解决方案4】:

查看git help configFILESENVIRONMENT部分。

【讨论】:

    【解决方案5】:

    我不是 Git 大师,但搜索对我来说最简单的解决方案是转到 C:\Program Files (x86)\Git\etc 并在文本编辑器中打开 profile

    在第 37 行 # Set up USER's home directory 上有一条 if 语句。我取出 if 语句并放入我希望 gitconfig 所在的本地目录,然后我只是将现有的 gitconfig 文件(位于网络驱动器上)复制到该位置。

    【讨论】:

    • 非常感谢。虽然所有其他选项对我来说都失败了,但这只是为我节省了一百万个 git 语句乘以 6 秒:D 这就是我所做的......` HOME="$USERPROFILE\Downloads\Tools\Git_Config"`
    • 在 git 2.24(2019 年 12 月)中不再存在“家”这个词(或任何与您相似的内容:37 行)。
    【解决方案6】:

    对我来说,更改 Start In 位置(至少是 git-gui 的)并不会影响它查找 .gitconfig 的位置。我在工作中的设置为我们的家安装了 U:,但我们没有权限直接在 U: 中写入,只有在内部为我们创建的子目录,所以这对我来说是一个交易破坏者。

    我通过制作一个批处理脚本解决了这个问题,该脚本将覆盖该应用程序的 HOMEDRIVE 和 HOMEPATH 环境变量。然后将我的开始菜单快捷方式更改为指向该批处理脚本。

    【讨论】:

    • 我想了解更多关于您为完成此修复所做的工作。
    • 你能分享你的解决方案吗?
    【解决方案7】:

    首先检查 HOME 设置,然后将 HOME 和 HOMEDRIVE 更改为现有目录。

    c:\git>set HOME
    HOME=U:\
    HOMEDRIVE=U:
    HOMEPATH=\
    

    然后将 HOME 和 HOMEDRIVE 更改为

    set HOME=c:\tmp
    set HOMEDRIVE=C:
    

    【讨论】:

      【解决方案8】:
      1. 更改为文件夹%PROGRAMFILES%\Git\etc
      2. 编辑文件profile
      3. 添加到第一行HOME="c:\location_were_you_want_gitconfig"
      4. 完成

      注意:文件权限通常受到限制,因此请相应地更改它们,否则您将无法保存更改。

      【讨论】:

      • 这在 2019 年 12 月的 git 2.24、Win10、git config --list --show-origin 显示,原来的 HOME 仍然存在。
      【解决方案9】:

      如果您在 Windows 上并且由于权限不足而在更改环境变量或 mklink 时遇到问题,一个简单的解决方案是在另一个位置启动 git batch。

      只需右键单击 Git Bash.exe,单击属性并将“Start in”属性更改为 c:\my_configuration_files\

      【讨论】:

      • 哇,这完全可以轻松工作。创建了一个新的快捷方式,并在“属性->开始于”下将 %HOMEDRIVE%%HOMEPATH% 更改为 `c:\my_repo_folder`。发挥了魅力。
      • 这对我不起作用。 .gitconfig 文件仍然从我的主目录加载
      【解决方案10】:

      我想做同样的事情。我能找到的最好的是@MicTech 的解决方案。但是,正如@MotoWilliams 所指出的,这在 Git 对 .gitconfig 文件所做的任何更新中都无法保留,该文件将链接替换为仅包含新设置的新文件。

      我通过编写以下 PowerShell 脚本并在我的配置文件启动脚本中运行它解决了这个问题。每次运行时,它都会将已添加到用户 .gitconfig 的所有设置复制到全局设置,然后将 .gitconfig 文件中的所有文本替换为导入全局文件的 [include] 标头。

      我将全局 .gitconfig 文件与许多其他全局脚本和工具一起保存在存储库中。我所要做的就是记住检查脚本附加到我的全局文件的任何更改。

      这对我来说似乎很透明。希望对您有所帮助!

      9 月 9 日: 更新以检测添加到配置文件的新条目何时重复并忽略它们。这对于像 SourceTree 这样的工具很有用,如果它们找不到现有的更新并且不遵循包含,则会编写新的更新。

      function git-config-update
      {
        $localPath = "$env:USERPROFILE\.gitconfig".replace('\', "\\")
        $globalPath = "C:\src\github\Global\Git\gitconfig".replace('\', "\\")
      
        $redirectAutoText = "# Generated file. Do not edit!`n[include]`n  path = $globalPath`n`n"
        $localText = get-content $localPath
      
        $diffs = (compare-object -ref $redirectAutoText.split("`n") -diff ($localText) | 
          measure-object).count
      
        if ($diffs -eq 0)
        {
          write-output ".gitconfig unchanged."
          return
        }
      
        $skipLines = 0
        $diffs = (compare-object -ref ($redirectAutoText.split("`n") | 
           select -f 3) -diff ($localText | select -f 3) | measure-object).count
        if ($diffs -eq 0)
        {
          $skipLines = 4
          write-warning "New settings appended to $localPath...`n "
        }
        else
        {
          write-warning "New settings found in $localPath...`n "
        }
        $localLines = (get-content $localPath | select -Skip $skipLines) -join "`n"
        $newSettings = $localLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries) | 
          where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }
      
        $globalLines = (get-content  $globalPath) -join "`n"
        $globalSettings =  $globalLines.Split(@("["), [StringSplitOptions]::RemoveEmptyEntries)| 
          where { ![String]::IsNullOrWhiteSpace($_) } | %{ "[$_".TrimEnd() }
      
        $appendSettings = ($newSettings | %{ $_.Trim() } | 
          where { !($globalSettings -contains $_.Trim()) })
        if ([string]::IsNullOrWhitespace($appendSettings))
        {
          write-output "No new settings found."
        }
        else
        {
          echo $appendSettings
          add-content $globalPath ("`n# Additional settings added from $env:COMPUTERNAME on " + (Get-Date -displayhint date) + "`n" + $appendSettings)
        }
        set-content $localPath $redirectAutoText -force
      }
      

      【讨论】:

        【解决方案11】:

        作为一个长期以来对此感兴趣的人。参见手册:

        $XDG_CONFIG_HOME/git/config - 第二个用户特定的配置文件。如果$XDG_CONFIG_HOME 未设置或为空,将使用 $HOME/.config/git/config。此文件中设置的任何单值变量都将被 ~/.gitconfig 中的任何内容覆盖。如果您有时使用较旧版本的 Git,最好不要创建此文件,因为最近才添加了对该文件的支持。

        这是最近才添加的。此转储来自 2.15.0。

        为我工作。

        【讨论】:

        • 这是 Windows 中最简单、干扰最小、最可靠的解决方案。
        • 对我不起作用。我在 $XDG_CONFIG_HOME/git/gitconfig 中有一个文件,但 git 没有看到它。
        • 只是 - 它不是 $XDG_CONFIG_HOME/git/gitconfig ,而是 $XDG_CONFIG_HOME/git/config
        【解决方案12】:

        对我来说它工作起来非常简单:

        1. 将“.gitconfig”从旧目录复制到 %USERPROFILE%(“c:\users\username”中的标准)
        2. 右键单击 GITGUI 和 GITBASH 的启动图标,将“run in”:“%HOMEDRIVE%%HOMEPATH%”更改为“%USERPROFILE%”。当然,您可以使用任何其他目录来代替“%USERPROFILE%”。

        screen shot before

        screen shot after

        【讨论】:

          【解决方案13】:

          无需更改 Windows HOME 变量的解决方案
          操作系统:Windows 10
          git版本:2.27.0.windows.1

          我使用的是便携式版本的 Git,所以我所有的配置文件都在我的笔式驱动器(E:) 上。这对我有用:

          1. https://git-scm.com/ 下载可移植的 Git。运行该文件并将其安装在所需位置。我将它安装在 E:\git 中。
          2. E:\git 运行 git-bash.exe
          3. 我想将.gitconfig 和其他 bash 文件放在 E 中,所以我创建了一个名为 home 的文件夹,我希望将它们全部放入其中。
            @987654323 @
          4. 转到 etc 文件夹并打开名为 profile 的文件(在我的例子中,它是 E:\git\etc\profile)
          5. profile 文件的末尾添加我们创建的 home 目录(或您希望放置 .gitconfig 文件的目录)的绝对路径。
            HOME="E:\git\home"

          现在它不再在 C:\Users 目录中搜索 .gitconfig,而只在上面设置的路径中查找。

          $ git config --global --list
          fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory
          

          它给出了一个错误,因为那里还没有 .gitconfig 文件。这只是为了证明我们已经成功地改变了.gitconfig文件的位置,而没有改变Windows中的HOME目录。

          【讨论】:

            【解决方案14】:

            至少从 2.34.1 开始,您现在可以将 GIT_CONFIG_GLOBAL 环境变量设置为您的 .gitconfig 文件的路径。详情请见http://git-scm.com/docs/git-config#_environment

            【讨论】:

              【解决方案15】:

              1- 打开D:\PortableApps\Git-2.31.1PortableByAmir\etc\profile再见记事本

              2- 将此添加到profile 文件:

              HOME="/PortableHome"
              

              3- 在D:\PortableApps\Git-2.31.1PortableByAmir\ 中创建PortableHome 文件夹

              4-复制

              C:\Users\Amir\.gitconfig
              C:\Users\Amir\.git-credentials
              

              D:\PortableApps\Git-2.31.1PortableByAmir\PortableHome
              

              注意:D:\PortableApps\Git-2.31.1PortableByAmir\bin\bash.exe 不是可移植的 git 只开D:\PortableApps\Git-2.31.1PortableByAmir\git-bash.exe

              【讨论】:

                猜你喜欢
                • 2021-04-19
                • 2021-03-19
                • 2011-01-11
                • 1970-01-01
                • 2020-07-05
                • 2014-08-11
                • 2021-12-26
                • 2019-06-25
                相关资源
                最近更新 更多