Refrescando un clon desnudo de git

Estoy usando un repository git bare en un almacenamiento usb como mecanismo de transporte para trabajar entre diferentes ubicaciones. Inicié el almacenamiento usb haciendo:

git clone –bare / path / to / clone

La pregunta es cómo actualizar el clon (es decir, get el resultado equivalente de un nuevo clon) sin borrar el viejo clon y hacer uno nuevo.

Solo hacer git-fetch no es suficiente por las siguientes razones:

  1. git-fetch no busca nuevas twigs
  2. Si la fuente hizo una rebase o confirmó -amend, entonces el usb-clone aún contendrá las confirmaciones anteriores.

El primer problema se puede resolver con el siguiente script:

git fetch --prune origin -- \ `git ls-remote -h origin | while read sha ref; do echo "+$ref:$ref"; done` 

(Ver: http://git.661346.n2.nabble.com/How-to-fetch-all-remote-branches-from-remote-td3380849.html )

Pero, ¿cómo se puede resolver el segundo problema? ¿Cómo puedo borrar confirmaciones que ya no existen en el control remoto?

git gc limpiará cualquier commit inalcanzable.

Parece que está ejecutando commands dentro del directory montado en usb. Si este es el caso, te sugiero que tomes un enfoque diferente. Use git push desde su directory de trabajo para actualizar el repository usb, y git pull cuando lo mueva a la otra máquina. Esto se ocupará de garantizar que todo esté actualizado en el repository usb. No ejecute nada desde dentro del directory montado en usb.

Por cierto, la git fetch debería atraer nuevas twigs. Si no es así, hay algo más que está mal.

En lugar de usar --bare interruptor --bare para clonar, use el – --mirror .
Entonces git fetch hará el trabajo.

Discutido aquí

git fetch busca nuevas twigs.

Haga una git push al repository desnudo de su repository principal / de trabajo como alternativa.