По умолчанию в Windows Git помещает глобальный файл .gitconfig в c:\documents and settings\user\
Как я могу изменить эту позицию, чтобы сохранить .gitconfig c:\my_configuration_files\
?
Можно ли это вообще сделать?
По умолчанию в Windows Git помещает глобальный файл .gitconfig в c:\documents and settings\user\
Как я могу изменить эту позицию, чтобы сохранить .gitconfig c:\my_configuration_files\
?
Можно ли это вообще сделать?
Ответы:
Если вы установите HOME
значение c:\my_configuration_files\
, то git найдет там .gitconfig. Здесь описано редактирование переменных среды . Вам нужно установить переменную HOME, а затем повторно открыть любое окно cmd.exe. Используйте команду «set», чтобы убедиться, что HOME действительно указывает на правильное значение.
Изменение HOME, конечно же, повлияет и на другие приложения. Однако после чтения исходного кода git это кажется единственным способом изменить расположение этих файлов без необходимости настраивать командную строку. Вы также должны принять во внимание ответ Стефана: вы можете установить переменную GIT_CONFIG. Однако, чтобы добиться желаемого эффекта, вам необходимо передать --global
флаг всем вызовам git (плюс все локальные файлы .git / config игнорируются).
.gitconfig
файл в этот каталог, это не сработало.
Изменить HOME каталог, так как это неправильно. Лучше создать символическую ссылку для gitconfig на HOME каталог.
$HOME
находится на сетевом диске, и всякий раз, когда возникает проблема с сетевым подключением, ссылка недоступна.
Я решил эту проблему, используя несколько иной подход, который, как я видел, работает для других файлов конфигурации. Git Config поддерживает включает в себя , что позволяет указать в конфигурационный файл в другом месте. Затем это альтернативное местоположение импортируется и расширяется на месте, как если бы оно было частью файла .gitconfig. Итак, теперь у меня есть только одна запись в .gitconfig:
[include]
path = c:\\path\\to\\my.config
Любые обновления, записанные Git в файл .gitconfig, не будут перезаписывать мой путь включения. Это означает, что иногда мне может понадобиться перенести значения из .gitconfig в my.config.
git config --file "included.file"
Посмотрите в FILES и СРЕДЕ секции git help config
.
Я не мастер Git, но поиском решения, которое сработало для меня, было просто перейти в текстовый редактор C:\Program Files (x86)\Git\etc
и открыть profile
его.
В if
строке 37 есть заявление # Set up USER's home directory
. Я вынул if
инструкцию и поместил в локальный каталог, в котором должен был находиться gitconfig, затем я просто скопировал свой существующий файл gitconfig (находился на сетевом диске) в это место.
Для меня изменение начального местоположения (по крайней мере, git-gui) не повлияло на то, где он искал .gitconfig. Моя установка на работе монтирует U: для нашего дома, но у нас нет разрешения писать в U: напрямую, только подкаталоги, которые были созданы для нас внутри, так что это было для меня нарушением сделки.
Я решил проблему, создав пакетный сценарий, который переопределил бы переменные окружения HOMEDRIVE и HOMEPATH только для этого приложения. Затем изменил ярлык в меню «Пуск», чтобы вместо этого указывать на этот пакетный сценарий.
Если вы работаете в Windows и у вас возникли проблемы с изменением переменных среды или mklink
из-за недостаточных прав, простое решение вашей проблемы - запустить git batch в другом месте.
Просто щелкните правой кнопкой мыши Git Bash.exe, выберите «Свойства» и измените свойство «Начать в» на c:\my_configuration_files\
.
%HOMEDRIVE%%HOMEPATH%
ярлык и в разделе «Свойства-> начать в» изменился на «c: \ my_repo_folder». Сработал шарм.
Я хотел сделать то же самое. Лучшее, что я смог найти, - это решение @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
}
Как человек, который интересовался этим ОЧЕНЬ ДОЛГО ВРЕМЯ. См. Из руководства:
$ XDG_CONFIG_HOME / git / config - Второй файл конфигурации для конкретного пользователя. Если $XDG_CONFIG_HOME
не задан или пуст, будет использоваться $ HOME / .config / git / config. Любая однозначная переменная, установленная в этом файле, будет перезаписана тем, что находится в ~ / .gitconfig. Не создавайте этот файл, если вы иногда используете более старые версии Git, поскольку поддержка этого файла была добавлена сравнительно недавно.
Который был добавлен совсем недавно. Это дамп из 2.15.0.
Работает для меня.
%PROGRAMFILES%\Git\etc
profile
HOME="c:\location_were_you_want_gitconfig"
Примечание . Права доступа к файлам обычно ограничены, поэтому измените их соответствующим образом, иначе вы не сможете сохранить свои изменения.
git config --list --show-origin
показывает, что исходный HOME все еще на месте.
Для меня это сработало очень просто:
Решение без изменения переменной Windows HOME
ОС: Windows 10
версия git: 2.27.0.windows.1
Я использую портативную версию Git, поэтому все мои файлы конфигурации находятся на моем фломастере (E :). Вот что сработало для меня:
.gitconfig
и другие файлы bash в E , поэтому я создал папку с именем home, в которой я хочу их все.mkdir home
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.