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? С самого начала кажется, что я не могу, и я не видел ничего многообещающего, просматривая патч. (Я думаю, я все еще могу сделать псевдоним.)

695   9  

9 ответов:

есть даже возможность установить режим игнорирования для каждого добавленного подмодуля в пределах .файл gitmodules.

только сегодня я столкнулся с этой проблемой и сразу же написал статью в своем блоге об этом после нахождения решения:как игнорировать изменения в подмодулях git

суть:

после добавления подмодуля появится файл с именем .gitmodules в корне вашего репозитория

просто добавить одна строчка к этому .gitmodules file:

[submodule "bundle/fugitive"]
    path = bundle/fugitive
    url = git://github.com/tpope/vim-fugitive.git
    ignore = dirty

обновление: см. (и upvote) nilshaldenwang ' s ответ относительно возможности добавить к .gitmodules file параметр конфигурации для игнорирования грязного состояния данного подмодуля.

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".

вам нужно добавить

игнор = грязная

для .gitmodules

Итак, 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 = dirty to .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

    Ничего не найдено.