¿Cómo puedo agregar una carpeta específica cuando uso el subtree de git?

Tengo un proyecto Ionic complicado que estoy desarrollando. Muchos de los componentes y proveedores que estoy desarrollando son generics y se pueden usar en otros proyectos que mi compañía está haciendo. Esto es común en el desarrollo de software. Este es el flujo de trabajo de Git que se me ocurrió (este gráfico muestra las twigs):

my-company-library-repo ---- |_ component 1 feature branch |_ company component 1 feature branch testbed |_ component 2 feature branch 

El código del componente final (solo un file .ts o .js ) desarrollado en el banco de testings se envía a la twig de características del componente. El código del banco de testings permanece en la twig del banco de testings. También en la twig de características van los documentos que pueden acompañar al componente.

Ahora en el repository de aplicaciones agrego la twig de características como un subtree usando este command:

 git subtree add -P <destination-dir/feature> --squash <my-company-library-repo-url> <feature-branch-name> 

Y eso me dio lo siguiente (este gráfico muestra la estructura de la carpeta):

 my-app-repo------- |_ company-library-feature-subtree 

Esto solo debe contener los .ts .js o .ts y sus documentos en su subcarpeta. Lo consigo solo para trabajar en parte. Cuando extrae el subtree, solo extrae el componente y sus files de doc, pero los files se insertan en una list muy larga de subdirectorys como este:

 my-app-repo/src/feature-branch/feature/src/app/providers/... 

Esto hace que sea difícil usar la biblioteca porque los files se colocan en muchos directorys (directorys no utilizados) en profundidad.

Entonces, cuando envío mis 2 files de la twig de testing de características a la twig de características, ¿cómo no puedo tirar esa estructura de directory completa con ellos?

Investigué la solución de Scott Weldon. Funcionaría, pero parece que el subtree de git divide el directory en su propio repository. Al less eso es lo que obtuve al leer páginas y libros sobre hombres y qué no. (Si me equivoco, que bien puede ser el caso, hágamelo saber). Eso no es lo que quería hacer.

Sí encontré, sin embargo, la solución a mi problema. Esto es lo que hice usando la estrategia de combinación de subtreees de Git (en lugar del command GIT SUBTREE) en mi proyecto:

 $ git remote add my-library <my-library-url> $ git fetch my-library $ git checkout -b my-library-branch my-library/master $ git checkout master $ git read-tree --prefix=<desinetworking/library/dir> -u my-library-branch $ git commit -m "Merged library project as subdirectory" $ git push 

Esto funcionó muy bien. Tengo mi biblioteca en una subcarpeta razonable. Es cierto que tengo que llevar toda la biblioteca, no solo un pedazo como un componente personalizado o proveedor, pero eso está bien en este caso.

Antes de agregar el subtree a my-app-repo , divide un subtree de my-company-library-repo :

 # In my-company-library-repo git subtree split -P src/app/providers/... -b feature-new feature 

Esto creará una nueva historia con los contenidos de src/app/providers/... en la raíz del repository, comenzando en la twig de feature , y creando la feature-new twigs feature-new al final de este historial.

A continuación, agregue esa nueva twig como un subtree a my-app-repo :

 # In my-app-repo git subtree add -P <destination-dir/feature> --squash <my-company-library-repo> feature-new 

Ahora tendrá los contenidos de src/app/providers/... en <destination-dir/feature> .

No mencionó si repetirá este process regularmente, pero eso también es posible. Desde la página man de git-subtree :

Se garantiza que las divisiones repetidas de exactamente el mismo historial sean idénticas (es decir, que produzcan los mismos identificadores de confirmación). Debido a esto, si agrega nuevas confirmaciones y luego vuelve a dividir, las nuevas confirmaciones se adjuntarán como confirmaciones sobre el historial que generó la última vez, por lo que ' git merge ' y amigos funcionarán como se espera.