Как избавиться от подмодулей Git без отслеживания статуса? - PullRequest
133 голосов
/ 26 февраля 2011

Кажется, я не могу избавиться от неотслеживаемого контента в подмодулях 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 скрывает эти сообщения;но мне интересно, есть ли способ избавиться от этой грязи более подходящим способом.

Ответы [ 10 ]

133 голосов
/ 08 сентября 2012

Я нашел это сообщение в блоге , чтобы работать в целом.Добавив опцию ignore = dirty к каждой записи в файле .gitmodules.

[submodule "zen-coding-gedit3"]
    path = zen-coding-gedit3
    url = git://github.com/leafac/zen-coding-gedit3.git
    ignore = dirty
83 голосов
/ 26 февраля 2011

Поскольку состояние git сообщает о неотслеживаемом контенте, фактический способ получить чистый статус состоит в том, чтобы войти в каждый из этих подмодулей и:

  • добавить и зафиксировать неотслеживаемое содержимое,
  • или укажите неотслеживаемое содержимое в .gitignore, специфичном для каждого модуля.
  • или вы можете добавить то же игнорируемое содержимое к .git/info/exclude подмодуля, что и peci1 отчеты в комментариях .
  • илидобавить грязную в спецификацию подмодуля, как указано в ezraspectre answer (upvoted).

    git config -f .gitmodules submodule.<path>.ignore untracked
    
  • или добавить Глобальный .gitignore файл (часто ~/.gitignore-global).Как например .DS_Store или в моем случае Carthage/Build, как сообщили Мариан Черны в комментарии .См. .gitginore man-страницу :

Шаблоны, которые пользователь хочет, чтобы Git игнорировал во всех ситуациях (например, резервные или временные файлы, созданные пользователем).по выбору редактора) обычно переходят в файл, указанный core.excludesFile в пользовательском ~/.gitconfig.Его значение по умолчанию $XDG_CONFIG_HOME/git/ignore.Если $XDG_CONFIG_HOME не задан или пуст, вместо него используется $HOME/.config/git/ignore.

10 голосов
/ 05 июня 2012

Вы также можете перейти к каждому подмодулю dir и действовать как отдельный 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

в конце концов

3 голосов
/ 03 ноября 2013

Это будет связано с detached HEAD в вашей ветке подмодулей.Перейдите по пути к субмодулю (например: ./bundle/snipmate), затем git checkout master

Надеюсь, это поможет:)

1 голос
/ 11 февраля 2015

Вчера я застрял в этой проблеме в проекте, в котором было около 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, которыйобновлен каждый из подмодулей.

0 голосов
/ 08 мая 2019

Я предпочитаю использовать SourceTree , поэтому для меня было решение открыть репозиторий субмодулей в SourceTree, который показывает мне список всех неотслеживаемых файлов.Затем я выбрал их все, затем использовал «Удалить».

Я смог это сделать, потому что знал, что все неотслеживаемые файлы на самом деле не нужны.

0 голосов
/ 01 февраля 2019

Это, вероятно, происходит, когда у вас есть другой .git [скрытая папка] внутри определенной папки ..

изменено: ./../ .. (измененное содержимое, неотслеживаемое содержимое)

убедитесь, что в вашем подкаталоге нет этой папки .git.

В этом случае проблему можно решить, удалив папку .git вручную из подкаталога.

0 голосов
/ 07 сентября 2018

Для меня все получилось:

git update-index --skip-worktree

Если это не работает с путем, попробуйте имя файла.Дайте мне знать, если это сработало и для вас.

Пока!

0 голосов
/ 05 августа 2015

В моей ситуации я клонирую модули как отправную точку для нового модуля в моей среде ZF2. Что он делает, так это помещает свою собственную папку .git в каталог.

Решением в этом случае является удаление папки .git (вам, вероятно, потребуется показать скрытые файлы, чтобы просмотреть ее).

0 голосов
/ 09 декабря 2014

Если это временная проблема, вы можете зайти в папку субмодуля и запустить git reset HEAD --hard, но вы потеряете все свои изменения внутри субмодуля.

...