Conforme mencionado na publicação no blog de Mark Longair, Git Submodules Explained ,
As versões 1.7.0 e posteriores do git contêm uma alteração irritante no comportamento do submódulo git.
Os submódulos agora são considerados sujos se tiverem arquivos modificados ou não rastreados , enquanto anteriormente só seria o caso se HEAD no submódulo apontasse para a confirmação incorreta.
O significado do sinal de mais ( +
) na saída do submódulo git mudou, e na primeira vez que você se deparar com isso, leva um tempo para descobrir o que está acontecendo de errado, por exemplo, olhando através de registros de alterações ou usando git bisect no git .git para encontrar a alteração. Teria sido muito mais gentil com os usuários introduzir um símbolo diferente para "na versão especificada, mas suja".
Você pode corrigi-lo:
confirmando ou desfazendo as alterações / evoluções em cada um dos seus submódulos, antes de voltar ao repositório pai (onde o diff não deve mais relatar arquivos "sujos"). Para desfazer todas as alterações no seu submódulo apenas cd
no diretório raiz do submódulo e fazergit checkout .
O dotnetCarpenter comenta que você pode fazer um:git submodule foreach --recursive git checkout .
ou adicione --ignore-submodules
ao seu git diff
, para ignorar temporariamente esses submódulos "sujos".
Novo no Git versão 1.7.2
Como Noam comenta abaixo , esta pergunta menciona que, desde a versão 1.7.2 do git, você pode ignorar os submódulos sujos com:
git status --ignore-submodules=dirty
git commit -a
sem ter que se preocupar em adicionar essas alterações. Embora estejam marcados comM
na frente, eles não acabarão no seu commit.