По умолчанию в 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
эффект, вам нужно передать флаг --global
всем --global
git (плюс любые локальные файлы .git/config игнорируются).
Изменить каталог HOME для этого неверно. Лучше создать символическую ссылку для каталога gitconfig в HOME.
Я решил эту проблему, используя несколько иной подход, который я видел для других файлов конфигурации. Git Config поддерживает, что позволяет указывать на файл конфигурации в другом месте. Это альтернативное местоположение затем импортируется и расширяется на месте, как если бы оно было частью файла .gitconfig. Итак, теперь у меня есть только одна запись в файле .gitconfig:
[include]
path = c:\\path\\to\\my.config
Любые обновления, написанные Git в файле .gitconfig, не будут перезаписывать мой путь включения. Это означает, что иногда мне может понадобиться перемещать значения из .gitconfig в my.config.
Посмотрите раздел ФАЙЛЫ и ОКРУЖАЮЩАЯ СРЕДА git help config
. p >
Я не мастер Git, но из-за того, что мне было легче всего найти решение, я просто выбрал C:\Program Files (x86)\Git\etc
и открыл profile
в текстовом редакторе.
Там есть оператор if
в строке 37 # Set up USER home directory
. Я вынул оператор if
и поместил в локальный каталог, который я хотел, чтобы gitconfig был, затем я просто скопировал свой существующий файл gitconfig (находился на сетевом диске) в это место.
Для меня изменение местоположения Start In (git -gui по крайней мере) не повлияло на то, где он искал .gitconfig. Моя настройка на работе монтирует U: для нашего дома, но у нас нет разрешения на запись в U: напрямую, только подкаталоги, которые были созданы для нас внутри, поэтому для меня это было нарушением сделки.
Я решил проблему, сделав пакет script, который бы переопределил env-переменные HOMEDRIVE и HOMEPATH только для этого приложения. Затем изменил ярлык меню "Пуск", чтобы вместо этого указать пакет script.
Сначала установите параметр HOME, затем измените HOME и HOMEDRIVE на существующий каталог.
c:\git>set HOME
HOME=U:\
HOMEDRIVE=U:
HOMEPATH=\
затем измените HOME и HOMEDRIVE на
set HOME=c:\tmp
set HOMEDRIVE=C:
Если вы находитесь в Windows и имеете проблемы с изменением переменных среды или mklink
из-за недостаточных привилегий, простым решением вашей проблемы является запуск пакета git в другом месте.
Просто щелкните правой кнопкой мыши по git Bash.exe, щелкните свойства и измените свойство "Начать вход" на c:\my_configuration_files\
.
Я хотел сделать то же самое. Лучшее, что я смог найти, это решение @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
}
Как кто-то, кто был заинтересован в этом в ОЧЕНЬ ДЛИННОМ ВРЕМЕНИ. См. Руководство:
$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"
Примечание. Права доступа к файлам обычно ограничены, поэтому измените их соответствующим образом, иначе вы не сможете сохранить изменения.