Как упомянуто в сообщении Марка Лонгаира в Git Submodules Explained ,
Версии 1.7.0 и более поздних версий git содержат раздражающее изменение поведения подмодуля git.
Подмодули теперь считаются грязными, если у них есть какие-либо измененные или неотслеживаемые файлы , тогда как ранее было бы так, если бы HEAD в подмодуле указывал на неправильный коммит.
Значение знака плюс ( +
) в выходных данных подмодуля git изменилось, и когда вы впервые сталкиваетесь с этим, требуется некоторое время, чтобы выяснить, что идет не так, например, просматривая журнал изменений или используя git bisect на git. .git, чтобы найти изменения. Пользователям было бы гораздо приятнее ввести другой символ для «в указанной версии, но грязный».
Вы можете это исправить:
либо передайте, либо отмените изменения / изменения в каждом из ваших подмодулей, прежде чем вернуться к родительскому репо (где diff больше не должен сообщать о «грязных» файлах). Чтобы отменить все изменения в вашем подмодуле, просто cd
в корневой каталог вашего подмодуля и выполнитеgit checkout .
dotnetCarpenter комментирует, что вы можете сделать:git submodule foreach --recursive git checkout .
или добавить --ignore-submodules
в свой git diff
, чтобы временно игнорировать эти "грязные" подмодули.
Новое в Git версии 1.7.2
Как Noam комментирует ниже , этот вопрос упоминает, что начиная с git версии 1.7.2, вы можете игнорировать грязные подмодули с помощью:
git status --ignore-submodules=dirty
git commit -a
выполнить, не беспокоясь о добавлении этих изменений. Хотя они отмеченыM
спереди, они не окажутся в вашем коммите.