在Windows上更改.gitconfig位置


105

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

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

能做到吗?


只是想补充一点,我也遇到了这个问题。我在%userprofile%/。git / .gitignore(因此放在一个文件夹中)中有所有其他全局git config内容(“ exludesfiles”和“ attrirutesfile”),但是我希望将.gitconfig放在它们旁边,但必须是%userprofile%的根。.确实很烦人。
2014年

6
问了问题以来有什么进展吗?默认情况下,我的.gitconfig位于网络驱动器上,这意味着我离线时无法读取它。
Lech Rzedzicki

Answers:


67

如果设置HOMEc:\my_configuration_files\,则git将在其中找到.gitconfig。这里描述编辑环境变量。您需要设置HOME变量,然后重新打开任何cmd.exe窗口。使用“ set”命令来验证HOME是否确实指向正确的值。

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


2
嗯,不确定我是否正确理解但不会更改HOME对使用它的所有其他应用程序也有影响?没有方法可以更改HOME,而是本地化吗?
鲁克

是的,它也会对其他应用程序产生影响。您问如何更改位置,我告诉了您。看到我的编辑。
Martin v。Löwis10年

10
有没有人真正做到这一点而没有将HOME弄乱其他所有事情的副作用呢?
阿德·米勒

这很可能是在Windows平台上运行的解决方案。它也对我有用。我使用Chocolatey的refreshenv脚本刷新了我设置的环境变量HOME(用户环境变量)。之后,我得到了所需的文件位置。
Tore Aurstad '19

我必须重新安装Git才能正常工作。如果我只是添加了一个名为HOME的新环境变量并将.gitconfig文件移至该目录,则该文件将不起作用。
卡萨巴

46

更改HOME目录是错误的。更好的方法是为gitconfig创建指向HOME目录的符号链接。

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

9
可能值得补充的是,如果您运行git config --global将一个项目添加到您的配置中,则符号链接将被使用的.gitconfig的实际副本覆盖。在测试\ PathForNewLocationOfConfig.gitconfig是我的Dropbox文件夹的位置时,我遇到了这个问题
MotoWilliams 2012年

8
如果您的.gitconfig位于网络驱动器上,则可能会收到“该设备不支持符号链接”消息,该消息将其排除在外。
2015年

4
我认为此解决方案对任何人都无效。在我们公司中,$HOME它位于网络驱动器上,每当网络连接出现问题时,链接也将无法访问。
andreee '16

1
@MotoWilliams在2017年重新审视:使用--global编辑后,符号链接保持完整
Snake

2
此处,组警察(AD)设置HOMEDRIVE,HOMEPATH和HOMESHARE,但不设置普通,老式,简单的HOME。在没有HOME的情况下,git似乎使用了前三个的某种组合。但是设置HOME(通过用于设置用户特定的环境变量的常用方法)是可行的:GIT使用您设置的HOME值,而grouppolicy不会破坏HOME。
David I. McIntosh

29

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

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

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


+1:没有奇怪的配置,我的全局gitconfig是我自己存储在git存储库中的东西,因此,跟踪其中的内容是我的工作。进行全局更改时,我只是手动编辑全局文件。因此,这对我来说非常有效,并且不需要像更改“ HOME”环境变量那样奇怪,仅出于将Git的配置放在所需位置的目的,这是一个奇怪的想法。毕竟,主目录对许多其他程序具有其他含义。同样,您可以在此解决方案的顶部放置一个不同的标识,并使各个标识之间的密钥设置保持相同。优秀的!
user62177541 '16

2
我想知道是否可以将git config写入[include] d文件中的文件。
乔纳森·纳扎里奥

1
@JonathanNazariogit config --file "included.file"
Pero P.


11

我不是Git的高手,但是从寻找对我来说最简单的解决方案开始,就是去C:\Program Files (x86)\Git\etc打开并profile在文本编辑器中打开它。

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


万分感谢。虽然所有其他选项对我来说都失败了,但这只是为我节省了一百万个git语句乘以6秒:D这就是我所做的...`HOME =“ $ USERPROFILE \ Downloads \ Tools \ Git_Config”`
PravyNandas

2
git 2.24(2019年12月)中不再存在``家''这个词(或任何看起来与您类似的词:37)。
Frank Nocke

6

对我来说,更改(至少是git-gui的)“开始位置”位置不会影响它查找.gitconfig的位置。我在工作场所的设置将U:挂载到我们的家中,但我们无权直接在U:中编写,只允许在内部为我们创建的子目录,因此这对我来说是个大问题。

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


1
我想了解更多有关您完成此修复程序的信息。
马特·卡斯托

您可以分享您的解决方案吗?
萨尔

4

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

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

然后通过以下方式更改HOME和HOMEDRIVE

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

3

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

只需右键单击Git Bash.exe,单击属性,然后将“开始于”属性更改为c:\my_configuration_files\


哇,这完全轻松自如。创建了一个新的快捷方式,并在“属性->开始于”下将其更改%HOMEDRIVE%%HOMEPATH%为“ c:\ my_repo_folder”。工作的魅力。
Shane 2015年

2
这对我不起作用。该文件的.gitconfig仍然离我家目录加载
戴夫乙

3

我想做同样的事情。我能找到的最好的是@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
}

2

作为对此非常感兴趣的人。从手册中看到:

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

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

为我工作。


这是Windows中最简单,最少干扰,最可靠的解决方案。
kwill

2
  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仍然存在。
Frank Nocke

1

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

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

屏幕截图之前

截屏后


0

无需更改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的文件夹,我希望将它们全部包含在其中。
    mkdir home
  4. 转到etc文件夹并打开名为profile的文件(在我的情况下为E:\ git \ etc \ profile)
  5. 配置文件的末尾,将绝对路径添加到我们创建的目录(或添加到您要放置.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目录。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.