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:

  1. Al clonar el repositorio, hay esto,

      

    advertencia: retirado CABEZA refiere a ref inexistente, incapaz de checkout

    .

    Eso es confuso e inconveniente.

  2. 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.

¿Fue útil?

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 la HEAD 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 / master

  •   
  • referencias CABEZA refs/heads/anotherBranch y que existe
      -> se obtiene una rama local llamado anotherBranch, a partir de origin/anotherBranch

  •   
  • referencias CABEZA refs/heads/master y que no existe
      -> "git clone", se queja

  •   
     

No 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.

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í.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top