Git: crear submodules Git fuera del repository existente y reflejar los cambios principales en el repository hijo

Tenga en count que soy nuevo en Git.

Tengo dos repositorys:

  1. Libgdx REPO
  2. gdx-sqlite REPO

El repository principal es Libgdx REPO y todo mi trabajo va a este repository, principalmente en el proyecto gdx-sqlite . Como quería que el proyecto gdx-sqlite apareciera como un repository separado, lo que hice fue:

  1. Creó un nuevo repository en GitHub (gdx-sqlite REPO)
  2. Creé un repository local (nested dentro del repository libgdx local) en mi máquina
  3. Se aplicó todo el código del repository nested local a gdx-sqlite remoto REPO

Esto resultó en que todo salió mal y asumí que el repository nested era el principal culpable. Más tarde eliminé el repository nested local y volví a una confirmación anterior. Descubrí que una solución para este tipo de problema es Git Submodules, pero estoy completamente perdido en lo que bash lograr, que es el siguiente.

Ahora, ¿cómo se supone que lograr esto a la luz de lo siguiente?

  1. Quiero crear un nuevo repository ubicado en "gdx-sqlite REPO" que siempre debe reflejar los cambios que realizo en el proyecto ubicado en " https://github.com/mrafayaleem/libgdx/tree/master/extensions/gdx-sqlite "
  2. Cualquiera que envíe una request de extracción a "gdx-sqlite REPO" debería ser capaz de extraer todas las dependencies (es decir, el REPO libgdx completo) para que pueda trabajar en esa extensión de inmediato.

¿Cómo puede hacerse esto?

Tienes razón. El buen enfoque para este tipo de situación es usar submodules de Git . Esta es la mejor forma de manejar las dependencies en Git.

Como gdx-sqlite es una extensión de su proyecto principal Libgdx , puede hacerlo de esta manera para agregarlo como un submodule:

git clone [email protected]:mrafayaleem/libgdx.git libgdx cd libgdx # remove the old directory rm -rf extensions/gdx-sqlite git add extensions/gdx-sqlite # add the submodule (note the read-only URL) git submodule add git://github.com:mrafayaleem/gdx-sqlite.git extensions/gdx-sqlite # commit the changes git commit -m 'Add submodule for the gdx-sqlite extension' 

Luego, para clonar su proyecto (y todos sus submodules):

 git clone --recursive git://github.com/mrafayaleem/libgdx.git 

O para usted (con acceso de escritura):

 git clone --recursive [email protected]:mrafayaleem/libgdx.git 

Deberías echarle un vistazo al subtree de git . Esto le permite agregar uno o más repositorys de git como subtreees.

Uno de los inconvenientes es que debes ser cariñoso con tus compromisos. Si realiza varios cambios con files en diferentes treees secundarios, entonces todos los repositorys tendrán esta confirmación en su historial. Esto puede ser desagradable si intenta especificar un cambio en un repository y no puede encontrar el file mencionado en el logging porque el file nunca perteneció a este repository. Una solución es dividir los commits en los diferentes repositorys.

Esto funcionó para mí:

 git ls-files --stage | grep $160000 

Basado en este gran artículo: http://www.speirs.org/blog/2009/5/11/understanding-git-submodules.html