Pregunta Extrae parte de un repositorio git?


Asuma que mi repositorio de git tiene la siguiente estructura:

/.git
/Project
/Project/SubProject-0
/Project/SubProject-1
/Project/SubProject-2

y el repositorio tiene bastante commits. Ahora uno de los subproyectos (SubProject-0) crece bastante grande, y quiero sacar SubProject-0 y configurarlo como un proyecto independiente. ¿Es posible extraer todo el historial de compromiso que involucra a SubProject-0 desde el repositorio parent git y moverlo a uno nuevo?


32
2018-03-29 13:38


origen


Respuestas:


Ver http://git-scm.com/docs/git-filter-branch

Creo que necesitas algo como

git filter-branch --subdirectory-filter Project/SubProject-0 --prune-empty -- --all

en un clon del repositorio.


37
2018-03-29 13:41



Necesitaba hacer algo similar, pero quería mover esencialmente un subproyecto de un repositorio a otro. Lo que hice en cambio fue usar fetch, ya que puede capturar objetos de cualquier fuente.

Entonces, básicamente, creé una nueva rama, eliminé las cosas innecesarias en esa rama, luego usé git fetch para sacar la rama de un repositorio a otro. Una vez que tuve los objetos, la fusión hizo el truco.

P.ej.

En el repositorio que tiene las cosas originales:

    git checkout -b temp master
    git rm -r Unneeded_stuff
    git commit -m 'pruning'

Luego puede obtener esa rama de un repositorio en uno completamente diferente (no relacionado):

    cd /path/to/other/repository
    git fetch /path/to/source/repo temp:temp

donde temp: temp significa "obtener temperatura en la fuente y guardarla como temperatura aquí". Desde allí, puedes fusionar el resultado en tu maestro.

    git merge temp

A continuación, puede eliminar las ramas temporales, ya que en el primer caso no es algo que desee fusionar con el repositorio original, y en el segundo caso lo ha fusionado.

Estoy seguro de que estos pasos se pueden comprimir un poco, pero este conjunto parece agradable y claro.


1
2018-06-28 05:46