Pregunta

Tengo la siguiente configuración del proyecto:

  • Solution A
    • Project 1 (un componente liviano)
    • Project 2 (contiene muchos archivos y depende de Project 1)

Solution A es un solo git repositorio. Luego creé otra solución y descubrí que podía reutilizar e incluso actualizar la funcionalidad de Project 1. Entonces mi segunda solución probablemente se vería así:

  • Solution B
    • Project 1 (¡Debe ser compartido!)
    • Project 3 (depende de Project 1).

Ahora quiero Project 1 para convertirse en un componente compartido. Es decir, cada vez que cambio el código fuente de Project 1 de cualquier solución (A o B), Necesito el otro para actualizar en consecuencia.

Tal vez esto tenga algo que hacer el submódulo característica de git. Sin embargo, la única forma en que pude usarlo es especificar todo Solution A como un submódulo para Solution B. Esto no es realmente lo que quiero idealmente debido al enorme tamaño de Solution A. Solo necesito una pequeña parte para ser un submódulo.

Sé que es posible en SVN y funciona exactamente como he descrito: especifica un directorio dentro de un repositorio externo en el svn:externals propiedad.

¿Algún consejo sobre eso? ¿O tal vez, me estoy perdiendo algo?

¿Fue útil?

Solución

Esto definitivamente está relacionado con submódulos (ver el Naturaleza de los submódulos)

En su caso, la solución ideal sería extraer Project1 de SolutionA Git Repo:
Ver ¿Cómo extraer un subdirectorio GIT y hacer un submódulo con él?.

Pero eso implica reescribir la historia de la solución, que es un problema si ya lo ha publicado y si algunas personas se están retirando de ella.

Usando rama de filtro para el proceso de extracción.

Para reescribir el repositorio para ver como si Project1/ había sido su raíz de proyecto y descartar todas las demás historias:

git filter-branch --subdirectory-filter Project1 -- --all

Por lo tanto, puede, por ejemplo, convertir un subdirectorio de la biblioteca en un repositorio propio. Nota la -- que se separa filter-branch opciones de opciones de revisión y el --all para reescribir todas las ramas y etiquetas.

Luego declarar Project1 como un submódulo en SolutionB:

cd SolutionB
git submodule add /path/to/Project1 Project1

Nota: No use URL locales aquí si planea publicar su SolutionB!

git commit -m "Add submodules Project1"

Otros consejos

Dividir el proyecto 1 a su propio repositorio y hágalo un submódulo de la solución A y la solución B.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top