É possível incluir um arquivo no seu .gitconfig

245

Gostaria de incluir um arquivo no meu .gitconfig que possua minhas configurações do github - isso é possível?

Posso fazer algo assim:

[core]
    include = /path/to/file
David Reynolds
fonte
3
"Não quero incluir os detalhes do github, por isso gostaria de incluí-los de um arquivo externo": é exatamente para isso que serve o arquivo de configuração global. Existe algum motivo para não usá-lo no seu caso?
VonC 13/10/09
11
Sim, porque quero publicar o .gitconfig em um repositório git e não quero que alguém roube minhas credenciais do github.
10119 David Reynolds
Eu não te sigo: seu arquivo gitconfig normal será publicado no github, mas sem nenhuma configuração do github. Por quê? Porque eles estariam no seu arquivo de configuração global ( ~/.gitconfig), ou seja, não foram enviados ao seu repositório do github. Ao digitar ' git config', o que você vê é a concatenação do 3 arquivo de configuração (repositório, global e sistema). Somente o arquivo de configuração do repositório é enviado por push. Os outros 2 permanecem locais.
VonC 13/10/09
90
parece que todo mundo perdeu o objetivo desta pergunta. David obviamente deseja enviar um repositório de todos os seus arquivos de ponto (bashrc, gemrc, etc.) INCLUINDO seu .gitconfig para que ele possa ter todas as suas configurações em todas as suas máquinas. Uma maneira para empurrar partes de um arquivo .gitconfig ao incluir e ignorar entradas particulares é o que ele (e eu, para que o assunto) é depois
Bo Jeanes
5
@bjeanes: precisamente! Ainda não encontrei uma maneira de fazer isso.
David Reynolds

Respostas:

302

O Git (1.7.10+) agora suporta esta sintaxe em .gitconfig:

[include]
    path = /path/to/file

Veja aqui uma descrição detalhada da mudança do git e seus casos extremos.

A propósito, algumas sutilezas que merecem destaque:

  1. A expansão de variável de ambiente, por exemplo $HOME, não é suportada. (Expansão do ~apareceu no Git 1.7.10.2.)

  2. Se um caminho relativo for especificado, será relativo ao arquivo .gitconfig que possui a [include]instrução Isso funciona corretamente mesmo em inclusões encadeadas - por exemplo, ~/.gitconfigpode ter:

    [include]
        path = subdir/gitconfig
    

    e subdir/gitconfigpode ter:

    [include]
        path = nested_subdir/gitconfig
    

    ... o que fará com subdir/nested_subdir/gitconfigque seja carregado.

  3. Se o git não conseguir encontrar o arquivo de destino, ele ignorará o erro silenciosamente. Parece ser por design.

Mike Morearty
fonte
7
na verdade você não precisa ~. Isto porque o seu .gitconfig-arquivo ainda tem que residir em ~/.gitconfigum caminho relativo na configuração implicaria ~...
robustus
2
A expansão ~/ $HOMEé na verdade a partir de git describe --contains 4c0a89fc-> v1.7.10.2~12^2( v1.7.10.2ou seja, mais tarde), notável como parece que o Debian 7 e o Ubuntu Quantal serão lançados com v1.7.10.4.
FauxFaux
1
Isso suporta globs? por exemplo, path = ~ / gitconfig.d / *?
Bret
1
@ Bret não, isso não suporta globs.
Mike Morearty
8
Observe que as configurações incluídas dessa maneira não serão mostradas quando um arquivo específico for fornecido (ou seja, com --global, --localou --file), a menos que seja explicitamente informado com --includes(como git config --global --includes --list).
Franklin Yu
16

Atualização 2012:

Veja a resposta de Mike Morearty :

Inclui

