Изменение местоположения .gitconfig в Windows

По умолчанию в Windows Git помещается глобальный .gitconfig в c:\documents and settings\user\

Как я могу изменить эту позицию, поэтому .gitconfig хранится в c:\my_configuration_files\?

Можно ли это сделать вообще?

Ответ 1

Если вы установите HOME в c:\my_configuration_files\, то git найдет там .gitconfig. Редактирование переменных среды описано здесь. Вам нужно установить переменную HOME, а затем снова открыть любое окно cmd.exe. Используйте команду "set", чтобы убедиться, что HOME действительно указывает на правильное значение.

Изменение HOME, конечно же, повлияет и на другие приложения. Однако после чтения исходного кода git это единственный способ изменить расположение этих файлов без необходимости настройки командной строки. Вы должны также рассмотреть ответ Стефана: вы можете установить переменную GIT_CONFIG. Однако, чтобы получить --global эффект, вам нужно передать флаг --global всем --global git (плюс любые локальные файлы .git/config игнорируются).

Ответ 2

Изменить каталог HOME для этого неверно. Лучше создать символическую ссылку для каталога gitconfig в HOME.

  • Переместите ваш .gitconfig из домашнего каталога пользователя в каталог, в котором вы хотите.
  • Запустить командную строку в качестве администратора
  • Перейдите в домашний каталог пользователя
  • Введите mklink.gitconfig\PathForNewLocationOfConfig.gitconfig

Ответ 3

Я решил эту проблему, используя несколько иной подход, который я видел для других файлов конфигурации. Git Config поддерживает, что позволяет указывать на файл конфигурации в другом месте. Это альтернативное местоположение затем импортируется и расширяется на месте, как если бы оно было частью файла .gitconfig. Итак, теперь у меня есть только одна запись в файле .gitconfig:

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

Любые обновления, написанные Git в файле .gitconfig, не будут перезаписывать мой путь включения. Это означает, что иногда мне может понадобиться перемещать значения из .gitconfig в my.config.

Ответ 4

Посмотрите раздел ФАЙЛЫ и ОКРУЖАЮЩАЯ СРЕДА git help config. p >

Ответ 5

Я не мастер Git, но из-за того, что мне было легче всего найти решение, я просто выбрал C:\Program Files (x86)\Git\etc и открыл profile в текстовом редакторе.

Там есть оператор if в строке 37 # Set up USER home directory. Я вынул оператор if и поместил в локальный каталог, который я хотел, чтобы gitconfig был, затем я просто скопировал свой существующий файл gitconfig (находился на сетевом диске) в это место.

Ответ 6

Для меня изменение местоположения Start In (git -gui по крайней мере) не повлияло на то, где он искал .gitconfig. Моя настройка на работе монтирует U: для нашего дома, но у нас нет разрешения на запись в U: напрямую, только подкаталоги, которые были созданы для нас внутри, поэтому для меня это было нарушением сделки.

Я решил проблему, сделав пакет script, который бы переопределил env-переменные HOMEDRIVE и HOMEPATH только для этого приложения. Затем изменил ярлык меню "Пуск", чтобы вместо этого указать пакет script.

Ответ 7

Сначала установите параметр HOME, затем измените HOME и HOMEDRIVE на существующий каталог.

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

затем измените HOME и HOMEDRIVE на

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

Ответ 8

Если вы находитесь в Windows и имеете проблемы с изменением переменных среды или mklink из-за недостаточных привилегий, простым решением вашей проблемы является запуск пакета git в другом месте.

Просто щелкните правой кнопкой мыши по git Bash.exe, щелкните свойства и измените свойство "Начать вход" на c:\my_configuration_files\.

Ответ 9

Я хотел сделать то же самое. Лучшее, что я смог найти, это решение @MicTech. Однако, как указывает @MotoWilliams, это не выдерживает никаких обновлений, сделанных Git, в файле .gitconfig, который заменяет ссылку новым файлом, содержащим только новые настройки.

Я решил это, написав следующий PowerShell script и запустив его в моем запуске профиля script. Каждый раз, когда он запускается, он копирует все параметры, которые были добавлены пользователю .gitconfig к глобальному, а затем заменяет весь текст в файле .gitconfig и заголовком [include], который импортирует глобальный файл.

Я сохраняю глобальный файл .gitconfig в репо вместе с множеством других глобальных скриптов и инструментов. Все, что мне нужно сделать, это не забудьте проверить любые изменения, которые script присоединяется к моему глобальному файлу.

Кажется, это работает довольно прозрачно для меня. Надеюсь, это поможет!

9 сентября: Обновлено для обнаружения, когда новые записи, добавленные в конфигурационный файл, дублируются и игнорируют их. Это полезно для таких инструментов, как 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
}

Ответ 10

Как кто-то, кто был заинтересован в этом в ОЧЕНЬ ДЛИННОМ ВРЕМЕНИ. См. Руководство:

$XDG_CONFIG_HOME/ git/config - Второй пользовательский файл конфигурации. Если $XDG_CONFIG_HOME не установлен или не установлен, будет использоваться $HOME/.config/git/config. Любая однозначная переменная, заданная в этом файле, будет перезаписана всем, что находится в ~/.gitconfig. Не рекомендуется создавать этот файл, если вы иногда используете более старые версии Git, так как поддержка этого файла была добавлена ​​довольно недавно.

Это было недавно добавлено. Этот дамп от 2.15.0.

Работает для меня.

Ответ 11

  1. Перейдите в папку %PROGRAMFILES%\Git\etc
  2. Изменить profile файла
  3. Добавить в первую строку HOME="c:\location_were_you_want_gitconfig"
  4. Готово

Примечание. Права доступа к файлам обычно ограничены, поэтому измените их соответствующим образом, иначе вы не сможете сохранить изменения.