¿Cómo puedo configurar el directory de trabajo y el repository local en diferentes unidades?

En Git, ¿cómo puedo configurar el directory de trabajo y el repository local en diferentes unidades? El motivo es hacer una copy de security del código en cada confirmación local.

Empleamos un model de gatekeeper en el repository "maestro", por lo que no puedo enviar cualquier basura vieja en sentido ascendente, pero me gustaría asegurarme de que cualquier basura vieja se haga una copy de security cada vez que realizo una confirmación local.

Use la bandera de git init --separate-git-dir

El command git init tiene una bandera para eso:

--separate-git-dir=<git dir>

En lugar de inicializar el repository como directory de $GIT_DIR o ./.git/ , cree un file de text que contenga la ruta al repository real. Este file actúa como un enlace simbólico de Git agnóstico del sistema de files al repository.

Ejemplo

Para este ejemplo, supongamos que /Volumes/My_USB/ es la ruta a una unidad USB. ( /Volumes es específico para Mac OS, pero, aparte de esta ruta, este ejemplo se traduce a otros sistemas operativos de manera directa).

Para inicializar un repository de Git

  • cuyo tree de trabajo es el directory actual,
  • cuyo "directory git" es /Volumes/My_USB/projectA_gitdir ,

simplemente ejecuta

 git init --separate-git-dir="/Volumes/My_USB/projectA_gitdir" 

Para arreglar ideas,

  • inspeccionar el contenido del file .git :

     $ cat .git gitdir: /Volumes/My_USB/projectA_gitdir 

    Como puede ver, es solo un file de text que contiene la ruta al directory git de su repository.

  • inspeccionar la configuration de su repository local, ejecutando

     $ git config --local --list 

    Debería notar una línea que normalmente no está presente cuando un repository se ha inicializado sin el --separate-git-dir :

     core.worktree=<pwd> 

    donde <pwd> es la ruta al directory actual.

  • inspeccionar los contenidos del directory git; si todo salió bien, se debe haber creado una carpeta llamada projectA_gitdir en la unidad USB y se debe llenar con todo lo que normalmente entra en la carpeta .git :

     $ ls /Volumes/My_USB/projectA_gitdir HEAD description info refs config hooks objects 

    Todo bien 🙂

Por supuesto, solo podrá ejecutar los commands de Git en este repository si se puede acceder al disco. Por ejemplo, después de desmontarlo, esto es lo que sucede:

 $ git status fatal: Not a git repository: /Volumes/My_USB/projectA_gitdir