Cambiar un cabezal remoto Git a punto a algo más que maestro
-
18-09-2019 - |
Pregunta
¿Cómo puedo configurar una cabeza de referencia remota Git para apuntar a algo más que "maestro"?
Mi proyecto tiene una política de no utilizar una rama "master" (todas las ramas deben tener nombres significativos). Además, el repositorio principal canónica sólo es accesible a través de SSH:. //, sin acceso shell (como GitHub o Unfuddle)
Mi problema es que el repositorio remoto todavía tiene una referencia HEAD para refs / heads / master, pero necesita que apunte a una rama diferente. Esto está causando dos problemas:
-
Al clonar el repositorio, hay esto,
advertencia: retirado CABEZA refiere a ref inexistente, incapaz de checkout
.Eso es confuso e inconveniente.
-
El navegador de código basado en la web depende en la cabeza como base para navegar por el árbol. Necesito HEAD para que apunte a una rama válida, entonces.
Solución
No había casi el misma pregunta en GitHub un año hace.
La idea era cambiar el nombre de la rama principal:
git branch -m master development
git branch -m published master
git push -f origin master
Creación de máster tienen lo que quiere la gente a usar, y lo hacen el resto del trabajo en las oficinas.
(un "git-symbolic-ref HEAD refs/head/published
" no se propaga a la repo remoto)
Esto es similar a " ¿Cómo borro origin / master en Git ".
Como se ha dicho en este hilo : (énfasis mío)
"
git clone
" crea una única rama local.
Para hacer eso, se ve en laHEAD ref
de la cesión temporal a distancia, y crea una rama local con el mismo nombre que la rama remoto al que hace referencia a él.Así que para concluir que, usted tiene repo A y clonarlo:
referencias
HEAD
refs/heads/master
y que existe
-> se obtiene una rama local llamado maestro, a partir de origin / masterreferencias CABEZA
refs/heads/anotherBranch
y que existe
-> se obtiene una rama local llamadoanotherBranch
, a partir deorigin/anotherBranch
referencias CABEZA
refs/heads/master
y que no existe
-> "git clone", se quejaNo estoy seguro si hay alguna manera de modificar directamente el árbitro
HEAD
en un acuerdo de recompra .
(que es el punto de toda su pregunta, lo sé;))
Tal vez la única manera habría un "publicación para los pobres" , donde:
$ git-symbolic-ref HEAD refs/head/published
$ git-update-server-info
$ rsync -az .git/* server:/local_path_to/git/myRepo.git/
Pero eso implicaría el acceso de escritura en el servidor, lo que no siempre es posible.
Como explico en " Git: Forma correcta de cambiar rama activa en un repositorio desnudo ", git remote set-head
no cambiaría nada en el repositorio remoto.
Sólo cambiaría la rama seguimiento remoto almacenada localmente en tu repositorio local, remotes/<name>/HEAD
.
Otros consejos
Actualización: Esto sólo funciona para la copia local del repositorio (el "Cliente"). Por favor, vea los comentarios de los demás 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
Así, por ejemplo, el cambio de la cabeza en origin
remoto para develop
rama sería:
git remote set-head origin develop
Ya que mencionas GitHub, para hacerlo en su sitio simplemente entrar en su proyecto, entonces ...
admin > Default Branch > (choose something)
Hecho.
Ver: http: // www .kernel.org / pub / software / SCM / git / docs / git-simbólico-ref.html
Esto establece la rama predeterminada en el repositorio git. Puede ejecutar esta en los repositorios de desnudos o de espejo.
Uso:
$ git symbolic-ref HEAD refs/heads/<branch name>
(Ya era básicamente la misma pregunta " crear un git simbólica ref repositorio remoto", que no recibió ninguna respuesta universal.)
Pero hay respuestas específicas para "granjas" varios GIT (donde varios usuarios pueden gestionar repositorios 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 podrían ser útiles para aquellos que están leyendo esta página y pensar en estos servicios específicos.
- Ahora tienen un menú desplegable para seleccionar la rama central en http: //repo.or. cz (ejemplo: http://repo.or.cz/editproj.cgi?name=for-me-and-for-all_imz.git );
- y http://gitorious.org , también (busque en algún lugar del ajustes);
- y http://GitHub.com : admin> Rama predeterminado> ( elegir algo) (gracias a la respuesta de @ srcspider);
- v2.6 , la rama se puede predeterminar en el interfaz web bajo 'Proyectos'> 'Lista'>> 'ramas'. En v2.12, Gerrit añade un nuevo set-cabeza comando que puede ser utilizado sobre ssh .
- y en Girar (que se ejecuta en http://git.altlinux.org para construir paquetes de distribución de ALT), una lata de la interfaz SSH para esto:
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
por ejemplossh git.alt default-branch packages/autosshd.git sisyphus
para cambiar la cabeza en elautosshd.git
repo remoto para que apunte a la ramasisyphus
.
Si usted tiene acceso al repositorio remoto desde un shell, sólo tiene que ir a la .git (o el directorio principal si es un acuerdo de recompra desnudo) y cambiar el archivo de HEAD para apuntar a la cabeza correcta. Por ejemplo, por defecto siempre contiene 'refs: refs / heads / master', pero si necesita foo a ser la cabeza en su lugar, simplemente editar el archivo inicial y se cambia el contenido a 'refs: refs / heads / foo' <. / p>
Se puede crear un unifamiliar principal rama de porcelana utilizando sólo los comandos de Git:
git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"
Eso nos da una principal rama con un mensaje grosero (que puede querer ser más educado). Ahora vamos a crear nuestra rama "real" (vamos a llamarlo tronco en honor a SVN) y el divorcio desde principal
git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"
Hey, ¡listo! gitk --all se mostrará principal y tronco con ningún vínculo entre ellos.
La "magia" aquí es que - modificar causas git commit para crear un nuevo commit con el mismo padre que HEAD y, a continuación, hacer punto CABEZA a ella . Pero el jefe actual no tiene un padre ya que es la primera cometen en el repositorio, por lo que el nuevo jefe no recibe uno, lo que genera separan el uno del otro.
La vieja cabeza commit no se borran por git-gc porque refs / heads / master sigue apuntando a la misma.
La - allow-vacío bandera es sólo necesitaba porque estamos cometiendo un árbol vacío. Si hubiera algún git add 's después de la git rm a continuación, no sería necesario.
En realidad, puede crear una rama separada en cualquier momento mediante la ramificación inicial se comprometen en el repositorio, borrando su árbol, añadiendo su árbol individual, a continuación, haciendo git commit --amend .
Sé que esto no responde a la pregunta de cómo modificar la rama por defecto en el repositorio remoto, pero da una respuesta limpia sobre cómo crear una rama separada.
En primer lugar, crear la nueva rama en la que desea establecer como predeterminado, por ejemplo:
$>git branch main
A continuación, empuje que se ramifican a la origen
$>git push origin main
Ahora, cuando se acceda a su cuenta de GitHub, puede ir a su repositorio y seleccione Configuración> Rama predeterminado y seleccione " principal ."
A continuación, si así lo desea, puede eliminar la rama principal:
$>git push origin :master
Para las personas gitolite, gitolite soporta un comando llamado - esperar a que - symbolic-ref
. Se le permite ejecutar comandos de forma remota de que si usted tiene W (escritura) permiso para la cesión temporal.
En relación con la pregunta, terminé aquí en la búsqueda de:
¿Cómo hago un repo local sobre una rama omisión modificados en GitHub
Para completar, la adición de la respuesta:
git remote set-head origin -a
simple sólo tiene que entrar en su cuenta de GitHub y en el lado de la derecha en el menú de navegación elija Configuración , en el pestaña de configuración elija Por defecto Branch y volver a la página principal de su repositorio que hizo el truco para mí.