Alterar localização .gitconfig no Windows


105

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?


Só queria acrescentar que também estou encontrando isso. Eu tenho todas as minhas outras coisas de configuração git globais ("exludesfiles" e "attrirutesfile") em% userprofile% /. Git / .gitignore (então em uma pasta), mas o .gitconfig eu adoraria que ficasse ao lado deles , mas tem que estar na raiz de% userprofile% .. realmente irritante.
WORMSS

6
Algum progresso desde que a pergunta foi feita? Meu .gitconfig fica em uma unidade de rede por padrão, o que significa que ele não pode lê-lo quando estou offline.
Lech Rzedzicki

Respostas:


67

Se você definir HOMEcomo 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 --globalsinalizador para todas as invocações do git (mais qualquer arquivo .git / config local será ignorado).


2
Hmm, não tenho certeza se entendi corretamente, mas mudar o HOME não afetará também todos os outros aplicativos que o usam? Não existe uma maneira de mudar o HOME, mas local para o Git?
Torre em

Sim, teria efeito em outros aplicativos também. Você perguntou como alterar o local e eu disse a você. Veja minha edição.
Martin v. Löwis

10
Alguém realmente fez isso funcionar sem os efeitos colaterais de mudar de CASA bagunçando um monte de outras coisas?
Ade Miller

Provavelmente é uma solução que funciona na plataforma Windows. Funcionou também para mim. Usei o script refreshenv do Chocolatey para atualizar a variável de ambiente HOME que eu defini (variável de ambiente do usuário). Depois disso, obtive o local do arquivo desejado.
Rasgou Aurstad de

Tive que reinstalar o Git para que isso funcionasse. Se eu apenas adicionei uma nova variável de ambiente chamada HOME e movesse o .gitconfigarquivo para esse diretório, não funcionou.
Csaba de

46

Alterar o diretório HOME para isso está errado. Melhor é criar um link simbólico para gitconfig para o diretório HOME.

  1. Mova seu .gitconfig do diretório inicial do usuário para o diretório desejado.
  2. Execute a linha de comando como Administrador
  3. Vá para o diretório inicial do usuário
  4. Digite mklink .gitconfig \ PathForNewLocationOfConfig.gitconfig

9
Pode valer a pena adicionar que se você executar git config --global para adicionar um item à sua configuração, seu link simbólico será sobrescrito com a cópia real do .gitconfig que está sendo usado. Encontrei esse problema ao testar um local onde \ PathForNewLocationOfConfig.gitconfig era minha pasta do Dropbox
MotoWilliams

8
Se o seu .gitconfig estiver localizado em uma unidade de rede, você poderá receber uma mensagem "O dispositivo não oferece suporte a links simbólicos", que exclui essa opção.
meio-

4
Não acho que essa solução funcione para ninguém. Na nossa empresa, $HOMEestá em uma unidade de rede e sempre que houver algum problema com a conexão de rede, também o link fica inacessível.
andreee

1
@MotoWilliams revisitando isso em 2017: o link simbólico permanece intacto após a edição com --global
Snake

2
Aqui, a polícia de grupo (AD) define HOMEDRIVE, HOMEPATH e HOMESHARE, mas não o simples, antigo e simples HOME. Na ausência de HOME, git parece usar alguma combinação dos três anteriores. Mas configurar HOME (por meio da metodologia usual para configurar variáveis ​​de ambiente específicas do usuário) funciona: GIT usa o valor de HOME que você configurou e grouppolicy não destrói HOME.
David I. McIntosh

29

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.


+1: sem configurações estranhas e meu gitconfig global é algo que eu armazeno em um repositório git, então manter o controle do que está lá é meu trabalho. Ao fazer alterações globais, apenas edito o arquivo global manualmente. Portanto, isso funciona perfeitamente para mim e não requer nenhuma estranheza como alterar sua variável de ambiente "HOME", que é uma ideia estranha apenas para colocar a configuração do Git onde você deseja. Afinal, o diretório inicial tem outros significados para muitos outros programas. Além disso, você pode colocar uma identidade diferente no topo e manter suas configurações-chave iguais entre as identidades com esta solução. Excelente!
user62177541

2
Eu me pergunto se é possível ter git config escrito no arquivo no arquivo [include] d.
Jonathan Nazario

1
@JonathanNazariogit config --file "included.file"
Pero P.


11

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\etce abrir profileem um editor de texto.

Há uma ifdeclaração na linha 37 # Set up USER's home directory. Peguei a ifdeclaraçã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.


Muito obrigado. Enquanto todas as outras opções falharam para mim, isso apenas me salvou um milhão de declarações git multiplicadas por 6 segundos: D aqui está o que eu fiz ... `HOME =" $ USERPROFILE \ Downloads \ Tools \ Git_Config "`
PravyNandas

2
A palavra 'home' (ou qualquer coisa parecida com sua linha: 37) não existe mais no git 2.24 (dezembro de 2019).
Frank Nocke

6

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.


1
Gostaria de obter mais informações sobre o que você fez para realizar essa correção.
Matt Casto

Você pode compartilhar sua solução?
Sal de

4

Primeiro verifique a configuração de HOME e, em seguida, altere HOME e HOMEDRIVE para um diretório existente.

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

então mude HOME e HOMEDRIVE por

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

3

Se você estiver no Windows e tiver problemas para alterar as variáveis ​​de ambiente ou mklinkpor 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\.


Uau, trabalhe totalmente com facilidade. Criado um novo atalho e em 'propriedades-> iniciar em' alterado %HOMEDRIVE%%HOMEPATH%para `c: \ my_repo_folder`. Funcionou um encanto.
Shane

2
Isso não funcionou para mim. O arquivo .gitconfig ainda foi carregado do meu diretório inicial
Dave B

3

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
}

2

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.


Esta é a solução mais simples, menos intrusiva e confiável do Windows.
kwill

2
  1. Mudar para pasta %PROGRAMFILES%\Git\etc
  2. Editar arquivo profile
  3. Adicionar à primeira linha HOME="c:\location_were_you_want_gitconfig"
  4. Feito

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.


Isso não está funcionando a partir do git 2.24, Win10, dezembro de 2019. git config --list --show-originmostra, o HOME original ainda está no lugar.
Frank Nocke

1

Para mim funcionou muito simples:

  1. Copie ".gitconfig" do diretório antigo: para% USERPROFILE% (padrão em "c: \ usuários \ nome de usuário")
  2. Clique com o botão direito nos ícones de início de GITGUI e GITBASH e altere "executar em": "% HOMEDRIVE %% HOMEPATH%" para "% USERPROFILE%". Claro que você pode usar qualquer outro diretório em vez de "% USERPROFILE%".

captura de tela antes

captura de tela depois


0

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:

  1. Baixe o Git portátil em https://git-scm.com/ . Execute o arquivo e instale-o no local necessário. Eu instalei em E: \ git .
  2. Execute git-bash.exe em E: \ git .
  3. Eu queria colocar .gitconfige outros arquivos bash em E , então criei uma pasta chamada home onde quero todos eles.
    mkdir home
  4. Vá para a pasta etc e abra o arquivo chamado profile (no meu caso, é E: \ git \ etc \ profile)
  5. Adicione o caminho absoluto para o diretório inicial que criamos (ou para o diretório onde você deseja que seu arquivo .gitconfig esteja localizado) no final do arquivo de perfil .
    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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.