在Windows上,默认情况下,Git将全局.gitconfig放在 c:\documents and settings\user\
如何更改该位置,以便将.gitconfig存储在其中c:\my_configuration_files\
?
能做到吗?
在Windows上,默认情况下,Git将全局.gitconfig放在 c:\documents and settings\user\
如何更改该位置,以便将.gitconfig存储在其中c:\my_configuration_files\
?
能做到吗?
Answers:
如果设置HOME
为c:\my_configuration_files\
,则git将在其中找到.gitconfig。这里描述了编辑环境变量。您需要设置HOME变量,然后重新打开任何cmd.exe窗口。使用“ set”命令来验证HOME是否确实指向正确的值。
当然,更改HOME也会影响其他应用程序。但是,通过阅读git的源代码,这似乎是无需调整命令行即可更改这些文件的位置的唯一方法。您还应该考虑Stefan的响应:可以设置GIT_CONFIG变量。但是,要获得所需的效果,您需要将该--global
标志传递给所有git调用(加上所有本地.git / config文件都将被忽略)。
.gitconfig
文件移至该目录,则该文件将不起作用。
更改HOME目录是错误的。更好的方法是为gitconfig创建指向HOME目录的符号链接。
$HOME
它位于网络驱动器上,每当网络连接出现问题时,链接也将无法访问。
我已经使用一种略有不同的方法解决了这个问题,该方法在其他配置文件中也可以使用。 Git Config支持的功能包括允许您指向其他位置的配置文件。然后,将该替代位置导入并就位扩展,就好像它是.gitconfig文件的一部分一样。所以现在我在.gitconfig中只有一个条目:
[include]
path = c:\\path\\to\\my.config
Git写入.gitconfig文件的任何更新都不会覆盖我的包含路径。这确实意味着有时我可能需要将值从.gitconfig移至my.config。
git config --file "included.file"
查看的“ 文件和环境”部分git help config
。
我不是Git的高手,但是从寻找对我来说最简单的解决方案开始,就是去C:\Program Files (x86)\Git\etc
打开并profile
在文本编辑器中打开它。
if
第37行有一个声明# Set up USER's home directory
。我取出该if
语句,并将其放置在我想要的gitconfig所在的本地目录中,然后将我现有的gitconfig文件(位于网络驱动器上)复制到该位置。
如果您在Windows上并且由于更改环境变量或mklink
权限不足而遇到问题,那么解决此问题的简单方法是在另一个位置启动git batch。
只需右键单击Git Bash.exe,单击属性,然后将“开始于”属性更改为c:\my_configuration_files\
。
%HOMEDRIVE%%HOMEPATH%
为“ c:\ my_repo_folder”。工作的魅力。
我想做同样的事情。我能找到的最好的是@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
}
作为对此非常感兴趣的人。从手册中看到:
$ XDG_CONFIG_HOME / git / config-第二个用户特定的配置文件。如果$XDG_CONFIG_HOME
未设置或为空,则将使用$ HOME / .config / git / config。此文件中设置的任何单值变量都将被〜/ .gitconfig中的内容覆盖。如果您有时使用旧版本的Git,最好不要创建此文件,因为该文件的支持是最近才添加的。
这是最近才添加的。此转储来自2.15.0。
为我工作。
%PROGRAMFILES%\Git\etc
profile
HOME="c:\location_were_you_want_gitconfig"
注意:文件权限通常受到限制,因此请相应地更改它们,否则您将无法保存更改。
git config --list --show-origin
显示原始的HOME仍然存在。
无需更改Windows HOME变量
操作系统的解决方案:Windows 10
git版本:2.27.0.windows.1
我使用的是便携式版本的Git,所以我的所有配置文件都在笔式驱动器(E :)上。这对我有用:
.gitconfig
其他bash文件放入E,所以我创建了一个名为home的文件夹,我希望将它们全部包含在其中。mkdir home
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目录。