Você pode incluir um arquivo de configuração de outro, definindo a include.pathvariável especial como o nome do arquivo a ser incluído.
O arquivo incluído é expandido imediatamente, como se seu conteúdo tivesse sido encontrado no local da diretiva de inclusão.
Se o valor da include.pathvariável for um caminho relativo, o caminho será considerado relativo ao arquivo de configuração no qual a diretiva de inclusão foi encontrada.
O valor de include.pathestá sujeito à expansão do til: ~/é expandido para o valor de $HOMEe ~user/para o diretório inicial do usuário especificado.


Eu penso que não.

Prefiro colocar essa configuração no ~/.gitconfigarquivo

Arquivo de configuração específico do usuário. Também chamado de arquivo de configuração "global".

Dessa forma, ele conclui o arquivo específico do projeto .gitconfig, sem ser publicado quando enviado ao GitHub. Consulte também esta resposta do SO para obter mais informações sobre o arquivo de configuração global.
O Git possui 3 arquivos de configuração .


bjeanes acrescenta nos comentários:

parece que todo mundo perdeu o objetivo desta pergunta.
David obviamente quer empurrar-se um repositório de todos os seus arquivos de pontos ( bashrc, gemrc, etc.) incluindo o seu .gitconfigentão ele pode ter todos os seus definições em todas as suas máquinas.
Uma maneira de enviar partes de um .gitconfigarquivo incluindo e ignorando entradas particulares é o que ele (e eu, nesse caso) é o que ele procura.

Uma maneira possível seria usar um driver de filtro smudge / clean para descriptografar / criptografar um arquivo com informações confidenciais confidenciais (consulte este tópico ), para concluir um arquivo local como ~ / .gitconfig com as partes descriptografadas relevantes para o arquivo Arquivo.

Dessa forma, você pode ter um repositório Git com todos os seus arquivos de ponto, além de um arquivo com informações criptografadas que devem ser descriptografadas e adicionadas aos referidos arquivos de ponto.

texto alternativo

Em .gitattributes(ou .git/info/a..) uso:

myPrivateInfosFile filter=gpg diff=gpg

No seu arquivo repo .config:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

(uma solução baseada em GPG significa, é claro, que você comunicou suas chaves públicas / privadas por outra via no computador de destino onde deseja restaurar todos os seus arquivos de ponto clonando este repositório especial)

Na verdade, no seu caso, o script smudge precisa ser concluído, pois deve, após descriptografar esse arquivo, continuar e adicionar partes relevantes ao seu ~/.gitconfigarquivo global (a menos que você substitua o arquivo de configuração global por outro local ) ou outros arquivos de ponto para esse arquivo. importam.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (os inconvenientes do gpg são discutidos mais adiante neste tópico ) (isso é diferente de ter um repositório completo do Git criptografado, conforme discutido aqui )

VonC
fonte
5
Quero publicar meu arquivo .gitconfig básico em um repositório git, mas não quero incluir os detalhes do github, por isso, de alguma forma, gostaria de incluí-los de um arquivo externo.
10139 David Reynolds
10

Você pode carregá-lo na linha de comando:

$ git config --local include.path "/path/to/.gitconfig"

Use "$PWD"/.gitconfig, em vez disso, se você deseja carregar o arquivo do diretório atual.

Após executar o comando acima, as seguintes linhas são adicionadas ao seu .git/configarquivo:

[include]
        path = /path/to/.gitconfig
kenorb
fonte
2

Eu acredito que você pode fazer isso usando a ferramenta hub da defunkt . Este é um wrapper para o comando git que entre outras coisas, permite que você tenha GITHUB_USERe GITHUB_TOKENvariáveis de ambiente. O que substituirá as configurações no .gitconfigarquivo local .

Em seguida, para simplificar o usuário para o qual você apontou um alias alias git=hubna configuração do ZSH . Você poderá então originar um arquivo local no qual define suas variáveis ​​de ambiente e envia seu repositório para o mundo público com todas as suas informações privadas em contato.

** NOTA para usuários de cervejas caseiras no OSX, você pode instalar a ferramenta via brew install hub.

Geoff Lanotte
fonte