¿Cómo configuro la referencia HEAD de un control remoto Git para que apunte a algo además de "maestro"?
Mi proyecto tiene una política de no usar una rama "maestra" (todas las ramas deben tener nombres significativos). Además, el repositorio principal canónico solo es accesible a través de ssh: //, sin acceso a shell (como GitHub o Unfuddle).
Mi problema es que el repositorio remoto todavía tiene una referencia HEAD a refs / heads / master, pero necesito que apunte a una rama diferente. Esto está causando dos problemas:
Al clonar el repositorio, ahí esto,
advertencia: HEAD remoto se refiere a una referencia inexistente, incapaz de pagar.
Eso es confuso e inconveniente.
El navegador de código basado en la web depende de HEAD como base para explorar el árbol. Necesito HEAD para señalar una rama válida, entonces.
fuente
Respuestas:
Hubo casi la misma pregunta en GitHub hace un año.
La idea era cambiar el nombre de la rama maestra:
(un "
git-symbolic-ref HEAD refs/head/published
" no se propagaría al repositorio remoto)Esto es similar a " Cómo elimino el origen / maestro en Git ".
Como se dijo en este hilo : (énfasis mío)
(que es el punto central de su pregunta, lo sé)
Quizás la única forma sería una "publicación para los pobres" , donde usted:
Pero eso implicaría acceso de escritura al servidor, que no siempre es posible.
Como explico en " Git: ¿forma correcta de cambiar Active Branch en un repositorio simple? ",
git remote set-head
No cambiaría nada en el repositorio remoto.Solo cambiaría la rama de seguimiento remoto almacenada localmente en su repositorio local, en
remotes/<name>/HEAD
.fuente
-f
(--force
). He editado la respuesta en consecuencia. Luego, responda su referencia si usa esa misma opción.Actualización: esto solo funciona para la copia local del repositorio (el "cliente"). Por favor, vea los comentarios de otros a continuación.
Con una versión reciente de git (febrero de 2014), el procedimiento correcto sería:
git remote set-head $REMOTE_NAME $BRANCH
Entonces, por ejemplo, cambiar la cabeza del control remoto
origin
a la ramadevelop
sería:git remote set-head origin develop
fuente
git checkout -b default; git push origin HEAD; git remote set-head origin default
. Luego, puede inspeccionar los cambios locales concat .git/refs/remotes/origin/HEAD
(debería serref: refs/remotes/origin/default
) y la falta de cambios remotos congit remote show origin
(seguirá siendo lo que sea antes de agregar la rama predeterminada).Ya que mencionas GitHub, para hacerlo en su sitio simplemente entra en tu proyecto, luego ...
admin > Default Branch > (choose something)
Hecho.
fuente
Ver: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html
Esto establece la rama predeterminada en el repositorio git. Puede ejecutar esto en repositorios desnudos o reflejados.
Uso:
fuente
(Ya había básicamente la misma pregunta " crear una referencia simbólica git en el repositorio remoto ", que no recibió una respuesta universal).
Pero hay respuestas específicas para varias "granjas" de git (donde varios usuarios pueden administrar repositorios de git a través de una interfaz restringida: a través de http y ssh): http://Github.com , http://Gitorious.org , http: / /repo.or.cz , Girar ( http://git.altlinux.org ).
Estas respuestas específicas pueden ser útiles para quienes leen esta página y piensan en estos servicios específicos.
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
por ejemplo,ssh git.alt default-branch packages/autosshd.git sisyphus
para cambiar el HEAD en el repositorio remotoautosshd.git
para que apunte a lasisyphus
rama.fuente
Si tiene acceso al repositorio remoto desde un shell, simplemente vaya al .git (o al directorio principal si es un repositorio simple) y cambie el archivo HEAD para que apunte al encabezado correcto. Por ejemplo, por defecto siempre contiene 'refs: refs / heads / master', pero si necesita foo para ser el HEAD, simplemente edite el archivo HEAD y cambie el contenido a 'refs: refs / heads / foo'.
fuente
myrepo.git
. El contenido del archivo HEAD en el directorio dado se cambió deref: refs/heads/master
aref: refs/heads/mainline
. Ahora, cuando trato de clonar el repositorio en mi cuadro local, todavía apunta a master. Ejecuté elgit clone ssh://[email protected]/myrepo
comando. ¿Alguna idea para tal comportamiento?git version 1.7.1
& Versión del cliente Git:git version 1.9.4.msysgit.2
Puede crear una rama maestra separada utilizando solo comandos Git de porcelana:
Eso nos da una rama maestra con un mensaje grosero (es posible que desee ser más educado). Ahora creamos nuestra rama "real" (llamémosla troncal en honor a SVN) y la divorciamos de master :
¡Listo! gitk --all mostrará master y trunk sin ningún enlace entre ellos.
La "magia" aquí es que --amend hace que git commit cree un nuevo commit con el mismo padre que el HEAD actual, luego haga que HEAD lo señale. Pero el HEAD actual no tiene un padre, ya que es la confirmación inicial en el repositorio, por lo que el nuevo HEAD tampoco tiene uno, lo que los separa uno del otro.
El antiguo comando HEAD no se elimina con git-gc porque todavía lo apunta refs / heads / master.
La bandera --allow-empty solo es necesaria porque estamos cometiendo un árbol vacío. Si hubiera algunos git add después de git rm, entonces no sería necesario.
En verdad, puede crear una rama separada en cualquier momento ramificando la confirmación inicial en el repositorio, eliminando su árbol, agregando su árbol separado, luego haciendo git commit --amend .
Sé que esto no responde a la pregunta de cómo modificar la rama predeterminada en el repositorio remoto, pero da una respuesta clara sobre cómo crear una rama separada.
fuente
git fetch git:[email protected]:foo remote-branch-name && git checkout -b detached-branch FETCH_HEAD
agregará una nueva ramadetached-branch
que coincida con la ramaremote-branch-name
en remotogit:[email protected]:foo
. Por supuesto, el "control remoto" puede ser un repositorio en el sistema de archivos local que haya preparado previamente.Primero, cree la nueva rama que desea establecer como predeterminada, por ejemplo:
$>git branch main
Luego, empuja esa rama al origen :
$>git push origin main
Ahora, cuando inicie sesión en su cuenta de GitHub, puede ir a su repositorio y elegir Configuración> Rama predeterminada y elegir " principal ".
Luego, si así lo elige, puede eliminar la rama maestra:
$>git push origin :master
fuente
git symbolic-ref
en el shell remoto o modificar el archivo de texto llamadoHEAD
en el directorio raíz del repositorio remoto.Relacionado con la pregunta, terminé aquí cuando buscaba:
¿Cómo hago para que un repositorio local tenga conocimiento de una rama predeterminada modificada en GitHub?
Para completar, agregando la respuesta:
fuente
Para las personas con gitolita, la gitolita admite un comando llamado "espera"
symbolic-ref
. Le permite ejecutar ese comando de forma remota si tiene permiso W (escritura) para el repositorio.fuente
Sencillo sólo tienes que entrar en su cuenta de GitHub y en el lado de la derecha en el menú de navegación elija Configuración , en la ficha Configuración elegir rama por defecto y volver volver a la página principal de su repositorio que hizo el truco para mí.
fuente