Por padrão no Windows Git coloca .gitconfig global em c:\documents and settings\user\
Como posso alterar essa posição para que .gitconfig seja armazenado c:\my_configuration_files\
?
Isso pode ser feito?
Por padrão no Windows Git coloca .gitconfig global em c:\documents and settings\user\
Como posso alterar essa posição para que .gitconfig seja armazenado c:\my_configuration_files\
?
Isso pode ser feito?
Respostas:
Se você definir HOME
como c:\my_configuration_files\
, o git localizará .gitconfig lá. A edição de variáveis de ambiente é descrita aqui . Você precisa definir a variável HOME e, em seguida, reabrir qualquer janela cmd.exe. Use o comando "set" para verificar se HOME realmente aponta para o valor correto.
Mudar o HOME, é claro, também afetará outros aplicativos. No entanto, ao ler o código-fonte do git, essa parece ser a única maneira de alterar a localização desses arquivos sem a necessidade de ajustar a linha de comando. Você também deve considerar a resposta de Stefan: você pode definir a variável GIT_CONFIG. No entanto, para dar a ele o efeito que você deseja, você precisa passar o --global
sinalizador para todas as invocações do git (mais qualquer arquivo .git / config local será ignorado).
.gitconfig
arquivo para esse diretório, não funcionou.
Alterar o diretório HOME para isso está errado. Melhor é criar um link simbólico para gitconfig para o diretório HOME.
$HOME
está em uma unidade de rede e sempre que houver algum problema com a conexão de rede, também o link fica inacessível.
Resolvi esse problema usando uma abordagem ligeiramente diferente que vi funcionar para outros arquivos de configuração. Suporta Git Config inclui que permite apontar para um arquivo de configuração em outro local. Esse local alternativo é então importado e expandido no local como se fosse parte do arquivo .gitconfig. Portanto, agora tenho apenas uma única entrada em .gitconfig:
[include]
path = c:\\path\\to\\my.config
Todas as atualizações gravadas pelo Git no arquivo .gitconfig não sobrescreverão meu caminho de inclusão. Isso significa que, ocasionalmente, posso precisar mover valores de .gitconfig para my.config.
git config --file "included.file"
Procure na seção ARQUIVOS e AMBIENTE de git help config
.
Não sou nenhum mestre em Git, mas para pesquisar a solução que funcionou mais fácil para mim foi apenas ir C:\Program Files (x86)\Git\etc
e abrir profile
em um editor de texto.
Há uma if
declaração na linha 37 # Set up USER's home directory
. Peguei a if
declaração e coloquei no diretório local que eu queria que o gitconfig fosse, então apenas copiei meu arquivo gitconfig existente (estava em uma unidade de rede) para esse local.
Para mim, alterar o local Iniciar em (de git-gui, pelo menos) não afetou onde procurava .gitconfig. Minha configuração no trabalho monta U: para nossa casa, mas não temos permissão para escrever em U: diretamente, apenas subdiretórios que foram criados para nós internamente, então isso foi um problema para mim.
Resolvi o problema criando um script em lote que substituiria as variáveis env HOMEDRIVE e HOMEPATH apenas para aquele aplicativo. Em seguida, alterei o atalho do menu Iniciar para apontar para aquele script em lote.
Se você estiver no Windows e tiver problemas para alterar as variáveis de ambiente ou mklink
por causa de privilégios insuficientes, uma solução fácil para o seu problema é iniciar o git batch em outro local.
Basta clicar com o botão direito em Git Bash.exe, clicar em propriedades e alterar a propriedade "Iniciar em" para c:\my_configuration_files\
.
%HOMEDRIVE%%HOMEPATH%
para `c: \ my_repo_folder`. Funcionou um encanto.
Eu queria fazer a mesma coisa. O melhor que consegui encontrar foi a solução da @MicTech. No entanto, como apontado por @MotoWilliams, isso não sobrevive a nenhuma atualização feita pelo Git no arquivo .gitconfig que substitui o link por um novo arquivo contendo apenas as novas configurações.
Resolvi isso escrevendo o seguinte script do PowerShell e executando-o em meu script de inicialização de perfil. Cada vez que é executado, ele copia todas as configurações que foram adicionadas ao .gitconfig do usuário para o global e, em seguida, substitui todo o texto no arquivo .gitconfig pelo cabeçalho [include] que importa o arquivo global.
Eu mantenho o arquivo .gitconfig global em um repositório junto com vários outros scripts e ferramentas globais. Tudo o que tenho a fazer é lembrar de verificar todas as alterações que o script anexa ao meu arquivo global.
Isso parece funcionar de forma bastante transparente para mim. Espero que ajude!
9 de setembro: Atualizado para detectar quando novas entradas adicionadas ao arquivo de configuração são duplicadas e ignorá-las. Isso é útil para ferramentas como SourceTree, que escreverá novas atualizações se não conseguirem encontrar as existentes e não seguirem as inclusões.
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
}
Como alguém que está interessado nisso há MUITO MUITO TEMPO. Veja no manual:
$ XDG_CONFIG_HOME / git / config - Segundo arquivo de configuração específico do usuário. E se$XDG_CONFIG_HOME
não estiver definido ou vazio, $ HOME / .config / git / config será usado. Qualquer variável de valor único definida neste arquivo será sobrescrita pelo que estiver em ~ / .gitconfig. É uma boa idéia não criar este arquivo se você às vezes usa versões mais antigas do Git, pois o suporte para este arquivo foi adicionado recentemente.
Que só foi adicionado recentemente. Este dump é de 2.15.0.
Funciona para mim.
%PROGRAMFILES%\Git\etc
profile
HOME="c:\location_were_you_want_gitconfig"
Nota: As permissões de arquivo geralmente são restritas, então altere-as de acordo ou você não poderá salvar suas alterações.
git config --list --show-origin
mostra, o HOME original ainda está no lugar.
Para mim funcionou muito simples:
Solução sem ter que alterar o
SO da variável Windows HOME : Windows 10
git versão: 2.27.0.windows.1
Eu uso a versão portátil do Git, então todos os meus arquivos de configuração estão no meu pen-drive (E :). Isto é o que funcionou para mim:
.gitconfig
e outros arquivos bash em E , então criei uma pasta chamada home onde quero todos eles.mkdir home
HOME="E:\git\home"
Agora, ele não procura mais no diretório C: \ Users <nome de usuário> .gitconfig, mas apenas procura no caminho definido acima.
$ git config --global --list
fatal: unable to read config file 'E:/git/home/.gitconfig': No such file or directory
Ele deu um erro porque não há um arquivo .gitconfig ainda. Isso é apenas para demonstrar que alteramos com êxito a localização do arquivo .gitconfig sem alterar o diretório HOME no Windows.