Подтвердить что ты не робот

В чем разница между git слиянием поддерева и git -subtree

Я только что нашел инструмент git -subtree, который некоторое время назад стал частью основного репозитория git https://github.com/apenwarr/git-subtree/

Однако я не совсем понимаю, какую функциональность предоставляет этот инструмент по уже существующему "git read-tree" + "git merge -s поддерево". Является единственной пурпурой git -subtree, что делает результирующую историю фиксации лучше выглядеть или у нее больше функциональности, которую я пропустил?

4b9b3361

Ответ 1

Команды, которые вы описываете, читают поддерево в репозиторий. Команда git-subtree имеет гораздо больше опций, описанных в документации. Среди прочего вы можете (аннотированный для простоты):

add::
    Create the <prefix> subtree by importing its contents
    from the given <refspec> or <repository> and remote <refspec>.
merge::
    Merge recent changes up to <commit> into the <prefix>
    subtree.
pull::
    Exactly like 'merge', but parallels 'git pull' in that
    it fetches the given commit from the specified remote
    repository.
push::
    Does a 'split' (see above) using the <prefix> supplied
    and then does a 'git push' to push the result to the 
    repository and refspec. This can be used to push your
    subtree to different branches of the remote repository.
split::
    Extract a new, synthetic project history from the
    history of the <prefix> subtree.  The new history
    includes only the commits (including merges) that
    affected <prefix>, and each of those commits now has the
    contents of <prefix> at the root of the project instead
    of in a subdirectory.  Thus, the newly created history
    is suitable for export as a separate git repository.

Существуют также различные флаги, которые помогают и управляют приведенным выше. Я считаю, что все эти варианты были доступны прежде всего с помощью цепей сантехнических команд. git-subtree.sh просто обертывает их и значительно упрощает их выполнение.

Ответ 2

Если вы посмотрите на старый код поддерева, прежде чем он будет добавлен в git в качестве модуля Contrib: https://github.com/apenwarr/git-subtree/blob/master/git-subtree.sh, вы можете увидеть, что инструмент git поддерева - действительно более продвинутая оболочка вокруг стратегий слияния поддерева git.

Он в основном использует эти стратегии разумным способом упрощения управления поддеревом. В частности, материал -squash действительно, действительно полезен.