Разница между git поддеревом и git фильтром-банчем

Есть ли разница между этими двумя командами?

git subtree split --prefix=some_subdir -b some_branch

и

git filter-branch --subdirectory-filter some_subdir some_branch

Я хотел бы использовать git filter-branch вместо git subtree, потому что я также хочу удалить некоторые файлы в новой ветке, но я беспокоюсь, что эта гарантия, которая верна для git subtree, может быть недействительной для git filter-branch:

Повторяющиеся расщепления точно такой же истории гарантированы идентичны (т.е. для создания одинаковых идентификаторов фиксации). Из-за этого, если вы добавляете новые коммиты, а затем снова разделяете, новые коммиты будут прилагается как фиксация поверх истории, которую вы создали в прошлый раз, поэтому 'git merge', и друзья будут работать, как ожидалось.

Ответ 1

filter-branch определенно не дает такой гарантии, поэтому при ее использовании вы, безусловно, надеетесь. Но фильтр подкаталогов имеет точно воспроизводимые результаты, а filter-branch не касается информации о фиксации (фиксация и метка времени автора и человека). Поскольку это информация, которую создает команда фиксации, filter-branch должна генерировать ту же историю снова.

Все, что вы собираетесь получить, пока filter-branch не начнет делать какие-либо гарантии, и это кажется маловероятным.