Подтвердить что ты не робот

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? Но самое главное: как это произошло и как избавиться от него?

4b9b3361

Ответ 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