git ignorar vs. excluir vs. assumir inalterado
Eu li os documentos sobre isso várias vezes e ainda não entendi completamente as diferenças entre esses diferentes comandos. Talvez seja só eu, mas a documentação pode ser mais lúcida:
http://git-scm.com/docs/gitignore
https://help.github.com/articles/ignoring-files
Além disso, muitos comentários sobre esse assunto parecem usar as palavras "indexado", "comprometido", "rastreado" de maneira um tanto vaga, o que torna as diferenças entre esses três menos claras.
Meu entendimento atual (reconhecidamente limitado):
Arquivos correspondidos.gitignore
não será rastreado no futuro. (Embora eles possam ter sido rastreados anteriormente.) Isso significa que eles nunca aparecerão em um futurogit status
lista como alterada.No entanto, alterações futuras ainda serão sincronizadas com repositórios remotos. Em outras palavras, os arquivos ainda estão "indexados", mas não são "rastreados". Porque um.gitignore
Se o arquivo estiver no diretório do projeto, o próprio arquivo pode ser versionado.
Arquivos correspondidos.git/info/exclude
também não será "rastreado". Além disso, esses arquivos nunca serão sincronizados remotamente e, portanto, nunca serão vistos de nenhuma forma por outros usuários. Esses arquivos devem ser arquivos específicos para o editor ou fluxo de trabalho de um único usuário. Porque está no.git
diretório, oexclude
o arquivo não pode ser versionado.
Arquivos que tiveramassume-unchanged
correr com eles também não aparecem emgit status
ougit diff
. Isso parece semelhante aexclude
, pois esses arquivos não são "indexados" nem "rastreados". No entanto, a última versão do arquivo a ser confirmada antesassume-unchanged
permanecerá visível para todos os usuários no repositório.
A interpretação acima está correta? Por favor me corrija.
Se um arquivo já estiver em uma confirmação, qual é a diferença funcional entre correspondê-lo em.exclude
e correndoassume-unchanged
nele? Por que um prefere uma abordagem à outra?
Meu caso de uso básico é que quero evitar classificar as diferenças nos arquivos compilados, mas ainda quero que esses arquivos compilados sejam sincronizados com os arquivos de origem. Will agitignore
o arquivo ainda será enviado? Caso contrário, como gerenciar a implantação final dos arquivos compilados?
Agradecemos antecipadamente por qualquer ajuda.