正在更改Windows上的.gitconfig位置

正在更改Windows上的.gitconfig位置,windows,git,Windows,Git,默认情况下,Windows Git将global.gitconfig放在c:\documents and settings\user\ 如何更改该位置,使.gitconfig存储在c:\my\u configuration\u files\中 可以这样做吗?查看的文件和环境部分。如果您将主页设置为c:\my\u configuration\u FILES\,那么git将在那里找到.gitconfig。描述了编辑环境变量。您需要设置HOME变量,然后重新打开任何cmd.exe窗口。使用“set”命

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

如何更改该位置,使.gitconfig存储在
c:\my\u configuration\u files\


可以这样做吗?

查看的文件和环境部分。

如果您将
主页设置为
c:\my\u configuration\u FILES\
,那么git将在那里找到.gitconfig。描述了编辑环境变量。您需要设置HOME变量,然后重新打开任何cmd.exe窗口。使用“set”命令验证HOME确实指向正确的值


当然,改变住所也会影响其他应用程序。然而,从阅读git的源代码来看,这似乎是在不需要调整命令行的情况下更改这些文件位置的唯一方法。您还应该考虑斯特凡的响应:您可以设置GITY-CONFIG变量。但是,为了达到您想要的效果,您需要将
--global
标志传递给所有git调用(加上忽略任何本地.git/config文件)。

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

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

  • 如果您在windows上,并且由于权限不足而在更改环境变量或
    mklink
    时遇到问题,那么解决问题的简单方法是在其他位置启动git batch


    只需右键单击Git Bash.exe,单击properties并将“Start in”属性更改为
    c:\my\u configuration\u files\

    我也想做同样的事情。我能找到的最好的办法就是@MicTech的解决方案。但是,正如@MotoWilliams所指出的那样,Git对.gitconfig文件进行的任何更新都无法保留该链接,该文件将使用仅包含新设置的新文件替换该链接

    我通过编写下面的PowerShell脚本并在我的概要文件启动脚本中运行它来解决这个问题。每次运行时,它都会将添加到用户的.gitconfig中的任何设置复制到全局设置,然后将.gitconfig文件中的所有文本替换为导入全局文件的和[include]头

    我将global.gitconfig文件与许多其他全局脚本和工具一起保存在repo中。我所要做的就是记住签入脚本附加到全局文件的任何更改

    对我来说,这似乎相当透明。希望有帮助

    9月9日:更新以检测添加到配置文件的新条目是否重复并忽略它们。这对于像SourceTree这样的工具很有用,如果它们找不到现有的更新并且不遵循includes,它们将编写新的更新

    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
    }
    

    我不是Git高手,但在搜索对我来说最简单的解决方案时,只需转到
    C:\ProgramFiles(x86)\Git\etc
    并在文本编辑器中打开
    profile


    第37行有一个
    if
    语句
    #设置用户的主目录
    。我取出
    if
    语句并将其放入我想要的gitconfig所在的本地目录,然后将现有的gitconfig文件(在网络驱动器上)复制到该位置

    对我来说,更改起始位置(至少是git gui的起始位置)不会影响它查找.gitconfig的位置。我在工作中的设置为我们的家挂载U:,但我们没有直接用U:写的权限,只有在内部为我们创建的子目录,所以这对我来说是一个交易破坏者


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

    我使用了一种与其他配置文件略有不同的方法来解决这个问题。支持包括允许您指向另一位置的配置文件。然后导入该备用位置并就地展开,就像它是.gitconfig文件的一部分一样。现在我在.gitconfig中只有一个条目:

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

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

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

    c:\git>set HOME
    HOME=U:\
    HOMEDRIVE=U:
    HOMEPATH=\
    
    然后换车回家,开车经过

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

    作为一个对此感兴趣很长时间的人。请参阅手册:

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

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

    对我有用

  • 更改为文件夹
    %PROGRAMFILES%\Git\etc
  • 编辑文件
    profile
  • 添加到第一行
    HOME=“c:\location\u were\u you\u want\u gitconfig”
  • 完成

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

    对我来说,这非常简单:

  • 将“.gitconfig”从旧目录复制到%USERPROFILE%(标准为“c:\users\username”)
  • 右键单击GITGUI和GITBASH的开始图标,并将“磨合”:“%HOMEDRIVE%%HOMEPATH%”更改为“%USERPROFILE%”。当然,您可以使用任何其他目录而不是“%USERPROFILE%”

  • 解决方案,无需更改Windows HOME变量
    $ git config --global --list
    fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory
    
    HOME="/PortableHome"
    
    C:\Users\Amir\.gitconfig
    C:\Users\Amir\.git-credentials
    
    D:\PortableApps\Git-2.31.1PortableByAmir\PortableHome