git trabajando en dos ramas simultáneamente


168

Tengo un proyecto con muchas ramas.

Me gustaría trabajar en varias ramas simultáneamente sin tener que cambiar de un lado a otro git checkout.

¿Hay alguna forma de que pueda hacer eso además de copiar todo el repositorio en otro lugar?



1
Git 2.5+ (Q2 2015) lo admitirá oficialmente con el nuevo comando git checkout --to=<path>. Vea mi respuesta a continuación .
VonC

2
En realidad, el comando será git worktree add <path> [<branch>](Git 2.5 rc2)
VonC

Respuestas:


156

¡Git 2.5+ (Q2 2015) es compatible con esta característica!

Si tiene un repositorio git cool-app, cd a root ( cd cool-app), ejecute git worktree add ../cool-app-feature-A feature/A. Esto comprueba fuera de la rama feature/Aen su propio nuevo directorio dedicado, cool-app-feature-A.

Eso reemplaza una secuencia de comandos anterior contrib/workdir/git-new-workdir, con un mecanismo más robusto donde esos árboles de trabajo "vinculados" se registran realmente en la $GIT_DIR/worktreescarpeta nueva del repositorio principal (para que funcione en cualquier sistema operativo, incluido Windows).

Nuevamente, una vez que haya clonado un repositorio (en una carpeta como /path/to/myrepo), puede agregar árboles de trabajo para diferentes ramas en diferentes rutas independientes ( /path/to/br1, /path/to/br2), mientras tiene esos árboles de trabajo vinculados al historial principal del repositorio (ya no es necesario usar una --git-diropción)

Ver más en "¿ Múltiples directorios de trabajo con Git? ".

Y una vez que haya creado un árbol de trabajo, puede moverlo o eliminarlo (con Git 2.17+, Q2 2018).


2
Esta debería ser la nueva respuesta aceptada, ya que 2.5.X es ahora la versión recomendada, incluso para Windows i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00

40

Eche un vistazo a $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

Un script simple para crear un directorio de trabajo que utiliza enlaces simbólicos para apuntar a un repositorio existente. Esto permite tener diferentes ramas en diferentes directorios de trabajo pero todas desde el mismo repositorio.



2
Sé que esto es viejo, pero ¿podría dar alguna explicación por favor?
dav_i

@dav_i: ¿Te gusta esto ?
Stefan Näwe

@ StefanNäwe Ah, estaba confundido, demasiado temprano en la mañana ... actualicé su respuesta con un enlace.
dav_i


0

Como dijo nuestro amigo VonC hace cinco meses, ahora hay una nueva característica desde la versión 2.5.x que hace el trabajo. git worktree .


¿No es lo mismo que mencioné hace 5 meses en mi respuesta anterior ?
VonC

Ops Ahora me siento terrible. No he prestado la debida atención a eso. Culpa mía.

0

Git soporta múltiples worktree al mismo tiempo. Para más información, ver:

Sin embargo, es muy difícil admitir múltiples worktree con ID. Por ejemplo, esta es una solicitud de mejora en JGet (eclipse ID) para admitir worktree.

Por lo tanto, debe administrar el proyecto manualmente (línea de comando) con muchos problemas o trabajar con un solo árbol de trabajo en un IDE.


A partir de ahora, esta respuesta no es correcta. Por favor actualice la respuesta.
narendra-choudhary

-2

En realidad, no, ya que Git solo admite tener una copia de trabajo de los datos del repositorio dentro del directorio del repositorio.

Si desea confirmar / extraer en el mismo repositorio con dos copias de trabajo diferentes, puede crear un repositorio desnudo y clonarlo en dos copias de trabajo .

Cada vez que haya terminado algo, simplemente empuje al repositorio desnudo "principal" .

Algunos consejos:

man git-clone

git clone --bare


3
"Git solo admite tener una copia de trabajo de los datos del repositorio" -1 No es cierto, vea la respuesta al respecto git-new-workdir.
sleske

Esa es una buena idea. Solo clónalo dos veces.
Serge Vinogradoff
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.