Git: ignorar arquivos rastreados

181

Eu tenho alguns arquivos rastreados em um repositório que são modificados automaticamente ao criar o código. Não quero rastreá-los, apenas não quero que eles apareçam como modificados e não quero que eles sejam encenados quando eu adicionar.

Isso é possível?

Haymansfield
fonte
7
possível duplicação do git: posso confirmar um arquivo e ignorar as alterações de conteúdo?
Ciro Santilli escreveu:
5
Se esses arquivos são gerados automaticamente pela compilação, eles não devem ser rastreados no git.
Codebling
Aqui está um tutorial rápido sobre o gitignore que você pode achar útil: learningpassion.wordpress.com/2016/06/17/…
joker

Respostas:

282

Certo.

git update-index --assume-unchanged [<file> ...]

Para desfazer e começar a rastrear novamente:

git update-index --no-assume-unchanged [<file> ...]
Nick Veys
fonte
3
O que acontece com os arquivos nesse estado quando se eu fizer modificações neles?
haymansfield
2
@haymansfield a página de ajuda para o comando diz o seguinteGit will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Parham
3
Alguma maneira de aplicar --assume-unchangedna clonagem? Para que todos os usuários tenham os arquivos, mas não vejam alterações locais nos diffs.
Gauthier
10
@ Tyler - não, uma vez que um arquivo é rastreado pelo git, ele sempre será rastreado, mesmo que esse arquivo apareça em um .gitignore. Meu caso de uso é algo como "aqui está um modelo básico de um arquivo no qual você armazena suas credenciais, agora nunca o confirma".
Jon V
5
@watbywbarif Eu tenho o comando git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))definido como um alias a git. Sempre que suspeito que são algumas dessas travessuras, faço isso.
Philippe Carphin
6

Outra abordagem (de uma resposta agora excluída de Seth Robertson, mas achei útil para ressuscitá-lo) é manter um arquivo de modelo "rastreado" e ter uma versão local não rastreada, por exemplo: "config.sample.ini" ou " config.ini.template ", consulte https://gist.github.com/canton7/1423106 para obter um exemplo completo.

Então não haverá preocupações se o arquivo for alterado no git, etc. e você poderá usar .gitignore (finalmente) nos arquivos locais não rastreados.

rogerdpack
fonte
5

Outra solução usando atributos git e% f no comando filter:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude
koct9i
fonte
16
Você poderia dar mais detalhes sobre o que isso significa e o que está fazendo por acaso?
Rogerdpack
isto acrescenta filtro para arquivo que lê o conteúdo do arquivo ".orig", que tem o texto original
koct9i