2011-02-24 11 views
18

Soy bastante nuevo en git, y estoy tratando de configurar mi repositorio de la manera correcta.Git - Almacenar sucursales en directorios locales separados

Básicamente mi aplicación es una especie de plataforma, por lo que las implementaciones de esta plataforma se basan en la rama principal, pero tienen algunas pequeñas modificaciones a esos archivos, así como algunos archivos adicionales.

Intenté configurarlo como sucursales, así que tengo una rama master, implementation_1 y implementation_2.

Pero por lo que puedo decir, eso significaría que localmente todas las ramas se almacenan en un directorio, con su separación solo a través de git.

Lo que me gustaría es tener 3 directorios locales, master, imp_1 y imp_2. Si realizo un cambio en uno de los archivos principales en el directorio imp_1, deseo poder combinar ese cambio en la rama master y de allí en imp_2.

Estoy empezando a pensar que estos deben ser 3 repositorios diferentes (las implementaciones son las horquillas del núcleo). ¿Es ese el camino a seguir? En ese caso, ¿cómo manejaría el escenario anterior?

+1

'git-new-workdir' podría hacer el truco (Ver http://thejspr.com/blog/work-on-multiple-branches-with-git-workdir/) – user456584

Respuesta

17

Branch son ciudadanos de primera clase en Git, lo que significa que no son "emulado" como ramas como en VCS mayores (SVN, CVS, ...)

Si realmente necesita tres directorios diferentes, ya que desea tienen tres entorno de desarrollo distinto, hacer 3 clones:

  • uno en un directorio llamado master
  • uno en un directorio llamado imp_1
  • uno en un directorio llamado imp_2

Pero para comprender realmente las ramas, puede leer "Pros and cons of different branching models in DVCS".


O, ya que Git 2.5 (julio de 2015, 4 años después de la pregunta de la OP), como lo detallado en Multiple working directories with Git?, utilice git worktree.

Eso será un clon, varias carpetas (una por rama).
Con Git 2.7+, puede luego una lista de las carpetas:

$ git worktree list 
/path/to/bare-source   (bare) 
/path/to/linked-worktree  abcd1234 [master] 
/path/to/other-linked-worktree 1234abc (detached HEAD) 
+0

¿Hay algún pros y contras para 3 diferentes directorios vs. mantener 3 sucursales en el mismo repositorio local? –

+3

@ lisérgico-ácido, el principal pro es que puede trabajar en cada rama en paralelo al mismo tiempo, ya que cada rama se clona en su propio directorio. – VonC

+0

Sí, pero ¿hay algún problema al trabajar con un único directorio? por ejemplo, digamos que hago una rama experimental para probar algunas cosas, y tengo algunos archivos no comprometidos en el árbol de trabajo, ¿puedo consultar otra rama para continuar con la línea principal de trabajo? (Tal vez este no es el mejor ejemplo, pero estoy tratando de ver si algunas cosas pueden limitar el uso de un solo directorio). –

6

puede crear tres clones de su repositorio y combinar entre ellos. los tenedores en git no son diferentes de las ramas de la forma en que se fusionan y tal. usted puede hacer fácilmente:

git merge ../master 
git pull ../imp_2 

cuando se clona localmente git HardLink sus objetos e incluso ahorrar espacio en disco

1

Usted puede hacer esto utilizando git worktree que era introduced in Git 2.5, circa July 2015.

git clone -b master <repo> master 
cd master 

# checking out implementation_1 in ../imp_1 
git worktree add ../imp_1 implementation_1 

# creating branch implementation_2 at master~2 as you check it out in ../imp2: 
git worktree add -b implementation_2 ../imp_2 master~2 

Y voilà! Ya terminaste

Con esta configuración, solo tendrá una carpeta .git (en master/.git). Tenga en cuenta que cualquier rama puede ser desprotegida en un solo árbol de trabajo a la vez.

Cuestiones relacionadas