2010-02-26 10 views
5

Un equipo en la empresa para la que trabajo tiene el siguiente problema. Desarrollan una aplicación, que tendrá diferentes construcciones (por ejemplo, diseño diferente dependiendo del cliente). por lo que tienen algún código compartido entre compilaciones y algunas específicas para compilar. P.ej. primera construcción tiene (ejemplo no tiene sentido acerca de los archivos, es sólo para entender el problema, no sé exactamente qué código es diferente)git + archivos parcialmente compartidos entre sucursales/repositorios. ¿Es posible?

/src/class1.java 
/src/class2.java 
/res/image1.png 
/res/image2.png 

segundo proyecto contiene

/src/class1.java 
/src/class3.java 
/res/image1.png 
/res/image3.png 

como se ve, tanto tiene class1.java y image1.png. Todo lo demás es diferente. El proyecto es mucho más complejo, por supuesto, así que para contener todo en un proyecto no es cómodo ... Pero también para hacer diferentes ramas y cometer el mismo código para todos ellos no es cómodo ...

Probablemente elegí dirección equivocada pensando en este problema, pero solo eché un vistazo a git (usamos svn), y permite repositorios separados. La pregunta es: ¿es posible crear diferentes ramas en git, pero decir que "estos archivos deben compartirse entre ellos" y que otros archivos deben estar solo en esas ramas. Luego, cuando el desarrollador se compromete con class1.java, git lo sincroniza en todas las sucursales/repositorios, etc. ¿Tal vez haya otra solución que pueda ser tomada fácilmente?

Respuesta

3

es posible hacer diferentes ramas en git, pero dígale que "estos archivos deben ser compartidos entre ellos" y otros archivos deben estar solo en esas ramas.

Err ... no.
Cuando se crea una bifurcación, eso significa que cualquier futuro compromiso de cualquier archivo se grabará dentro de esa nueva bifurcación.
Así que si usted no toca a class1.java, su compromiso seguirá siendo la referencia por la rama original de (decir 'common '), mientras que class2.java se habrán eliminado, y class3.java añadido, todo en la rama' project1'.
Cualquiera que creara una rama project2 desde common reutilizaría en efecto class1.java.

Luego, cuando se compromete desarrollador Git class1.java sincroniza en todas las sucursales/repositorias etc

Err ... no bis: el desarrollador tendría que recoger la cereza-class1.java y fusionar a la rama 'common', y luego rebase todas las otras ramas en la parte superior de common para ver class1.java evolución.

La verdadera solución sería git submodules (ver here for more on the way submodules are updated), pero eso implica:

  • una reorganización del código:
 
    project 
     src 
     class3.java 
         # here is a full git repo 
     common   # = referenced within the 'project' repo 
         # as submodule 
     src 
      class1.java 
  • todavía un empuje a la 'común' Git repo siempre que se modifique class1.java, y una actualización de submódulos git en todas las otras sucursales/repos que necesiten la nueva evolución 'común'.
+0

Gracias, VonC! Parece prometedor, excepto por una cosa: la reorganización del proyecto, pero esa será otra, y espero que también con la solución :) en pocas palabras: a los desarrolladores de ese proyecto les gusta que Eclipse cree compilación para Android automáticamente ... pero creo podemos escribir nuestra propia estructura ant o maven que hará lo mismo, pero sabiendo que las fuentes están en dos directorios ... Pero, en general, se ve bien, solo tengo que probarlo y si hay alguna pregunta, las publicaré aquí;) merci bien !!! – Maxym

Cuestiones relacionadas