checkout remote branch en git

Configuré /var/www/website como un repository (no desnudo) y tengo mi gancho post-actualización de mi repository desnudo:

 #!/bin/sh echo echo "**** Pulling changes into Live [Hub's post-update hook]" echo cd /var/www/website || exit unset GIT_DIR git pull hub master exec git-update-server-info 

Porque quiero ver cambios en el website justo después del empuje.

Pero si creo una bifurcación remota, que funciona con ella en mi repository local y luego confirmo y envío los cambios, no puedo verlos en el website (siempre veo master).

¿Hay alguna forma de hacer un pago en el repository remoto (no puro)?

El gancho post-actualización recibe los nombres de todas las references que se han actualizado. Estos serán parameters posicionales ( $1 , $2 , etc.). Deberá decidir qué hacer con cada uno.

Por ejemplo, este script post-update algo tonto:

 #! /bin/sh for ref do case $ref in refs/heads/*) echo "a branch ($ref) was updated";; refs/tags/*) echo "a tag ($ref) was updated";; *) echo "something I don't understand ($ref) was updated";; esac done 

simplemente imprime los nombres completos de todo lo que se actualizó.

Para que sea less tonto, digamos que queremos ver las actualizaciones de las sucursales y hacer algo útil con ellas. Reemplace el primer eco con algo más complejo:

  refs/heads/*) branch_update $ref;; 

Por supuesto, tenemos que definir una function branch_update. Aquí está el nuevo guión (que todavía no hace nada pero tiene lugares obvios para hacer algo):

 #! /bin/sh branch_update() { local shortname=${1#refs/heads/} echo "branch $shortname is being updated" case $shortname in master) echo "master is updated, do something";; work) echo "work branch is updated, do something else";; *) echo "it's not a magic branch, do nothing";; esac } for ref do case $ref in refs/heads/*) branch_update $ref;; refs/tags/*) echo "a tag ($ref) was updated";; *) echo "something I don't understand ($ref) was updated";; esac done 

Aparte: la forma en que se formula su pregunta sugiere que no está del todo "pensando en git", por así decirlo. 🙂 Cuando haces un push (desde tu propia copy de algún repository a alguna otra copy, bare o no, de algún report), puedes encontrar los resultados más comprensibles si cambias tu punto de vista. Puedes empezar pensando "estoy presionando", pero luego puedes imaginar el repository remoto como otro actor, vamos a darle un nombre y llamarlo "Bob", y pensar en lo que Bob está viendo. Desde el punto de vista de Bob, en lugar de "Yekver está empujando cosas", Bob piensa: "Yo, Bob, recibo algo de ese tipo de Yekver y lo pongo en mi repository. Estoy agregando tags refs / tags / v1. 1, y estoy tomando algunos commits y poniéndolos en mi refs / heads / master, y estoy tomando algunos commits más y poniéndolos en mi refs / heads / devel-xyz ".

El concepto key aquí es que, en términos de lo que hace git, todo es local . Desde el punto de vista de Bob, el informe de Bob es local. Un tipo llamado Yekver puede tener un repository basado en eso, pero la copy de Bob es de Bob. Bob hace cosas locales con el repository local de Bob, y cuando trabajas dentro de esas secuencias de commands, estás "siendo Bob".