Изменение расположения .gitconfig в Windows - PullRequest
94 голосов
/ 29 октября 2010

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

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

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

Ответы [ 11 ]

58 голосов
/ 29 октября 2010

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

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

42 голосов
/ 30 мая 2011

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

  1. Переместите .gitconfig из домашнего каталога пользователя в каталог, куда вы хотите.
  2. Запустить командную строку от имени администратора
  3. Перейдите в домашний каталог пользователя
  4. Введите mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig
22 голосов
/ 10 июня 2016

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

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

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

12 голосов
/ 29 октября 2010

Посмотрите в ФАЙЛАХ и ОКРУЖАЮЩАЯ СРЕДА секции git help config.

9 голосов
/ 26 августа 2015

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

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

5 голосов
/ 07 января 2016

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

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

4 голосов
/ 22 августа 2017

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

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

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

set HOME=c:\tmp
set HOMEDRIVE=C:
3 голосов
/ 27 августа 2013

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

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

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

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

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
}
3 голосов
/ 10 августа 2013

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

Просто щелкните правой кнопкой мыши Git Bash.exe, выберите «Свойства» и измените свойство «Начать с» на c:\my_configuration_files\.

2 голосов
/ 18 ноября 2017

Как кто-то, кто был заинтересован в этом в течение очень долгого времени. См. Из руководства:

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

Который был добавлен только недавно. Это дамп с 2.15.0.

У меня работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...