2016-08-03 20 views
8

War Suche throw SO für eine Antwort auf diese Frage. Kam über diesen älteren Thread, der keine Antworten zu geben schien. Diesen Thread neu triggern, in der Hoffnung, dass jemand es weiß!Unterschied zwischen Git-Filter-Zweig und Git-Unterbaum?

Kann mir jemand den Unterschied sagen b/w git subtree und git filter-branch? Ich werde das gleiche Beispiel in der ursprünglichen Frage für diesen Einsatz:

git subtree split --prefix=some_subdir -b some_branch 

git filter-branch --subdirectory-filter some_subdir some_branch 

Antwort

3

Ja, git subtree (eine contrib Shell) verwendet wird repos aufzuschlitzen, wie in "Using Git subtrees for repository separation" von Stu Campbell beschrieben.

Sie müssen den Code entfernen, die Sie aber in Ihrem geteilten Ordner kopiert haben:

git subtree split --prefix=path/to/code -b split 
git push ~/shared/ split:master 
git rm -r path/to/code 
git commit -am "Remove split code." 

, die von git filter-branch (native Git-Befehl) unterscheidet, die die Repo-Geschichte neu schreibt nur die Commits Aufnehmen, die tatsächlich beeinflussen der Inhalt eines bestimmten Unterverzeichnisses.

Bedeutung: Es gibt keinen Code zu git rm, sobald die filter-branch ausgeführt wurde.
git filter-branch nicht verpflichtet nicht duplizieren wie git subtree split tut: es löscht („filtert“) alles, was nicht ein bestimmten Kriterien nicht entspricht (hier ein Unterordnerpfad)

+0

Diese ungenau ist heute als git Teilbaum ist jetzt ein offizieller Teil von git –

+0

Der Unterschied bedeutet auch, wenn Sie mehrere (n) Unterordner haben, die Sie jedes zu seinem eigenen Repo machen wollen, mit git filter-branch müssen Sie zuerst n mal klonen, mit subtree müssen Sie rm n mal gitrieren. – Qiulang