Tengo un repositorio desnudo que se utiliza como tienda central para mi proyecto. Todos los desarrolladores lo hacen git clone <repo>
para compartirlo. Cuando hacen el clon, obtienen un pago de la rama maestra (a menos que lo hagan git clone -n
) porque repo.git/HEAD
contiene ref: refs/heads/master
, lo que la convierte en la Rama activa .
La pregunta es, ¿cómo cambio la rama activa correctamente? Simplemente podría hackear el repo.git/HEAD
archivo directamente, pero eso parece desagradable y, bueno, hacky.
Intenté hacerlo git checkout <otherbranch>
en el .git
directorio de repositorios , pero eso falló porque no estaba en un árbol de trabajo.
Intenté, git update-ref HEAD refs/heads/otherbranch
pero eso solo actualizó refs / heads / master para que sea lo mismo que refs / heads / otherbranch (está bien, lo hice en un repositorio ficticio, ¡no en mi producción!)
Lo intenté git update-ref --no-deref HEAD refs/heads/otherbranch
y eso casi funcionó. Actualizó el HEAD
archivo, pero lo configuró en el SHA1 del commit señalado por refs/heads/otherbranch
.
Estoy probando con la versión git 1.7.0.2.msysgit.0
.
Supongo que no hay forma de hacerlo git push
, ya que permitir que todos cambien su rama predeterminada parece un poco inseguro (!), Pero seguramente hay una mejor manera de hacerlo en el .git
directorio de repositorios que piratear directamente el HEAD
archivo.
Respuestas:
Si tiene acceso al repositorio remoto remoto, esto artículo sugiere :
como se documenta en el
git-symbolic-ref
Si no tiene acceso al repositorio remoto, vea mi respuesta anterior .
Recuerda que un comando como
git remote set-head
:no cambia la rama predeterminada del repositorio remoto .
Solo cambia una rama de seguimiento remota almacenada en su repositorio local como
refs/remotes/<name>/HEAD
no cambia a
HEAD
sí mismo (de nuevo, solorefs/remotes/<name>/HEAD
), de ahí la necesidad degit symbolic-ref
.Entonces
git remote set-head
no es la respuesta aquí.git symbolic-ref HEAD
es decir, si tiene acceso directo al repositorio remoto.fuente
git symbolic-ref HEAD refs/heads/mybranch
funcionó muy bien para mí! ¡GRACIAS! ;)Para cambiar la rama, debe cambiar la referencia HEAD a la rama que desea usar.
Primero enumere todas las referencias en el repositorio desnudo haciendo
Luego encuentre la referencia para su sucursal, el formato será el siguiente
refs/heads/<my_branch>
. Entonces, el siguiente paso es verificar la referencia actual, simplemente escriba:para saber cuál es la rama actual y luego actualizarla según sea necesario.
Eso es todo. Disfrutar.
fuente
¿Cómo cambiar la rama activa correctamente?
estado: git checkout en el directorio repo .git devuelve fatal: esta operación debe ejecutarse en un árbol de trabajo
consejos: solo agregue el argumento --work-tree
ejemplo detallado: suposiciones: git desnudo en servidor remoto:
en el servidor local: cree la versión de sucursal 1.7 (nuestra otra rama)
git branch versión 1.7
git push origin version.1.7
en el servidor remoto con git bare repo:
$ cd ~ / bare_git_repository.git
$ git branch
versión maestra 1.7
Como se dijo, siguiendo el comando
git checkout versión 1.7
regreso
fatal: esta operación debe ejecutarse en un árbol de trabajo
Usando el siguiente comando
cambiar correctamente la rama activa propely
$ git branch
Maestro
verifique los resultados con lo siguiente
espero que ayude
fuente
Además, si no tiene acceso al repositorio simple, haciendo una
git remote set-head
y ya estáVer esta respuesta anterior
fuente
También tengo un repositorio desnudo en nuestro servidor y pude recuperar archivos usando
en un nuevo repositorio local a pesar de que la página de manual dice que esto es solo para repositorios no descubiertos.
fuente
Comparé dos directorios antes y después de aplicar
git symbolic-ref HEAD refs/heads/mybranch
y parece que solo se cambió el archivo repo.git / HEAD, por lo que probablemente sea bastante seguro "piratear" el archivo.
fuente