2011-11-27 17 views
6

Tengo un repositorio Git con dos ramas: master y redesign. La rama redesign fue creado a partir master y master no se ha tocado desde entonces:Crear un nuevo repositorio git desde una sucursal local existente

master 
...|--m50--\ 
      \--m51--|--m52--|--m53-- redesign 

la rama redesign ha evolucionado tanto que me gustaría crear un nuevo repositorio entero de ella, teniendo el primer commit de redesign como el inicial confirmar sobre el nuevo repositorio y el olvido de la historia previa heredada de master:

master 
...|--m50-- 

redesign 
--r1--|--r2--|--r3-- 

¿Es esto posible con Git? Hay un related question a esto, pero su objetivo es usar un directorio, no una rama.

Gracias!

Respuesta

7

Usted podría:

  • pago y envío el envío de datos que desea para la "raíz" de su nueva operación
  • copiar todos los archivos al nuevo directorio (excepto el directorio .git)
  • retirar de su redesign rama
  • git format-patch master..redesign
  • mover todos los archivos de revisión generados en algún lugar práctico

luego ir a su nuevo directorio y:

$ git init 
$ git add .   # make sure your .gitignore is in place though 
$ git commit -m"..." 
$ git am /path/to/patches/*.patch 
+0

Al ejecutar 'git am "limpia" ... 'aparecieron varios mensajes de error como estos:' /Users/elitalon/Sites/exigo/.git/rebase-apply/patch:447: espacio en blanco al final' y 'error: cake/console/cake.bat: el parche no aplicar'. ¿Qué puede estar pasando? – elitalon

+0

Utilice un directorio separado donde almacene * solo * los archivos de parche generados por 'git format-patch'. Lo que intentas aplicar allí no se parece a nada que debas aplicar. – Mat

+0

Olvídalo. Utilicé la bandera '--whitespace = fix' y todo funcionó como un amuleto. ¡Gracias! – elitalon

1

En primer lugar, copiar o clonar su repositorio git.

A continuación, descubra el hash de su nueva confirmación de raíz (m51 en el diagrama). Coloque su hash de confirmación en el archivo .git/info/grafts, luego ejecute git filter-branch --all. Una vez que haya verificado la operación exitosa, puede eliminar los refs de copia de seguridad original/* (o volver a clonar el repositorio).

Tenga en cuenta que esto creará nuevos hashes de confirmación para todas las confirmaciones, por lo que debe tener cuidado con el historial ya publicado.

0

Crea tu nuevo repositorio, entonces:

$ git add remote newrepo <path to newrepo> 
$ git checkout redesign 
$ git checkout --orphan clean 
# The branch is empty, but the files from the original branch are staged for commit. 
$ git commit -m"clean" 
$ git push newrepo clean:master 

Nota: Si desea conservar la historia (o no le importa), omitir la creación de la

Cuestiones relacionadas