在Windows上更改.gitconfig位置

时间:2010-10-29 10:15:08

标签: git

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

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

可以完成吗?

14 个答案:

答案 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目录的符号链接。

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

答案 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和HOMEDRIVE
set 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)

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

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

screen shot before

screen shot after

答案 11 :(得分:0)

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

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

答案 12 :(得分: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. 在我们创建的 home 目录(或您想在其中放置.gitconfig文件的目录)的绝对路径添加到 profile 文件的末尾。
    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