Git
Áreas de trabajo
Buscar..
Sintaxis
- git worktree add [-f] [--detach] [--checkout] [-b <new-branch>] <path> [<branch>]
- git worktree prune [-n] [-v] [--expire <expire>]
- lista de worktree git [--porcelain]
Parámetros
Parámetro | Detalles |
---|---|
-f --force | De forma predeterminada, agregar se niega a crear un nuevo árbol de trabajo cuando <branch> ya está desprotegido por otro árbol de trabajo. Esta opción anula ese resguardo. |
-b <new-branch> -B <new-branch> | Con add, cree una nueva rama llamada <new-branch> comenzando en <branch> , y extraiga <new-branch> en el nuevo árbol de trabajo. Si se omite <branch> , el valor predeterminado es HEAD . De forma predeterminada, -b niega a crear una nueva rama si ya existe. -B anula esta salvaguardia, restableciendo <new-branch> a <branch> . |
--despegar | Con add, separar HEAD en el nuevo árbol de trabajo. |
- [no-] pago | De forma predeterminada, agregue --no-checkout out <branch> , sin embargo, --no-checkout puede usarse para suprimir el checkout con el fin de realizar personalizaciones, como configurar el checkout disperso. |
-n --dry-run | Con las ciruelas, no quites nada; sólo informe lo que eliminaría. |
--porcelana | Con la lista, salida en un formato fácil de analizar para los scripts. Este formato se mantendrá estable en todas las versiones de Git e independientemente de la configuración del usuario. |
-v --verbose | Con las ciruelas pasas, reportar todas las eliminaciones. |
--expira <time> | Con la poda, solo caducan los árboles de trabajo no utilizados más antiguos que <time> . |
Observaciones
Consulte la documentación oficial para obtener más información: https://git-scm.com/docs/git-worktree .
Usando un worktree
Estás justo en el medio de trabajar en una nueva función, y tu jefe viene exigiéndote que arregles algo de inmediato. Por lo general, es posible que desee utilizar git stash
para almacenar sus cambios temporalmente. Sin embargo, en este punto, su árbol de trabajo se encuentra en un estado de desorden (con archivos nuevos, movidos y eliminados, y otras partes y pedazos esparcidos alrededor) y no desea perturbar su progreso.
Al agregar un árbol de trabajo, usted crea un árbol de trabajo temporal vinculado para hacer la corrección de emergencia, lo elimina cuando termina y luego reanuda su sesión de codificación anterior:
$ git worktree add -b emergency-fix ../temp master
$ pushd ../temp
# ... work work work ...
$ git commit -a -m 'emergency fix for boss'
$ popd
$ rm -rf ../temp
$ git worktree prune
NOTA: En este ejemplo, el arreglo aún se encuentra en la rama de arreglos de emergencia. En este punto, es probable que desee git merge
o git format-patch
y luego eliminar la rama de reparación de emergencia.
Moviendo un worktree
Actualmente (a partir de la versión 2.11.0) no hay una funcionalidad integrada para mover un árbol de trabajo ya existente. Esto está listado como un error oficial (consulte https://git-scm.com/docs/git-worktree#_bugs) .
Para evitar esta limitación, es posible realizar operaciones manuales directamente en los archivos de referencia .git
.
En este ejemplo, la copia principal del repositorio está viviendo en /home/user/project-main
y el árbol de trabajo secundario está ubicado en /home/user/project-1
y queremos moverlo a /home/user/project-2
.
No ejecute ningún comando git entre estos pasos, de lo contrario, el recolector de basura podría activarse y las referencias al árbol secundario podrían perderse. Realice estos pasos desde el principio hasta el final sin interrupción:
Cambie el archivo
.git
del árbol de trabajo para que apunte a la nueva ubicación dentro del árbol principal. El archivo/home/user/project-1/.git
ahora debe contener lo siguiente:gitdir: /home/user/project-main/.git/worktrees/project-2
Cambie el nombre del árbol de trabajo dentro del directorio
.git
del proyecto principal moviendo el directorio del árbol de trabajo que existe allí:$ mv /home/user/project-main/.git/worktrees/project-1 /home/user/project-main/.git/worktrees/project-2
Cambie la referencia dentro de
/home/user/project-main/.git/worktrees/project-2/gitdir
para que apunte a la nueva ubicación. En este ejemplo, el archivo tendría los siguientes contenidos:/home/user/project-2/.git
Finalmente, mueva su árbol de trabajo a la nueva ubicación:
$ mv /home/user/project-1 /home/user/project-2
Si ha hecho todo correctamente, la lista de los árboles de trabajo existentes debe referirse a la nueva ubicación:
$ git worktree list
/home/user/project-main 23f78ad [master]
/home/user/project-2 78ac3f3 [branch-name]
Ahora también debería ser seguro ejecutar git worktree prune
.