track remote example change and git git-branch git-remote

change - git pull remote branch example



Cambie un HEAD remoto de Git para que señale algo además de maestro (10)

(Básicamente, ya existía la misma pregunta " crear una referencia simbólica git en el repositorio remoto ", que no recibió 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.

¿Cómo configuro la referencia HEAD de un control remoto de Git para que señale 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 al shell (como GitHub o Unfuddle).

Mi problema es que el repositorio remoto aún tiene una referencia HEAD para refs / heads / master, pero necesito que apunte a una rama diferente. Esto está causando dos problemas:

  1. Al clonar el repositorio, hay esto,

    advertencia: HEAD remoto se refiere a ref inexistente, no se puede pagar.

    Eso es confuso e inconveniente.

  2. El explorador de código basado en la web depende de HEAD como base para explorar el árbol. Necesito que HEAD señale una rama válida, entonces.


Como mencionas GitHub, para hacerlo en su sitio simplemente entra en tu proyecto, entonces ...

admin > Default Branch > (choose something)

Hecho.


Hubo casi la misma pregunta en GitHub hace un año.

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

Hacer que el maestro tenga lo que quiere que la gente use y hacer todo el trabajo en las sucursales.

(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 dice en este hilo : (énfasis mío)

" git clone " crea solo una única rama local.
Para hacerlo, mira el HEAD ref del repo remoto, y crea una rama local con el mismo nombre que la rama remota a la que hace referencia.

Entonces, para terminar, tienes un repositorio A y lo clonas:

  • HEAD referencia a refs/heads/master y eso existe
    -> obtienes una rama local llamada master, comenzando desde el origen / master

  • HEAD hace referencia a refs/heads/anotherBranch y eso existe
    -> obtienes una sucursal local llamada anotherBranch , comenzando desde origin/anotherBranch

  • HEAD hace referencia a refs/heads/master y eso no existe
    -> se queja "git clone"

No estoy seguro de si hay alguna forma de modificar directamente la referencia HEAD en un repositorio .

(que es el punto central de tu pregunta, lo sé;))

Tal vez la única forma sería una "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 acceso de escritura al servidor, lo que no siempre es posible.

Como explico en " Git: ¿La forma correcta de cambiar la Rama activa en un repositorio desnudo? ", Git 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 .


Para la gente de gitolita, la gitolita es compatible con un comando llamado - espere - symbolic-ref . Le permite ejecutar ese comando de forma remota si tiene permiso W (escritura) para el repositorio.


Primero, crea la nueva rama que te gustaría establecer como tu predeterminada, por ejemplo:

$>git branch main

Luego, empuja esa rama hacia el origen :

$>git push origin main

Ahora cuando inicie sesión en su cuenta de GitHub, puede ir a su repositorio y elegir Configuración> Sucursal predeterminada y elegir " principal ".

Luego, si así lo desea, puede eliminar la rama principal:

$>git push origin :master


Puede crear una rama principal separada utilizando solo comandos Git de porcelana:

git init touch GO_AWAY git add GO_AWAY git commit -m "GO AWAY - this branch is detached from reality"

Eso nos da una rama principal con un mensaje grosero (es posible que desee ser más educado). Ahora creamos nuestra rama "real" (llamémosle troncal en honor a SVN) y la divorciamos de la maestra :

git checkout -b trunk git rm GO_AWAY git commit --amend --allow-empty -m "initial commit on detached trunk"

¡Listo! gitk --all mostrará master y trunk sin ningún enlace entre ellos.

La "magia" aquí es esa --mensa causa que git commit cree una nueva confirmación con el mismo padre que la HEAD actual, luego haga que HEAD apunte a ella. 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 recibe uno, lo que los separa del resto.

HEAD commit no es borrado por git-gc porque refs / heads / master aún lo apunta.

El indicador --allow-empty solo es necesario porque estamos cometiendo un árbol vacío. Si hubiera algunos git add después del git rm, entonces no sería necesario.

En verdad, puedes crear una rama separada en cualquier momento ramificando la confirmación inicial en el repositorio, eliminando su árbol, agregando tu árbol separado, y luego haciendo commit git --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.


Si tiene acceso al repositorio remoto desde un intérprete de comandos, 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 que foo sea HEAD, simplemente edite el archivo HEAD y cambie el contenido a ''refs: refs / heads / foo''.


Simple, simplemente inicie sesión en su cuenta de GitHub y en el extremo derecho en el menú de navegación, seleccione Configuración , en la pestaña Configuración , seleccione Rama predeterminada y regrese a la página principal de su repositorio que me hizo el truco.



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 (feb 2014), el procedimiento correcto sería:

git remote set-head $REMOTE_NAME $BRANCH

Entonces, por ejemplo, cambiar la cabeza en el origin remoto para develop rama sería:

git remote set-head origin develop