¿Cómo trasplantar la sucursal de un repository a uno nuevo sin historial?

Tengo un repository existente que ha alcanzado cierto límite de almacenamiento.

Sin embargo, ahora quiero trasplantar varias sucursales del antiguo al nuevo repository, sin el bagaje de la historia anterior (ya que el historial de git es el culpable de ese problema de almacenamiento)

¿Hay algún command git o secuencia de commands que pueda ayudarme a hacer eso?

p.ej

cd old_repo/ git checkout old_repo_old_branch git remote add origin new_repo git push origin new_repo_new_branch ?? // Does this preserve the history 

Editar: Gracias de antemano, perdón por mi rudeza.

git push origen new_repo_new_branch ?? // Esto preserva la historia

Sí, new_repo_new_branch preserva el historial.

Puede --orphan una nueva sucursal con la bandera --orphan . Esto borrará todos los historiales de commit previos.

 $ cd old_repo/ $ git checkout old_repo_old_branch $ git checkout --orphan new-branch # checkout a new branch (say, new-branch) cleaning all previous commit histories $ git log # see commit history is empty $ git remote add newrepo <new-repo-url> # add a new remote (say, newrepo) with new-repo-url $ git push -u newrepo HEAD # push to newrepo/new-branch 

Puedes hacer eso con un buen viejo cp bastante fácil:

 # create a new repo git init new_repo # fetch the content from the old repo cd old_repo git archive --format=tar master > ../new_repo/data.tar # unpack the old content and... cd ../new_repo tar xf data.tar # add it to the new repo git add . git commit -m 'clean slate' 

Repitiendo para otras twigs, comience en new_repo :

 git checkout --orphan branch-foo cd ../old-repo git archive --format=tar branch-foo > ../new_repo/data.tar # rinse and repeat like above 

Supongo que depende exactamente de lo que tengas en mente cuando hablas de dejar atrás el equipaje de la historia, pero creo que la solución más simple podría ser un clon superficial.

Si quieres, por ejemplo, los 5 commits más recientes en cada twig, podrías hacer

 git clone --depth=5 --no-single-branch url-for-old-repo 

(Tenga en count que la opción de depth no funcionará si solo proporciona una ruta de file local, sino que debe usar una URL que comience por el file: cambio, si el origen es local).

Esto tiene algunas ventajas sobre los enfoques que otros han sugerido. Su nuevo repository contiene las mismas confirmaciones (con su ID SHA1 original) que estaban en el repository original, y su desarrollo continuo, por lo tanto, tiene una connection rastreable con el historial anterior, aunque no esté en el repository nuevo. (Por supuesto, para realizar un seguimiento de la historia anterior, debe mirar el repository antiguo, pero al less se puede hacer).

Si necesita escoger y elegir twigs, o establecer diferentes profundidades para diferentes twigs, o asegurarse de que la profundidad sea suficiente para capturar puntos de ramificación … todo esto se puede hacer, aunque con más trabajo.