Git поддерево совместимо с Gerrit? - PullRequest
0 голосов
/ 11 октября 2019

Наши репозитории git находятся в Gerrit. Коллега поддерживает 2 репозитория main и sub. Он хочет включить sub в main как поддерево. Вот что мы уже попробовали:

git clone repo_url_main -b dev main
cd main
git subtree add -P foo/bar repo_url_sub master
touch foo/bar/baz.txt
git add .
git commit -m 'foo.bar.baz.tt'
git subtree push -P foo/bar repo_url_sub master

Первая проблема заключается в том, что git subtree push не удается, потому что его учетная запись не имеет разрешения напрямую отправлять коммиты без проверки. Рецензия - это то, что он хочет.

Для репо без поддерева мы используем git push origin HEAD:refs/for/master для создания рецензии. Поэтому мы пытаемся git subtree push -P foo/bar repo_url_sub master:refs/for/master, и это тоже не получается. Git жалуется, что master:refs/for/master не является действительным реф. Я нахожу git subtree push -P <prefix> <repository> <ref> в руководстве. Последняя часть - ref вместо refspec. Так что master:refs/for/master здесь не ожидается.

А потом мы попробуем git subtree push -P foo/bar repo_url_sub refs/for/master. Толчок успешен, но результат не ожидается. Вместо изменения отзыва создается ветка refs/for/master. После нескольких попыток мы находим, что, какой бы ни была последняя ссылка, она всегда расширяется до refs/heads/.... Даже refs/heads/master расширен до refs/heads/refs/heads/master.

Обходные пути, о которых мы думали до сих пор:

  1. Используйте инструмент РЕПО Google для управления 2-мя репо, так каксделано для AOSP, который требует дополнительных навыков и немного излишним.

  2. Используйте git submodule, что более хлопотно.

  3. Включитьлокальный перевод sub репо как поддерево в main. Сначала git subtree push для обновления master в репо передачи, а затем в репо передачи используйте git push repo_url_sub HEAD:refs/for/master для создания изменений обзора. Но мы можем предвидеть хаос, когда задействованы многие сопровождающие.

Существуют ли какие-либо параметры или конфигурации git, которые могут указать git subtree push, как правильно создавать изменения обзора в Gerrit? Спасибо за любые идеи.

1 Ответ

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

В соответствии с «git help subtree»:

push

Делает разделение с использованием прилагаемого файла, а затем выполняет git push для передачи результата в хранилище и ref

Так что я думаю, что вы можете сначала выполнить «git subtree split», а затем «git push», что-то вроде:

git subtree split --prefix=foo/bar -b split
git push repo_url_sub split:refs/for/master
...