Jako alternatywa dla pytania SO „ Jak połączyć wybrane pliki z git-merge? ”, Właśnie znalazłem ten wątek GitHub, który mógłby być bardziej przystosowany do scalania całego podkatalogu, opartego na drzewie odczytu git :
- Moje repozytorium =>
cookbooks
katalog docelowy mojego repozytorium =>cookbooks/cassandra
- Zdalne repozytorium =>
infochimps
Zdalne źródło repozytorium, które chcę połączyć z cookbooks/cassandra=>infochimps/cookbooks/cassandra
Oto polecenia, których użyłem do ich scalenia
- Dodaj repozytorium i pobierz je
git remote add -f infochimps git: //github.com/infochimps/cluster_chef.git
git merge --allow-unrelated-histories -s ours --no-commit infochimps / master
(to wykonuje scalanie przy użyciu strategii „nasza” ( -s ours), która odrzuca zmiany z gałęzi źródłowej. Zapisuje fakt infochimps/masterscalenia, bez faktycznej modyfikacji żadnego pliku w gałęzi docelowej)
- Scal tylko
infochimps/cookbooks/cassandrawcassandra
git read-tree --prefix = cassandra / -u infochimps / master: cookbooks / cassandra
Powoduje to odczytanie drzewa tylko dla wymaganego podkatalogu źródłowego, tj. cookbooks/cassandraW górnej gałęzi repozytorium źródłowego .
Zwróć uwagę, że nazwa podkatalogu docelowego również powinna być cookbooks/cassandra, lub zobaczysz:
fatal: Not a valid object name
git commit -m 'scalanie w infochimps cassandra'
Uzupełnienie
To dziwne, [edytuj mnie] - ale read-treekrok może się nie udać w ten sposób:
error: Entry 'infochimps/cookbooks/cassandra/README' overlaps with 'cookbooks/cassandra/README'. Cannot bind.
... nawet jeśli oba pliki są identyczne . To może pomóc:
git rm -r cassandra
git read-tree --prefix=cassandra/ -u infochimps/master:cookbooks/cassandra
Ale oczywiście sprawdź ręcznie, czy robi to, co chcesz.