Git подмодули с измененным и необработанным контентом - почему и как его удалить?
вот как выглядит мой git status
':
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
# (commit or discard the untracked or modified content in submodules)
#
# modified: vim/bundle/pathogen (modified content)
# modified: vim/bundle/sparkup (untracked content)
#
no changes added to commit (use "git add" and/or "git commit -a")
running git diff vim
показывает это:
diff --git a/vim/bundle/pathogen b/vim/bundle/pathogen
--- a/vim/bundle/pathogen
+++ b/vim/bundle/pathogen
@@ -1 +1 @@
-Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf
+Subproject commit fcf77f5101f3e589ce006c40ad3a0432735a05cf-dirty
diff --git a/vim/bundle/sparkup b/vim/bundle/sparkup
--- a/vim/bundle/sparkup
+++ b/vim/bundle/sparkup
@@ -1 +1 @@
-Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70
+Subproject commit 04a81b41f116a19184359a6f8685c192f5c36c70-dirty
Почему один неверный, другой модифицированный, что означает diff? Но самое главное: как это произошло и как избавиться от него?
Ответы
Ответ 1
Один из отслеживаемых файлов в vim/bundle/pathogen
был каким-то образом изменен. В подмодуле vim/bundle/sparkup
имеется также некорректный (и неименованный) контент. В любом случае способ выяснить, что изменено/не проверено, - это изменить каталог подмодулей и запустить git status
. (В случае необработанных файлов в подмодуле это часто является продуктом сборки, который не был добавлен в .gitignore
в восходящем потоке.)
Ответ 2
Добавьте ignore = dirty
в каждый проблемный раздел submodule
в файлах .gitmodules
, размещенных в корне репо. Пример:
[submodule "vim/bundle/nerdtree"]
path = vim/bundle/nerdtree
url = https://github.com/scrooloose/nerdtree.git
ignore = dirty
Как видно на NilsH Как игнорировать изменения в подмодулях git. Найдено благодаря Синхронизация плагинов с git подмодулями и патогеном vimcast.
Ответ 3
Зайдите в каталог подмодулей и убедитесь, что ничего не строится (какой-то вывод), если вы не знаете.
cd submoduledir/
git status
Если вы видите какие-либо файлы без следа, просто сделайте это, чтобы удалить их:
git reset --hard HEAD
git clean -fxd
Ответ 4
Если вы действительно уверены, что хотите просто сделать это (я управляю пакетами vim с патогенами и подмодулями git, а некоторые из них, как мне удалось получить несколько папок тегов в репозиториях), и им просто нужно было идти) может зацикливаться на подмодулях и удалять необработанные файлы.
cd YOUR_REPO_WITH_SUBMODULES/
git submodule foreach git clean -f -d
-f
, чтобы заставить, -d
удалить каталоги
Вы можете проверить документы здесь: https://git-scm.com/docs/git-clean
Ответ 5
Как автор патогенного состояния в FAQ, вы можете игнорировать теги глобально:
git config --global core.excludesfile '~/.cvsignore'
echo tags >> ~/.cvsignore