2012-04-02 11 views
8

Me gustaría crear una nueva sucursal en mi repositorio que solo incluya archivos de un directorio específico en el maestro y su historial luego presione esa rama a un nuevo repositorio.Git crea una nueva sucursal con solo un directorio específico y su historial y luego ingresa al nuevo repositorio

... o algo equivalente, por ejemplo, puede ser posible enviar un directorio a un nuevo repositorio a un repositorio nuevo sin crear una bifurcación.

Hasta ahora creo que lo siguiente funcionará, pero me pregunto si hay una forma más simplificada.

1 - Crear una rama de vacío:

git symbolic-ref HEAD refs/heads/<new-branch> 
rm .git/index 
git clean -fdx 

2 - Pedido un directorio de maestro:

git checkout master <paths> ... 
git add <paths> ... 
git commit 

3 - rama de Push to nuevo mando a distancia:

git push -u <remote-URL> <new-branch> 

4 - Luego, en el nuevo repositorio, fusione la sucursal con el maestro:

git checkout -t origin/<new-branch> 
git checkout master 
git merge <new-branch> 
git branch -d afterimage 
git branch -d -r afterimage 

Estoy intentando hacer algo equivalente a Detach subdirectory into separate Git repository, pero sin el desorden git filter-branch.

+3

... pero en realidad * necesita * usar 'git filter-branch' para extraer el historial del subdirectorio. Sin eso, solo tienes archivos. –

+1

Realmente no veo el interés de no seguir publicando el enlace. Hacerlo de la manera que propones funciona, pero es fuerza bruta, y no limpiará tu historial ni tus datos de repositorio. – CharlesB

Respuesta

13

¿Por qué no quieres usar git filter-branch? Ha sido creado específicamente para tareas como la que desea.

git branch subdir_branch HEAD 
git filter-branch --subdirectory-filter dir/to/filter -- subdir_branch 
git push git://.../new_repo.git subdir_branch:master 

Esto le dará sólo el contenido de su dir/to/filter en un nuevo repositorio, incluyendo toda su historia y nada más. Como solo filtrará la rama recién creada, el resto de su repositorio permanecerá intacto. Puede borrar el subdir_branch después.

Cuestiones relacionadas