Git: могу ли я подавить список "измененного содержимого" /грязных записей подмодуля в status, diff и т. д.?
когда-то (около 1.6.X релизы, я думаю) git стало известно об изменениях внутри подмодулей. Это только раздражает меня:
$ git status vendor | grep modified:
# modified: vendor/rails (modified content)
$ git diff vendor/
diff --git a/vendor/rails b/vendor/rails
--- a/vendor/rails
+++ b/vendor/rails
@@ -1 +1 @@
-Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f
+Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f-dirty
пожалуйста, остановите его?
Edit:
Итак, у меня есть ответ. Теперь у меня есть еще один вопрос:
могу я положить это в ~/.gitconfig? С самого начала кажется, что я не могу, и я не видел ничего многообещающего, просматривая патч. (Я думаю, я все еще могу сделать псевдоним.)
9 ответов:
есть даже возможность установить режим игнорирования для каждого добавленного подмодуля в пределах .файл gitmodules.
только сегодня я столкнулся с этой проблемой и сразу же написал статью в своем блоге об этом после нахождения решения:как игнорировать изменения в подмодулях git
суть:
после добавления подмодуля появится файл с именем
.gitmodulesв корне вашего репозиторияпросто добавить одна строчка к этому
.gitmodulesfile:[submodule "bundle/fugitive"] path = bundle/fugitive url = git://github.com/tpope/vim-fugitive.git ignore = dirty
обновление: см. (и upvote) nilshaldenwang ' s ответ относительно возможности добавить к
.gitmodulesfile параметр конфигурации для игнорирования грязного состояния данного подмодуля.ignore = dirty
Итак, git 1.7.2 вышел и включает на
status.С
git help status:--ignore-submodules[=<when>] Ignore changes to submodules when looking for changes. <when> can be either "untracked", "dirty" or "all", which is the default. When "untracked" is used submodules are not considered dirty when they only contain untracked content (but they are still scanned for modified content). Using "dirty" ignores all changes to the work tree of submodules, only changes to the commits stored in the superproject are shown (this was the behavior before 1.7.0). Using "all" hides all changes to submodules (and suppresses the output of submodule summaries when the config option status.submodulesummary is set).значение, которое я хочу
dirty.git status --ignore-submodules=dirtyЯ использую псевдоним, потому что я ленивый:
alias gst='git status --ignore-submodules=dirty'
есть два вида уведомлений можно подавить.
первое-это
untracked contentчто происходит, когда вы вносите изменения в субмодуль, но еще не совершил их. Родительский репозиторий замечает эти иgit statusсообщает об этом соответственно:
modified: modules/media (untracked content)вы можете подавить их с помощью:
[submodule "modules/media"] path = modules/media url = [email protected]:user/media.git ignore = dirtyоднако, как только вы зафиксируете эти изменения, Родительский репозиторий снова заметит и сообщит о них соответственно:
modified: modules/media (new commits)если вы хотите подавить их, вы должны игнорировать
allизменения[submodule "modules/media"] path = modules/media url = [email protected]:user/media.git ignore = all
вы также можете использовать
% git config [--global] submodule.ignore dirtyустановить
submodule.ignore = dirtyв своем .--globalустановит флаг игнорировать в вашем~/.gitconfigи применить ко всем вашим хранилищам. Без него он должен установить в.git/configтолько для РЕПО, в котором вы находитесь в настоящее время.единственная документация, которую я могу найти на этом
submodule.<name>.ignoreна git-config docs. Я передвинул его из А.gitmodules файл в мой ~/.gitconfig и он все еще работает для меня.
как вы заметили, исправление подмодуль git: игнорировать грязные подмодули для сводки и статуса находится в стадии становления.
также объявлено в Git 1.7.2-rc2 версия:
Git v1.7.2 Release Notes (draft) ================================ Updates since v1.7.1 --------------------"
git status" узнал "--ignore-submodulesопции".значение:
git config --global diff.ignoreSubmodules dirty
относительно этого как вариант не совсем подход выбран на данный момент:
после этой серии я планирую добавить опцию конфигурации '
ignore' to.gitmodules, который может быть установлен для каждого подмодуля либо "all", "dirty", "untracked" или "none" (по умолчанию)."
git diff" и "git status" будет использовать это значение config для каждого подмодуля.
Используя "--ignore-submodule" переопределяет это значение по умолчанию (и новый параметр "none" будет добавлен туда, чтобы переопределить параметры конфигурации).и чтобы избежать необходимости делать "
git submdule sync" каждый раз, когда параметр изменяется, я хотел бы искать его в.git/configпервый.
Если он не будет найден там, он будет взят из.gitmodules, если он присутствует.таким образом, пользователи могут переопределить настройку, но если они этого не делают, upstream может легко изменить ее (например, когда подмодули
.gitignoreбыл обновлен так, что"ignore=untracked" больше не нужно больше его можно удалить).
Также переключение ветвей будет иметь эффект мгновенно, если '' в.gitmodulesотличается между ветвями.
другой подход, чтобы сделать git status (или любую команду git) игнорировать определенный подмодуль, доступен с Git 2.13 (Q2 2017):
git config submodule.<name>.active false
Итак, git v1.7. 2-rc2 имеет то, что я хочу:
$ git diff --ignore-submodules=dirty vendor # no output$ git status --ignore-submodules=dirty vendor # On branch … nothing to commit (working directory clean)создание собственного git howto:
# get git git clone git://git.kernel.org/pub/scm/git/git.git git cd git git checkout v1.7.2-rc2 # make git. beware of setting prefix make configure ./configure --prefix=/usr/local make sudo make install # you REALLY don't want to `make doc`, use this instead sudo make quick-install-man sudo make quick-install-html
вы не можете добавить
ignore = dirtyto.gitmodules, вы можете быть более избирательным в отношении изменений, которые вы хотели игнорировать.для этого добавьте шаблоны в
.git/submodule_foo/bar/info/exclude, гдеsubmodule_foo/bar/- это путь подмодуля.шаблоны похожи на шаблоны, которые вы бы добавили в
.gitignore, причем корень является каталогом подмодуля. Например, этот шаблон игнорируетbuildкаталог в подмодулеsubmodule_foo/bar/:# in .git/submodule_foo/bar/info/exclude: /build/
Я ответил на этот вопрос здесь более подробно.
просто запустить
git config --global diff.ignoreSubmodules dirtyдобавить параметр локальной конфигурации, чтобы игнорировать эти изменения.
Comments