默认情况下,Windows Git将全局.gitconfig放在c:\documents and settings\user\
如何更改该位置,以便.gitconfig存储在c:\my_configuration_files\
?
可以完成吗?
答案 0 :(得分:56)
如果将HOME
设置为c:\my_configuration_files\
,那么git将在那里找到.gitconfig。编辑环境变量的描述为here。您需要设置HOME变量,然后重新打开任何cmd.exe窗口。使用“set”命令验证HOME确实指向正确的值。
更改HOME当然也会影响其他应用程序。但是,通过阅读git的源代码,这似乎是更改这些文件位置的唯一方法,而无需调整命令行。您还应该考虑Stefan的回答:您可以设置GIT_CONFIG变量。但是,要获得所需的效果,需要将--global
标志传递给所有git调用(以及忽略任何本地.git / config文件)。
答案 1 :(得分:40)
更改HOME目录是错误的。更好的是为gitconfig创建到HOME目录的符号链接。
答案 2 :(得分:21)
我已经使用稍微不同的方法解决了这个问题,我已经看到它可以用于其他配置文件。 Git Config支持 includes ,允许您指向其他位置的配置文件。然后导入并扩展该备用位置,就好像它是.gitconfig文件的一部分一样。所以现在我只在.gitconfig中有一个条目:
[include]
path = c:\\path\\to\\my.config
Git写入.gitconfig文件的任何更新都不会覆盖我的包含路径。这确实意味着偶尔我可能需要将值从.gitconfig移动到my.config。
答案 3 :(得分:12)
查看git help config
的 FILES 和环境部分。
答案 4 :(得分:9)
我不是Git高手,但是通过搜索对我来说最简单的解决方案,只需转到C:\Program Files (x86)\Git\etc
并在文本编辑器中打开profile
。
第37行if
上有# Set up USER's home directory
声明。我拿出了if
语句并放入了我想要gitconfig的本地目录,然后我只是将我现有的gitconfig文件(在网络驱动器上)复制到该位置。
答案 5 :(得分:5)
对我来说,更改Start In位置(至少是git-gui)并没有影响它寻找.gitconfig的位置。我的工作设置安装U:对于我们的家,但我们没有权限用U:直接编写,只有为我们内部创建的子目录,所以这对我来说是一个交易破坏。
我通过创建一个批处理脚本解决了这个问题,该脚本将仅覆盖该应用程序的HOMEDRIVE和HOMEPATH env变量。然后将我的“开始”菜单快捷方式更改为指向该批处理脚本。
答案 6 :(得分:4)
首先检查HOME设置,然后将HOME和HOMEDRIVE更改为现有目录。
c:\git>set HOME
HOME=U:\
HOMEDRIVE=U:
HOMEPATH=\
然后通过
更改HOME和HOMEDRIVEset HOME=c:\tmp
set HOMEDRIVE=C:
答案 7 :(得分:3)
如果您在Windows上并且由于权限不足而无法更改环境变量或mklink
,则问题的简单解决方案是在另一个位置启动git批处理。
右键单击Git Bash.exe,单击属性并将“开始”属性更改为c:\my_configuration_files\
。
答案 8 :(得分:3)
我想做同样的事情。我能找到的最好的是@ MicTech的解决方案。但是,正如@MotoWilliams所指出的那样,Git对.gitconfig文件进行的任何更新都无法生存,该文件用仅包含新设置的新文件替换该链接。
我通过编写以下PowerShell脚本并在我的配置文件启动脚本中运行它来解决这个问题。每次运行时,它都会将已添加到用户的.gitconfig中的所有设置复制到全局设置,然后使用导入全局文件的[include]标头替换.gitconfig文件中的所有文本。
我将全局.gitconfig文件与许多其他全局脚本和工具一起保存在repo中。我所要做的就是记住检查脚本附加到我的全局文件的任何更改。
这似乎对我来说非常透明。希望它有所帮助!
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
}
答案 9 :(得分:2)
作为一个对此非常感兴趣的人。参见手册:
$XDG_CONFIG_HOME/git/config - 第二个特定于用户的配置文件。如果未设置$XDG_CONFIG_HOME
或为空,则将使用$ HOME / .config / git / config。此文件中设置的任何单值变量都将被〜/ .gitconfig中的任何内容覆盖。如果您有时使用旧版本的Git,最好不要创建此文件,因为最近才添加对此文件的支持。
最近才加入。此转储来自2.15.0。
适合我。
答案 10 :(得分:1)
对我来说,它的工作非常简单:
答案 11 :(得分:0)
%PROGRAMFILES%\Git\etc
profile
HOME="c:\location_were_you_want_gitconfig"
注意:文件权限通常受到限制,因此请相应地更改它们,否则您将无法保存更改。
答案 12 :(得分:0)
无需更改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目录。
答案 13 :(得分:0)
1- 打开 D:\PortableApps\Git-2.31.1PortableByAmir\etc\profile
再见记事本
2- 将此添加到 profile
文件:
HOME="/PortableHome"
3- 在 PortableHome
中创建 D:\PortableApps\Git-2.31.1PortableByAmir\
文件夹
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