2011-07-06 8 views
5

Estamos migrando a git. Tenemos una gran cantidad de módulos que componen nuestros productos, algunos de ellos se comparten entre productos. El producto está representado por un repositorio super "fina" (SSH: //server/product.git) que sólo contiene submódulos:Cómo trabajar con submódulos y estrategias git repositorio git

[submodule "module1"] 
path=module1 
url=ssh://server/product/module1.git 
[submodule "module2"] 
path=module2 
url=ssh://server/product/module2.git 
... 

que puede clonar el repositorio super y trabajar con los submódulos y se comprometan ellos, y luego comprometer los submódulos al super repositorio.

El problema surge cuando quiero presentar otro nivel. Hay dos escenarios básicos (esto puede combinan para hacer configuraciones más complejas, pero nada debe ser una combinación de estos):

  1. Como desarrollador, me clonar un repositorio central y el trabajo. Luego, deseo enviar mi código a nuestro servidor de integración continua antes de fusionar mis cambios en el repositorio central. Dejé que el servidor de IC clonara mi repositorio. Esto no funciona, el servidor de CI clonará mi superrepo y luego clonará los submódulos desde la ubicación central del repositorio (ya que eso es lo que dice en .gitmodules).

  2. Como equipo queremos tener un repositorio de integración que trabajamos para antes de que, al final de una carrera de velocidad, se funden nuestro código al repositorio central. Esto falla, por la misma razón.

he intentado especificar las direcciones URL relativas para los submódulos, pero esto no funciona, tampoco, ya que cuando clonar el segundo nivel en el tercer nivel de las direcciones URL relativas se resuelven con respecto a la ubicación del depósito de segundo nivel, pero la las ubicaciones de los submódulos de segundo nivel están dentro del super repositorio de segundo nivel.

¿Puedo tener ambos? Submódulos Git y estructura de repositorio n-tier?

+0

Ver la solución aquí: http://stackoverflow.com/questions/6031494/git-submodules-and-ssh-access – Cybot

Respuesta

0

enlaces relativos no funcionan en los submódulos. Usa gitolita para albergar todos tus repositorios. Tu estructura funcionará entonces.

Otras direcciones URL también tuvieron problemas. Ejemplos de esto serían una url como ..\someotherrepo o \\servername\reponame o incluso file:///\\server\... para un submódulo.

+0

Leo la breve descripción de gitolite, pero no veo cómo se aborda mi caso de uso. Se encarga de la autenticación y la autorización, pero no tengo ese problema. Un ejemplo simple o un puntero a la documentación relevante ayudaría. – simon

+0

Gitolite se encargaría de las cosas de ssh y te proporcionaría direcciones URL geniales. Gitolite se ejecuta en un servidor vSphere pequeño vm ha hecho cargas para este y otros problemas. Las URL se convierten en 'gitolite @ gitserver: somerepo.git' y no he tenido problemas con los submódulos y esa forma de URL. Es lo que resolvió el mismo problema para mí, así que lo sugerí aquí. Supongo que puedes esperar y ver si surgen otras respuestas o saltar al canal #git irc? –

0

Si he entendido bien, que está queriendo tener submódulos git dentro de otros submódulos, y ser capaz de revisar el repositorio de nivel superior y tienen todas las n capas de submódulos anidados ser verificado de forma correcta?

Nunca he hecho esto yo solo, pero puede encontrar Git submodule inside of a submodule (nested submodules) una buena lectura.

+0

No del todo. Quiero ser capaz de clonar el clon y obtener todos los submódulos clonados correctamente también. – simon

Cuestiones relacionadas