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:

  1. 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
    
  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
    
  3. 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
    
  4. 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 .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow