Como faço para configurar o git para ignorar alguns arquivos localmente?

Posso ignorar arquivos localmente sem poluir a configuração global do git para todos os outros? Eu tenho arquivos não rastreados que são spam no meu status git, mas eu não quero confirmar as alterações de configuração do git para cada arquivo random que eu tenho em minhas ramificações locais.

Da documentação relevante do Git :

Os padrões que são específicos de um repository específico, mas que não precisam ser compartilhados com outros repositorys relacionados (por exemplo, arquivos auxiliares que residem no repository, mas são específicos do stream de trabalho de um usuário) devem entrar no $GIT_DIR/info/exclude .

O arquivo .gitignore .git/info/exclude tem o mesmo formato que qualquer arquivo .gitignore . Outra opção é definir core.excludesFile para o nome de um arquivo contendo padrões globais.

Observe que, se você já tiver alterações não organizadas, deverá executar o seguinte após editar seus padrões de ignorados:

 git update-index --assume-unchanged [...] 

Nota sobre $GIT_DIR : Esta é uma notação usada em todo o manual do git simplesmente para indicar o caminho para o repository git. Se a variável de ambiente estiver configurada, ela replaceá o local do repo em que você estiver, o que provavelmente não é o que você deseja.

Atualização : Considere o uso do git update-index --skip-worktree [...] vez disso, obrigado @danShumway! Veja a explicação de Borealid sobre a diferença das duas opções .


Resposta antiga:

Se você precisar ignorar as alterações locais nos arquivos rastreados (nós temos isso com modificações locais nos arquivos de configuração), use git update-index --assume-unchanged [...] .

Adicione as seguintes linhas à seção [alias] do seu arquivo .gitconfig

 ignore = update-index --assume-unchanged unignore = update-index --no-assume-unchanged ignored = !git ls-files -v | grep "^[[:lower:]]" 

Agora você pode usar o git ignore my_file para ignorar mudanças no arquivo local, e git unignore my_file para parar de ignorar as mudanças. git ignored lista os arquivos ignorados.

Esta resposta foi obtida em http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html .

Você tem várias opções:

  • Deixe um arquivo .gitignore sujo (ou não .gitignore ) em seu diretório de trabalho (ou aplique-o automaticamente usando o topgit ou alguma outra ferramenta de correção).
  • Coloque as $GIT_DIR/info/exclude em seu $GIT_DIR/info/exclude , se isso for específico para uma tree.
  • Execute git config --global core.excludesfile ~/.gitignore e adicione padrões ao seu ~/.gitignore . Esta opção se aplica se você quiser ignorar certos padrões em todas as trees. Eu uso isso para arquivos .pyo e .pyo , por exemplo.

Além disso, verifique se você está usando padrões e não enumerando explicitamente arquivos, quando aplicável.

Eu acho que você está procurando:

 git update-index --skip-worktree FILENAME 

que ignora as alterações feitas local

Aqui está http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ mais explicações sobre essas soluções!

Você pode instalar alguns aliases git para tornar este processo mais simples. Isso edita o nó [alias] do seu arquivo .gitconfig .

 git config --global alias.ignore 'update-index --skip-worktree' git config --global alias.unignore 'update-index --no-skip-worktree' git config --global alias.ignored '!git ls-files -v | grep "^S"' 

Os atalhos que isso instala para você são os seguintes:

  • git ignore config.xml
    • O git irá fingir que não vê quaisquer alterações no config.xml – impedindo-o de cometer essas alterações acidentalmente.
  • git unignore config.xml
    • O git retomará o reconhecimento de suas alterações no config.xml – permitindo que você confirme novamente essas alterações.
  • git ignored
    • git irá listar todos os arquivos que você está “ignorando” da maneira descrita acima.

Eu construí esses referindo-se à resposta de phatmann – que apresenta uma --assume-unchanged do mesmo.

A versão que eu apresento usa --skip-worktree para ignorar mudanças locais. Veja a resposta da Borealid para uma explicação completa da diferença, mas essencialmente o objective do --skip-worktree é que os desenvolvedores alterem arquivos sem o risco de cometer suas alterações .

O comando git ignored apresentado aqui usa git ls-files -v e filtra a lista para mostrar apenas as inputs que começam com a tag S A tag S indica um arquivo cujo status é “ignorar worktree”. Para obter uma lista completa dos status dos arquivos mostrados por git ls-files : consulte a documentação da opção -t em git ls-files .

Você pode simplesmente adicionar um arquivo .gitignore ao seu diretório pessoal, ou seja, $HOME/.gitignore ou ~/.gitignore . Então diga ao git para usar esse arquivo com o comando:

 git config --global core.excludesfile ~/.gitignore 

Este é um arquivo normal .gitignore que git faz referência ao decidir o que ignorar. Como está no seu diretório pessoal, ele se aplica somente a você e não polui nenhum arquivo .gitignore do projeto.

Eu tenho usado essa abordagem há anos com ótimos resultados.

Não esqueça de reconhecer um fato com @joss ​​lee answer.

  git update-index --assume-unchanged directory/ 

Observe a barra (/) no final.

Se o seu repo ainda não tiver um arquivo .gitignore, uma solução simples é criar um arquivo .gitignore e nele include .gitignore na lista de arquivos a serem ignorados.