在Windows上更改.gitconfig位置

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

我怎样才能改变这个位置,所以.gitconfig存储在c:\my_configuration_files\

它可以完成吗?

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

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

改变HOME目录是错误的。 更好的是创buildgitconfig到HOME目录的符号链接。

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

查看git help config文件环境部分。

我不是git master,但是从四处搜寻最简单的解决scheme就是到C:\ Program Files(x86)\ Git \ etc并在文本编辑器中打开“profile”。 在第37行有一条if语句“#设置USER的主目录”我取出了if语句并放入了我想要gitconfig的本地目录,然后我复制了我现有的gitconfig文件(位于networking驱动器上)到那个地方

我已经使用稍微不同的方法解决了这个问题,我已经看到了其他configuration文件的工作。 Git Config支持包括允许您指向另一个位置的configuration文件。 然后将该替代位置导入并展开,就好像它是.gitconfig文件的一部分一样。 所以,现在我只需要在.gitconfig中input一个条目:

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

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

对我而言,更改开始位置(至less是git-gui)并不会影响它在.gitconfig中的位置。 我在工作上的设置将U:作为我们的家,但是我们没有权限直接写在U中,只有在我们里面创build的子目录,所以这对我来说是一个破坏性的事情。

我通过创build一个批处理脚本来解决这个问题,这个批处理脚本会覆盖HOMEDRIVE和HOMEPATH的envvariables。 然后改变我的开始菜单快捷方式来指向该批处理脚本。

如果你在windows上,并且由于权限不够而改变了环境variables或者mklink ,问题的一个简单的解决方法就是在另一个地方启动git batch。

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

我想做同样的事情。 我能find的最好的是@ MicTech的解决scheme。 但是,正如@MotoWilliams所指出的那样,Git所做的任何更新都无法生存到.gitconfig文件中,该文件会用仅包含新设置的新文件replace链接。

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

我把全局的.gitconfig文件放在一个回购中,还有很多其他的全局脚本和工具。 我所要做的就是记住脚本附加到我的全局文件中的任何更改。

这似乎对我来说非常透明。 希望能帮助到你!

9月9日:更新以检测添加到configuration文件的新条目是否重复,并忽略它们。 这对于像SourceTree这样的工具是非常有用的,如果他们找不到现有的更新并且不遵循include,那么它将会写入新的更新。

 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 } 

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

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

然后通过改变HOME和HOMEDRIVE

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

作为一个很长时间以来一直对此感兴趣的人。 从手册中查看:

$ XDG_CONFIG_HOME / git / config – 第二个用户特定的configuration文件。 如果$XDG_CONFIG_HOME未设置或为空,则使用$ HOME / .config / git / config。 在这个文件中设置的任何单值variables将被〜/ .gitconfig中的任何内容覆盖。 如果你有时使用旧版本的Git,不要创build这个文件,因为这个文件的支持最近被添加了。

这是最近才join的。 这个转储是从2.15.0。

为我工作。