Solo como una alternativa a la pregunta SO " ¿Cómo fusionar archivos selectivos con git-merge? ", Acabo de encontrar este hilo de GitHub que podría adaptarse mejor para fusionar un subdirectorio completo, basado en git read-tree :
- Mi repositorio =>
cookbooks
Mi directorio de destino del repositorio =>cookbooks/cassandra
- Repositorio remoto =>
infochimps
Fuente de repositorio remoto en la que quiero fusionar cookbooks/cassandra=>infochimps/cookbooks/cassandra
Aquí están los comandos que usé para fusionarlos
- Agrega el repositorio y recógelo
git remote add -f infochimps git: //github.com/infochimps/cluster_chef.git
git merge --allow-unrelated-history -s our --no-commit infochimps / master
(esto realiza una fusión utilizando la estrategia 'nuestro' ( -s ours), que descarta los cambios de la rama de origen. Esto registra el hecho de que infochimps/masterse ha fusionado, sin modificar ningún archivo en la rama de destino)
- Fusionar solo
infochimps/cookbooks/cassandraencassandra
git read-tree --prefix = cassandra / -u infochimps / master: libros de cocina / cassandra
Esto lee el árbol solo para el subdirectorio fuente requerido cookbooks/cassandra, es decir , en la rama ascendente del repositorio fuente .
Tenga en cuenta que el nombre del subdirectorio de destino también debe ser cookbooks/cassandra, o verá:
fatal: Not a valid object name
git commit -m 'fusionando en infochimps cassandra'
Apéndice
Es extraño, [edítame] , pero es posible que el read-treepaso falle así:
error: Entry 'infochimps/cookbooks/cassandra/README' overlaps with 'cookbooks/cassandra/README'. Cannot bind.
... incluso cuando ambos archivos son idénticos . Esto podría ayudar:
git rm -r cassandra
git read-tree --prefix=cassandra/ -u infochimps/master:cookbooks/cassandra
Pero, por supuesto, verifique manualmente que esto hace lo que quiere.