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


105

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

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

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


Просто хотел добавить, что тоже сталкиваюсь с этим. У меня есть все остальные мои глобальные настройки git (exludesfiles и attrirutesfile) в% userprofile% /. Git / .gitignore (так что в папке), но .gitconfig мне бы хотелось, чтобы он сидел рядом с ними , но он должен находиться в корне% userprofile% ... это действительно раздражает.
— WORMSS

6
Есть ли прогресс после того, как был задан вопрос? Мой .gitconfig по умолчанию находится на сетевом диске, что означает, что он не может его прочитать, когда я не в сети.
— Lech Rzedzicki

Ответы:


67

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

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


2
Хм, не уверен, правильно ли я понял, но не повлияет ли изменение HOME на все другие приложения, которые его используют? Разве нет способа изменить HOME, кроме локального в Git?
— Ладья

Да, это повлияет и на другие приложения. Вы спросили, как изменить местоположение, и я вам сказал. Смотрите мою правку.
— Мартин против Лёвиса,

10
У кого-нибудь действительно есть это, чтобы работать без побочных эффектов перемещения ДОМАШНИЙ, испорченного целой кучей других вещей?
— Ade Miller

Скорее всего, это решение, которое работает на платформе Windows. Это сработало и для меня. Я использовал сценарий refreshenv Chocolatey, чтобы обновить установленную мной переменную окружения HOME (переменная окружения пользователя). После этого я получил желаемое расположение файла.
— Tore Aurstad

Мне пришлось переустановить Git, чтобы это работало. Если бы я просто добавил новую переменную среды с именем HOME и переместил .gitconfigфайл в этот каталог, это не сработало.
— Csa77

46

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

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

9
Возможно, стоит добавить, что если вы запустите git config --global, чтобы добавить элемент в свою конфигурацию, ваша символическая ссылка будет перезаписана фактической копией используемого .gitconfig. Я столкнулся с этой проблемой при тестировании места, где \ PathForNewLocationOfConfig.gitconfig была моей папкой Dropbox
— MotoWilliams

8
Если ваш .gitconfig расположен на сетевом диске, вы можете получить сообщение «Устройство не поддерживает символические ссылки», которое исключает эту опцию.
— полдень и

4
Не думаю, что это решение кому-то подойдет. В нашей компании $HOMEнаходится на сетевом диске, и всякий раз, когда возникает проблема с сетевым подключением, ссылка недоступна.
— andreee

1
@MotoWilliams пересматривает это в 2017 году: символическая ссылка остается нетронутой после редактирования с помощью --global
— Snake

2
Здесь групповая полиция (AD) устанавливает HOMEDRIVE, HOMEPATH и HOMESHARE, но не простой, старый, простой ДОМ. В отсутствие HOME git, похоже, использует некоторую комбинацию трех предыдущих. Но установка HOME (с помощью обычной методологии установки переменных среды для конкретного пользователя) работает: GIT использует значение HOME, которое вы установили, а grouppolicy не сбивает HOME.
— Дэвид И. МакИнтош

29

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

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

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


+1: никаких странных конфигураций, и мой глобальный gitconfig - это то, что я храню в самом репозитории git, поэтому следить за тем, что там есть, - моя работа. При внесении глобальных изменений я просто редактирую глобальный файл вручную. Так что это отлично работает для меня и не требует никаких странностей вроде изменения переменной окружения "HOME", что является странной идеей только для того, чтобы получить конфигурацию Git там, где вы хотите. В конце концов, домашний каталог имеет другое значение для многих других программ. Кроме того, с помощью этого решения вы можете поместить другой идентификатор вверху и сохранить одинаковые ключевые настройки для всех идентификаторов. Превосходно!
— user62177541

2
Интересно, можно ли вместо этого записать конфигурацию git в файл [include] d.
— Джонатан Назарио

1
@JonathanNazariogit config --file "included.file"
— Перо П.


11

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

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


Благодаря тонну. В то время как все другие варианты не помогли мне, это просто сэкономило мне миллион операторов git, умноженных на 6 секунд: D вот что я сделал ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
— PravyNandas

2
Слово 'home' (или что-то похожее на вашу строку: 37) больше не существует в git 2.24 (декабрь 2019 г.).
— Фрэнк

6

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

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


1
Я хотел бы получить дополнительную информацию о том, что вы сделали, чтобы исправить это.
— Мэтт Касто

Вы можете поделиться своим решением?
— Сал

4

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

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

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

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

3

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

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


Ничего себе, это работает с легкостью. Создал новый %HOMEDRIVE%%HOMEPATH%ярлык и в разделе «Свойства-> начать в» изменился на «c: \ my_repo_folder». Сработал шарм.
— Шейн

2
У меня это не сработало. Файл .gitconfig все еще был загружен из моего домашнего каталога
— Dave B

3

Я хотел сделать то же самое. Лучшее, что я смог найти, - это решение @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
}

2

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

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

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

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


Это самое простое, наименее навязчивое и надежное решение в Windows.
— kwill

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

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


Это не работает с git 2.24, Win10, декабрь 2019 г. git config --list --show-originпоказывает, что исходный HOME все еще на месте.
— Фрэнк

1

Для меня это сработало очень просто:

  1. Скопируйте ".gitconfig" из старого каталога: в% USERPROFILE% (по умолчанию в "c: \ users \ username")
  2. Щелкните правой кнопкой мыши значки запуска GITGUI и GITBASH и измените «запустить в»: «% HOMEDRIVE %% HOMEPATH%» на «% USERPROFILE%». Конечно, вы можете использовать любой другой каталог вместо "% USERPROFILE%".

снимок экрана до

снимок экрана после


0

Решение без изменения переменной Windows HOME
ОС: Windows 10
версия git: 2.27.0.windows.1

Я использую портативную версию Git, поэтому все мои файлы конфигурации находятся на моем фломастере (E :). Вот что сработало для меня:

  1. Загрузите переносимый Git с https://git-scm.com/ . Запустите файл и установите его в нужное место. Я установил его в E: \ git .
  2. Запустите git-bash.exe из E: \ git .
  3. Я хотел поместить .gitconfigи другие файлы bash в E , поэтому я создал папку с именем home, в которой я хочу их все.
    mkdir home
  4. Перейдите в папку etc и откройте файл с именем profile (в моем случае это E: \ git \ etc \ profile)
  5. Добавьте абсолютный путь к созданному нами домашнему каталогу (или к каталогу, в котором вы хотите разместить файл .gitconfig) в конце файла профиля .
    HOME="E:\git\home"

Теперь он больше не ищет .gitconfig в каталоге C: \ Users <username>, а ищет только указанный выше путь.

$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory

Это выдало ошибку, потому что там еще нет файла .gitconfig. Это просто, чтобы продемонстрировать, что мы успешно изменили расположение файла .gitconfig, не меняя каталог HOME в Windows.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.