2016-08-03 1 views
8

Était la recherche lancer SO pour une réponse à cela. Arrivé à travers ce fil plus âgé qui n'a pas semblé donner de réponses. Retrigger ce fil en espérant que quelqu'un puisse le savoir! Est-ce que quelqu'un peut me dire la différence b/w git subtree et git filter-branch? Je vais utiliser le même exemple dans la question originale pour cela:Différence entre la branche de filtre git et le sous-arbre git?

git subtree split --prefix=some_subdir -b some_branch 

git filter-branch --subdirectory-filter some_subdir some_branch 

Répondre

3

Oui, git subtree (une coquille contrib) peut être utilisé à la fente repo, comme décrit dans « Using Git subtrees for repository separation » par Stu Campbell.

Vous devez supprimer le code que vous avez dupliqué dans votre dossier partagé si:

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." 

qui diffère de git filter-branch (une commande Git native) qui réécrit l'histoire de repo ramasser uniquement les commits qui affectent réellement le contenu d'un sous-répertoire spécifique. Signification: il n'y a pas de code à git rm une fois le filter-branch a été exécuté.


git filter-branch ne fasse pas double emploi engage comme git subtree split fait: il supprime (« filtre out ») tout ce qui ne correspond pas à certains critères (ici un chemin de sous-dossier)

+0

Cela est inexact de nos jours comme sous-arbre git est maintenant une partie officielle de git –

+0

La différence signifie aussi que si vous avez plusieurs (n) sous-dossiers, vous voulez en faire chacun son propre repo, avec git filter-branch vous devez cloner n fois en premier, avec subtree vous devez git rm n fois. – Qiulang