Git: подвести итоги суб-репо - PullRequest
0 голосов
/ 06 ноября 2018

Допустим, у меня есть несколько автономных подпроектов с собственными pom.xml и git-repo. Но теперь я собираю их вместе в проекте X.

project X
 - sub A
 - sub B
 - sub C

Я хочу сгенерировать все подпроекты в X. Я делаю это с pom.xml, в котором проекты от A до C являются модулями. Поколение X будет обобщать все проекты. Работает отлично!

Есть ли способ объединить git-репо тоже? Коммит в X должен выполнять коммит в каждом проекте. То же самое для обновления, ...

Ответы [ 2 ]

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

ГИТ-подмодуль-Еогеасп

git submodule предоставляет утилиту для перебора всех подмодулей:

Команда для выполнения git commit в каждом подмодуле в текущем проекте выглядит следующим образом:

git submodule foreach "git commit"

ГИТ-Еогеасп

Для удобства я создал простой bash-скрипт, который запускает произвольную команду в текущем проекте плюс все его подмодули. Таким образом, мне не нужно вводить команду дважды (один раз для родительского проекта, затем снова для git-submodule-foreach)

~ / bin / ГИТ-Еогеасп

#!/bin/bash
set -e
if [ "$*" == "" ]; then
    echo "Usage: $0 COMMAND"
    echo
    echo "Run an arbitrary COMMAND in the current git repository plus all of the submodules"
    echo
    exit 1
fi
echo "Entering '.'"
# run the command in PWD
"$@"

# now run the command on submodules
git submodule foreach "$*"

Поместите исполняемый файл git-foreach где-нибудь в $PATH и запустите его из репозитория git:

# describe the commit at HEAD for the project and all subprojects:
git foreach git describe
0 голосов
/ 07 ноября 2018

git не имеет понятия «подпроекты», как это делает Maven.

Чтобы выполнить то, что вы хотите, у меня на машине настроена функция (bash):

git-all () 
{ 
  find ~/workspace -name .git -type d -print -execdir git "$@" \;
}

Команда поиска:

  • просматривает все папки (локальные репозитории), в моем ~ / workspace
  • находит любой каталог с именем .git
  • распечатывает путь
  • по этому пути выполняет команду git, за которой следуют остальные мои аргументы

Итак, я могу сделать что-то вроде:

git-all commit -m "my commit"
...