Короткая часть такая же, как вы ее указали в сводке комментариев :
... в моем случае использования выше нет никакой разницы.
Тем не менее, общий совет будет использовать git subtree
: он более прямой, менее подвержен ошибкам и должен продолжать работать, даже если и когда git filter-branch
перестанет работать когда-нибудь.
Подробнее
По сути, вы независимо друг от друга заново открыли, как появилась команда git subtree
: различные пользователи хотели взять свой существующий репозиторий, извлечь некоторую его часть - обычно библиотеку - и экспортировать это как новый Git репозиторий. Команда git filter-branch
могла сделать это, вот что они сделали.
Это было достаточно популярно и достаточно полезно, так что git filter-branch
создал фильтр с именем --subdirectory-filter
, предназначенный для этой работы. См. commit 685ef546b62d063c72b401cd38b83a879301aac4
Johannes Schindelin в 2007 году, впервые выпущенный в Git версии 1.5.3.
Само расщепление поддерева было недостаточно (и git filter-branch
- это своего рода из опасно-мощного инструмента), поэтому в апреле 2009 года Эвери Пеннарун ввел команду git subtree
, начиная с commit 0ca71b3737cbb26fbf037aa15b3f58735785e6e3
, в качестве экспериментального сценария для кандидата на выпуск 1.7.11. Это реализовало разделение и, почти сразу, --rejoin
и add
. Первая фактически установленная версия, а не надстройка, распространяемая с Git, взята из commit 0d31de303f9e8e28cc1649dbf41c1cc635bae2d8
от Ben Walton. Все это было выпущено в Git 1.7.11.
В последнее время само по себе git filter-branch
формально устарело: его трудно использовать правильно, медленно, и, как правило, не очень приятно. Новая команда git filter-repo
более быстрая и более полезная, хотя она требует, чтобы вы знали достаточно Python, чтобы использовать ее, и она все еще не распространяется вместе с Git. Но git subtree
, у которого есть конкретная c цель, а не общая цель, останется без изменений и будет иметь такое же применение в будущем, даже если git filter-repo
фактически полностью заменит git filter-branch
.