Como eu.Gitignore e excluo um arquivo já comprometido sem afetar outras cópias de trabalho?

StackOverflow https://stackoverflow.com/questions/3833757

Pergunta

Eu tenho um repositório nu e duas cópias de trabalho - uma na minha máquina, a outra no servidor.
Aconteceu que eu tenho que .gitignore um determinado arquivo que deve ser específico para cada máquina. Vamos chamá -lo 'settings.py'. Este arquivo já está comprometido.

Eu coloquei 'settings.py'Em .gitignore para ignorá -lo. Quando agora eu alterei o arquivo no status do meu git da minha máquina, ainda me diz

modified:  settings.py

Eu descobri que tenho que remover o Settings.py assim:

git rm --cached settings.py

Então git add ., Seguido por git commit.

Mas quando agora eu empurro isso para o repositório nu e puxo -o para a cópia de trabalho no servidor, settings.py é excluído lá - o que é ruim porque eu tenho que manter este específico settings.py.

Imaginei que simplesmente poderia fazer uma cópia de settings.py E coloque -o de volta quando for excluído, mas sinto que deve haver uma maneira melhor de fazer isso.

Foi útil?

Solução

Você pode dizer ao Git para ignorar completamente as alterações nos arquivos rastreados sem precisar removê -los. Use este comando:

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

Então, se você quiser rastrear o arquivo mais tarde:

git update-index --no-assume-unchanged [FILENAME]

Outras dicas

Você poderia manter as configurações.

  • versão a setting_remote Arquivo para o lado remoto
  • versão a setting_local Arquivo para o lado local (ou seja, com configurações específicas locais)
  • Adicione a Driver de filtro capaz de reconstruir o direito settings.py Arquivo na finalização da compra.

alt text

Dessa maneira, settings.py é mantido "privado" (não versionado). Mas os valores específicos para cada ambiente são versionados, cada um definido em seu próprio arquivo, sem nenhum problema de fusão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top