"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:
A expansão de variável de ambiente, por exemplo $HOME, não é suportada. (Expansão do ~apareceu no Git 1.7.10.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.
Se o git não conseguir encontrar o arquivo de destino, ele ignorará o erro silenciosamente. Parece ser por design.
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).
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.
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 .
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.
(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.
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.
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.
~/.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.Respostas:
O Git (1.7.10+) agora suporta esta sintaxe em
.gitconfig
:Veja aqui uma descrição detalhada da mudança do git e seus casos extremos.
A propósito, algumas sutilezas que merecem destaque:
A expansão de variável de ambiente, por exemplo
$HOME
, não é suportada. (Expansão do~
apareceu no Git 1.7.10.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,~/.gitconfig
pode ter:e
subdir/gitconfig
pode ter:... o que fará com
subdir/nested_subdir/gitconfig
que seja carregado.Se o git não conseguir encontrar o arquivo de destino, ele ignorará o erro silenciosamente. Parece ser por design.
fonte
~
. Isto porque o seu .gitconfig-arquivo ainda tem que residir em~/.gitconfig
um caminho relativo na configuração implicaria~
...~
/$HOME
é na verdade a partir degit describe --contains 4c0a89fc
->v1.7.10.2~12^2
(v1.7.10.2
ou seja, mais tarde), notável como parece que o Debian 7 e o Ubuntu Quantal serão lançados comv1.7.10.4
.--global
,--local
ou--file
), a menos que seja explicitamente informado com--includes
(comogit config --global --includes --list
).Atualização 2012:
Veja a resposta de Mike Morearty :
Inclui
Eu penso que não.
Prefiro colocar essa configuração no
~/.gitconfig
arquivoDessa 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:
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.
Em
.gitattributes
(ou.git/info/a..
) uso:No seu arquivo repo .config:
(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
~/.gitconfig
arquivo 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 )
fonte
Você pode carregá-lo na linha de comando:
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/config
arquivo:fonte
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_USER
eGITHUB_TOKEN
variáveis de ambiente. O que substituirá as configurações no.gitconfig
arquivo local .Em seguida, para simplificar o usuário para o qual você apontou um alias
alias git=hub
na 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
.fonte