Depende de lo que desee dejar en el depósito después.
Si desea tres ramas, v1.0
, v2.0
, v3.5
, todos con estructura como esta:
/root
/lib
/tools
/src
entonces sí, estoy bastante seguro de que puede hacer eso. Usted va a terminar con algo como esto en términos de estructura de las ramas:
-- A -- B -- Current
|
|--- v1.0
|--- v2.0
|--- v3.5
A
, B
, Current
ser comete te has comprometido ya ha migrado a git, y donde v1.0
, v2.0
y v3.5
son esencialmente "muerto "fin" ramas. Se podría hacer algunas cosas de lujo si se quiere obtener una estructura de ramas más como:
-- v1.0 --- v2.0 --- v3.5 -- A -- B -- Current
Es decir, separada v1.0
, v2.0
y v3.5
en sus propias ramas, entonces rebase v1.0
en v2.0
, v2.0
en v3.5
, y v3.5
en la primera confirmación en la versión actual.
Pero no estoy seguro exactamente de lo que quiere hacer.
¿Hay una manera de separar las 3 versiones en el subdirectorio src en ramas separadas en lugar de mantener el directorio para cada versión?
Sí, estoy bastante seguro de que puede hacerlo. Mi metodología es un poco ... intrincada, lo admitiré, pero aquí va. Por favor,, tenga cuidado y lea las páginas del manual - los siguientes comandos probablemente no lo estropearán todo, pero utilícelo bajo su propio riesgo.
git checkout -b v1.0
- entrar en una nueva sucursal.
Eliminar todo excepto v1.0
. Hay algunas maneras de hacer esto. Esta pregunta tiene algunos métodos para eliminar todo excepto; No podría hacer que funcionen para mí, podría funcionar mejor para ti.
`git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch src/v2.0" --prune-empty -f`
Esto eliminará src/v2.0
y toda la historia asociada de la rama. -f
no es necesario para este filtro; pero git-filter-branch
hace algún tipo de copia de seguridad (lea la página de manual?) y podría escupir errores. Desafiadamente será la segunda vez que intentes git filter-branch
.
Repita esto para eliminar src/v3.5
también.
Esto lo dejará con src/v1.0
. Posiblemente desee cambiar la fuente de src/v1.0
a src
; puede ejecutar git filter-branch --subdirectory-filter
(lea la página man) para obtener una estructura de directorio /v1.0-files
(no contiene nada más que los archivos del subdirectorio v1.0
; ha movido los contenidos de v1.0
a root
), y luego mire los ejemplos en la página man git-filter-branch
(específicamente el ejemplo inferior) para desplazar los archivos a un subdirectorio. Eso podría ser excesivo, y luego necesitaría unir que en una rama que contiene todas las demás cosas que git filter-branch --subdirectory
seleccionó; un simple mv v1.0/* .
podría funcionar, pero luego tendría otro compromiso en su historial. No sé lo que preferirías.
Así que ahora tiene v1.0
en su propia sucursal. ¡Hurra!
Repita para v2.0
y v3.5
.
Me temo que no puedo ver que esto sea más que una historia ... "extraña". Presumiblemente v2.0
tiene, esencialmente, v1.0
+ mejoras; la estructura que he enumerado arriba (tres ramas "sin salida") muestra v2.0
y v3.5
no se basan en las versiones anteriores. No estoy del todo seguro de qué tipo de historia que tiene, si esto es un problema, etc, etc
Porque tienes v1.0
, v2.0
y v3.5
en sus propias pequeñas ramas, puede git merge
ellos o git rebase
, etc, etc , si prefieres un historial con mejor aspecto.
Afortunadamente esto le da un poco de tiempo para pensar; como dije, lea las páginas del manual. :)
¿Tiene historial de confirmaciones asociado con los diferentes directorios de versiones? Cuando migró el repositorio de CVS a git, ¿tiene ahora un historial que desea conservar? Estoy bastante seguro de que puedes dividir esos directorios usando una combinación de 'git filter-branch' y' git merge', pero es difícil de decir con certeza sin saber qué quieres conservar o qué quieres que se vea el repositorio final. me gusta. – simont