2013-05-17 13 views
6

Załóżmy dwa git repozytoria z niektórych plików w nich:Czy mogę wykonać scalenie poddrzewa z podkatalogu?

ProjectA 
+ a 
+ b 

ProjectB 
+ foo/x 
+ foo/y 
+ bar/z 

Teraz chcę to katalog foo z ProjectB do Projecta.

O ile mi zrozumieć, kiedy robię git subtree add z prefix jest droga, którą powinien mieć w repozytorium odbiorczego, więc kiedy robię

git subtree add --prefix=project_b --squash URL_of_ProjectB 

chciałbym skończyć z

ProjectA 
+ a 
+ b 
+ project_b 
    + foo/x 
    + foo/y 
    + bar/z 

Czy mogę w jakiś sposób określić, że chcę tylko uzyskać foo, aby uzyskać ten układ?

ProjectA 
+ a 
+ b 
+ project_b 
    + x 
    + y 

Odpowiedz

5

Myślę, że nie można tego osiągnąć za pomocą git subtree. Może git filter-branch jest to, czego potrzebujesz:

git remote add b <URL_TO_B> 
git fetch b 
git checkout -b b_master b/master 

przepisać historię b tylko zawierający foo:

git filter-branch --prune-empty --subdirectory-filter foo b_master 

lub korzystania git subtree split

git subtree split -P foo --branch foo 

i dodać go jako jako poddrzewa

git subtree add --prefix=project_b --squash b_master or foo 
+0

Czy zmienia to proces łączenia dalszych zmian w ProjectB na ProjectA? Myślałem, że mój scenariusz jest dokładnie tym, do czego służy 'git subtree', ale jeśli nie jest, co * może * być osiągnięte za jego pomocą? Może mogę zmienić układ mojego pliku, aby lepiej do niego pasował. – AndreKR

+0

Tak, musisz ponownie wykonać krok gałęzi filtra za każdym razem, gdy chcesz scalić zmiany z ProjectB do ProjectA. Strona podręcznika 'git subtree' wyjaśnia polecenie' git split', które jest podobne do polecenia 'branch-branch', które dałem. Ale jeśli możesz zmienić swój układ, może lepiej wyodrębnić wyrażenie 'foo' w oddzielnym repozytorium i dodać je jako podtree do obu projektów. Może to jest lepsze, skoro 'b' jest jakimś rodzajem lib? – gregor

+0

To jest problem, to nie jest tak naprawdę. Gdyby tak było, zrobiłbym go submodułem. Jest to raczej kod, który jest dzielony między dwa projekty ... lista krajów, niektóre szablony itp. – AndreKR

Powiązane problemy