подмодуль git foreach не работает как псевдоним - PullRequest
1 голос
/ 23 октября 2019

Раньше я использовал такие команды, как

git submodule foreach git status

или для команд, которые могут потерпеть неудачу

git submodule foreach "git checkout develop || true"

Так что теперь я создал псевдоним для первой формы, и он работает ОК

git config --global alias.all '!f(){ git submodule foreach "git $@"; }; f'

Затем я пытаюсь сделать это также для второй формы, и она совсем не работает

git config --global alias.all '!f(){ git submodule foreach "git $@ || true"; }; f'

Обратите внимание, что я все еще могу использовать первую, такую ​​как

git all "checkout develop || true"

но это выглядит как ненужная типизация при использовании псевдонима.

Ошибка, которая выдается в приведенном выше примере с использованием 'git all', является ошибкой: pathspec'velop ||Значение true не соответствует ни одному из файлов, известных git

, в то время как в «подмодулях» выводится ошибка, но продолжается следующий подмодуль.

Любой указатель о том, как это исправитьвторая версия?

ура.

1 Ответ

1 голос
/ 23 октября 2019

У меня работает (почти):

$ git config alias.all

$ git config alias.all '!f(){ git submodule foreach "git $@ || true"; }; f'

$ git config alias.all
!f(){ git submodule foreach "git $@ || true"; }; f

$ git all checkout master
Entering 'genxml'
/usr/lib/git-core/git-submodule: 342: /usr/lib/git-core/git-submodule: git checkout: not found
Stopping at 'genxml'; script returned non-zero status.

Хм, странно, я ожидал, что это будет работать так же, как показано ниже:

$ git all "checkout master"
Entering 'genxml'
error: pathspec 'master' did not match any file(s) known to git.
Entering 'third-party/c14n2'
Already on 'master'
Your branch is up-to-date with 'origin/master'.
Entering 'third-party/cmclib'
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Entering 'third-party/eplant'
Already on 'master'
Your branch is up-to-date with 'origin/master'.
Entering 'third-party/pycryptoserver'
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
Entering 'third-party/ufod'
warning: unable to rmdir ufod/xsd: Directory not empty
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

По крайней мере, это работает какожидается.

...