El uso de `git –git-dir / ruta / a / git pull / ruta / a / otro / bare-git maestro` no actualiza automáticamente el tree de trabajo. Por qué no?

Encontré un comportamiento peculiar con git, y puedo reproducirlo cada vez en mi máquina.

Si tengo dos repositorys locales, uno desnudo dentro de la carpeta express.git , y el otro no desnudo con un tree de trabajo dentro de la carpeta express, ambos en la misma carpeta principal, puedo hacer el command git pull ../express.git desde el interior de la carpeta express . Esto actualiza automáticamente todo dentro de express .

Sin embargo, si ejecuto el command git --git-dir /home/cisw470p/stu006/express/.git pull /home/cisw470p/stu006/express.git master desde una location que no se encuentra en cualquiera de los repositorys de git, entonces el repository express generará cambios, pero no actualizará automáticamente el tree de trabajo. Luego tengo que ejecutar git add . para agregar todos los cambios y luego hacer otro commit desde dentro de express y ahora todo está bien.

¿Por qué la versión larga del command que utiliza la opción –git-dir no actualiza automáticamente el tree de trabajo para express ? ¿Hay alguna razón para esto o encontré un error?

EDITAR: Lo intenté de nuevo pero edité un file diferente y ahora funcionó. Estoy completamente perdido.

Si ejecuta git --git-dir=some/dir/.git pull , de forma pnetworkingeterminada git supondrá que el directory actual es el tree de trabajo. No es el padre de some/dir/.git , pero su pwd actual. Esto significa que ejecutar ese command intentará actualizar el directory actual como si fuera el tree de trabajo y terminará escribiendo files en su pwd que no pertenecen allí.

La solución adecuada es usar el --work-tree junto con --git-dir para indicarle dónde está el tree de trabajo. En este caso, querrías git --git-dir=some/dir/.git --work-tree=some/dir pull . Sin embargo, después de la experimentación parece que hay un segundo problema aquí. Si testing este command tal como está, probablemente le digan que git-pull cannot be used without a working tree . Parece que el problema aquí es que git necesita que su tree de trabajo sea un path absoluto en lugar de uno relativo.

Lo que realmente desea ejecutar es git --git-dir=some/dir/.git --work-tree="$PWD"/some/dir pull . Alternativamente, puedes probar cd some/dir && git pull . Si no desea cambiar su cwd, puede envolver esto en una subcadena, es decir ( cd some/dir && git pull ) .

Intereting Posts