Правильный способ переключения ветки Git Subtree?

Предполагая, что я уже добавил новый удаленный «foo» и вытащил сжатое поддерево с мастером ветки.

$ git remote add -f foo some-repo.git
$ git subtree add --prefix=foo --squash foo master

Из статей, которые я прочитал (здесь и здесь и т. д.), это, по-видимому, распространенный способ переключения ветвей. В этом случае на ветку «бар»:

$ git rm -r foo
rm 'foo/file'.
...
$ git commit -m "Delete foo on branch 'master' to switch to branch 'bar'."
1350 files changed, 144703 deletions(-)
delete mode 100644 foo/file
...
$ git subtree add --prefix=foo --squash foo bar
git fetch foo master
From some-repo.git
 * branch            master     -> FETCH_HEAD
Added dir 'foo'

Но это кажется грязным. Почему бы просто не использовать «git subtree pull», у которого уже есть аргумент ветки (без rm/commit/add)?

$ git subtree pull --prefix=foo --squash foo bar
From some-repo.git
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 foo/file                                                        |  2 ++
 ... smaller changeset output ...

 3 files changed, 41 insertions(+)
 ...

Когда я протестировал оба локально, я не вижу различий между директориями поддерева (./foo). Почему все рекомендуют способ добавления более сложных наборов изменений и коммитов (удаление и повторное добавление)? Что мне не хватает, может быть, какие-то крайние случаи?


person jmar    schedule 17.07.2018    source источник


Ответы (1)


git subtree pull был введен в commit 13648af5 в апреле 2009 г. для Git 1.7.11 Эйвери Пеннарун apenwarr.

Добавьте «git subtree merge» и «git subtree pull».

Это простые сочетания клавиш для «git merge -s subtree» и «git pull -s subtree», но имеет смысл использовать все это в одной команде.

Вы можете увидеть в его сопутствующем тесте

-git merge -s subtree subproj-merge-split3
+git subtree pull --prefix=subdir ../subproj subproj-merge-split3

Это не то же самое, что добавление rm/subtree, которое по-прежнему лучше подходит для переключения ветвей.

person VonC    schedule 21.07.2018
comment
На самом деле это не ответило на мой вопрос (почему один метод вместо другого для переключения ветвей), но, поскольку я не получаю других ответов, вы получаете награду. - person jmar; 27.07.2018