tag - División de un conjunto de archivos dentro de un repositorio git en su propio repositorio, preservando el historial relevante
ignorar archivos git (1)
Posible duplicado:
¿Cómo dividir un repositorio de git y preservar los subdirectorios?
En un momento, agregué mi código a un repositorio git existente, y me he comprometido bastante desde entonces, mientras que el otro desarrollador se ha comprometido con los otros archivos existentes en el repositorio. Ahora quiero dividir mi código en su propio repositorio, pero conservar todo el historial de cambios para mis archivos particulares.
Al leer lo que otros han hecho para dividir el código, estaba buscando en filter-branch
y haciendo --index-filter
o --tree-filter
con comandos rm
para los archivos que no me interesan. No quiero usar --subdirectory-filter
ya que no es apropiado para el subdirector que sostiene que mi código es el dir superior (también compartimos un subdirectorio). Para complicar las cosas, algunos de los archivos del repositorio original se han movido un poco con el tiempo, y hay algunos archivos que se crearon y luego se eliminaron. Esto hace que el diseño de una lista rm sea un poco ... desafiante.
Estoy buscando una forma de filtrar todo / except / una lista de archivos / directorios. ¿Alguien sabe de una manera de hacer esto?
Solo para cerrar el ciclo de esto para que aparezca como respondido.
Usando index-filter
o tree-filter
y luego aplicando reverse logic como git ls-tree
conectado a (multiple) grep -v
''s conectado a xargs
para git rm
, puedes quitar todo lo que no concuerde con un conjunto estrecho de archivos nombres / directorios. Aquí está el comando que solía dividir mis archivos particulares:
git filter-branch /
--prune-empty /
--index-filter ''
git ls-tree -z -r --name-only --full-tree $GIT_COMMIT /
| grep -z -v "^src/pyfedpkg$" /
| grep -z -v "^src/fedpkg" /
| grep -z -v "^git-changelog" /
| xargs -0 -r git rm --cached -r
'' /
-- /
--all