Как избавиться от статуса Git невосстановленных подмодулей?
Я не могу избавиться от необработанного контента в подмодулях Git. Выполнение git status
дает:
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
# (commit or discard the untracked or modified content in submodules)
#
# modified: bundle/snipmate (untracked content)
# modified: bundle/surround (untracked content)
# modified: bundle/trailing-whitespace (untracked content)
# modified: bundle/zencoding (untracked content)
#
no changes added to commit (use "git add" and/or "git commit -a")
Добавление параметра --ignore-submodules
скрывает эти сообщения; но я задаюсь вопросом, есть ли способ избавиться от этой грязи в более подходящем, ядро-иш, манере.
Ответы
Ответ 1
Поскольку состояние git сообщает о неотслеживаемом контенте, фактический способ получить чистый статус состоял бы в том, чтобы войти в каждый из этих подмодулей и:
- добавить и зафиксировать неотслеживаемое содержимое,
- или ссылаться на неотслеживаемое содержимое в
.gitignore
специфичном для каждого модуля. - или вы можете добавить то же игнорируемое содержимое в подмодуль
.git/info/exclude
, что и peci1 в комментариях. -
или добавить загрязнен спецификации подмодуль, как указано в ezraspectre ответ (upvoted).
git config -f .gitmodules submodule.<path>.ignore untracked
-
или добавьте глобальный файл .gitignore
(часто ~/.gitignore-global
). Как, например, .DS_Store
или в моем случае Carthage/Build
чем сообщила Мариан Черны в комментариях. См. .gitginore
:
Шаблоны, которые пользователь хочет, чтобы Git игнорировал во всех ситуациях (например, резервные копии или временные файлы, сгенерированные выбранным редактором пользователей), обычно core.excludesFile
в файл, указанный в core.excludesFile
в ~/.gitconfig
. Его значение по умолчанию - $XDG_CONFIG_HOME/git/ignore
. Если $XDG_CONFIG_HOME
либо не установлен, либо пуст, вместо него используется $HOME/.config/git/ignore
.
Ответ 2
Я нашел этот пост в блоге, чтобы работать в целом. Добавив опцию ignore = dirty
для каждой записи в файле .gitmodules
.
[submodule "zen-coding-gedit3"]
path = zen-coding-gedit3
url = git://github.com/leafac/zen-coding-gedit3.git
ignore = dirty
Ответ 3
Вы также можете перейти к каждому подмодулю и действовать как разделенный git.
Например:
cd my/project/submodule
git status
.../получает список измененных файлов /
git add . //to add all of them to commit into submodule
git commit -m "message to your submodule repo"
вы также можете обновить репозиторий удаленного субмодуля с помощью
git submodule update
в конце концов
Ответ 4
Это будет связано с detached HEAD
в вашей субмодульной ветке. Перейдите на ваш путь подмодуля (ex: ./bundle/snipmate
), затем git checkout master
.
Надеюсь, это поможет:)
Ответ 5
Я застрял в этом вопросе вчера, в проекте, который имел около 12 подмодулей.
git status
показывал результат.
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
# (commit or discard the untracked or modified content in submodules)
#
# modified: proj1 (untracked content)
# modified: proj1 (modified content, untracked content)
# ...
Чтобы устранить неподтвержденную ошибку содержимого, мне пришлось удалить необработанные файлы со всех подмодулей (все были *.pyc
, *.pyo
файлы, сгенерированные python) с помощью .gitignore
.
Чтобы решить другое, мне пришлось запустить git submodule update
, который обновил каждый из подмодулей.
Ответ 6
В моей ситуации я клонирую модули как отправную точку для нового модуля в среде ZF2. То, что это делает, помещает свою собственную .git-папку в каталог.
Решение в этом случае - удалить папку .git(вам, вероятно, нужно будет отображать скрытые файлы для ее просмотра).
Ответ 7
Это сработало просто отлично для меня:
git update-index --skip-worktree
Если это не работает с путем, попробуйте имя файла. Дайте мне знать, если это сработало и для вас.
До свидания!
Ответ 8
Это, вероятно, происходит, когда у вас есть другой .git [скрытая папка] внутри конкретной папки..
Изменено:./../.. (измененный контент, неотслеживаемый контент)
убедитесь, что ваш подкаталог не содержит эту папку .git.
Если это так, проблему можно решить, удалив папку .git вручную из подкаталога.
Ответ 9
Я предпочитаю использовать SourceTree, поэтому решение для меня было открыть репозиторий подмодулей в SourceTree, который показывает мне список всех неотслеживаемых файлов. Я тогда группа выбрал их все, затем использовал "Удалить".
Я смог это сделать, потому что знал, что все неотслеживаемые файлы на самом деле не нужны.
Ответ 10
Если это временная проблема, вы можете войти в папку подмодуля и запустить git reset HEAD --hard
, но вы потеряете все свои изменения внутри подмодуля.