Entonces, esto significa que puede rastrear todas las ramas remotas en Puppet, aunque tiene algunas ramas locales. ¿Qué significan los muchos signos de "seguimiento" que ves en el resultado del comando? "rastreado" por qué sucursal local?
PJ.
Las ramas remotas se realiza un seguimiento en el que si lo hace una git fetcho git pullcambios a las sucursales remotas se rastreó en su repositorio clonado. Las ramas locales son solo eso, las ramas locales de las ramas remotas y, por lo tanto, las actualizaciones de las ramas remotas se rastrearán y fusionarán cuando se dé el comando apropiado para hacerlo. Incluyo explícitamente la opción '-t' al hacer la rama local para asegurarme de que rastrea la rama desde la que se originó. Recuerde que una sucursal local también puede rastrear otra sucursal local, por lo que no tiene que ser una sucursal remota.
Jeremy Bouse
55
@PJ: El término "seguimiento" tiene dos significados distintos en Git. Las líneas "rastreadas" se git remote show remote-namerefieren a "rastrear ramas" (instantáneas de ramas de repositorios remotos). Las líneas de "fusión con" se refieren a las sucursales locales que tienen una configuración de "rama ascendente" (hecha con la opción --track/ -tde git branch o git checkout y, por lo tanto, a menudo se confunde con "ramas de seguimiento").
Chris Johnsen
" rama de seguimiento remoto " es la entrada actualizada del glosario para las "ramas de seguimiento" mencionadas anteriormente. El documento se actualizó en 8b3f3f84 .
ento
124
Para todas las sucursales:
git branch -avv
Solo para sucursales locales:
git branch -lvv
Solo para sucursales remotas:
git branch -rvv
muestra todas las ramas, así como el nombre de la rama ascendente.
Si planea usar la información en un contexto automatizado (por ejemplo, un script), debe usar el nivel inferior ("plomería") en su git for-each-reflugar.
% git remote show origin
* remote origin
⋮
Local branches configured for 'git pull':
master merges with remote master
pu merges with remote pu
⋮
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu
El git for-each-refaprendieron el %(upstream)token en Git 1.6.3 . Con versiones anteriores de Git, tendrá que extraer la información de seguimiento con git config branch.<name>.remotey git config branch.<name>.merge(probablemente usando git for-each-refpara construir los comandos para cada nombre de sucursal local).
La salida de sus respuestas es mucho más sucinta y fácil de seguir, por lo que obtiene el voto
positivo
Para hacerlo menos conciso, pero proporciona una buena manera de verificar visualmente que los nombres remotos son los mismos que los nombres de las sucursales locales, un problema común: en bashgit for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
hobs
19
Para una rama en particular, puede usar git rev-parsecon el sufijo @{u}o @{upstream}en el nombre de la rama, por ejemplo:
Puede considerar usar "set -e" en la parte superior del script. Eso le permitirá eliminar todas las instancias de "|| exit $?" mientras se mantiene el mismo comportamiento de falla temprana.
John Whitley
@ JohnWhitley: Gracias, he editado mi respuesta. Lo sé set -e, pero generalmente me quedo con la comprobación explícita. Pero en este caso, es realmente mejor.
Ingo Karkat
No funciona para mí git version 1.9.4. Echos nada :(
Ain
8
.git/config el archivo también proporcionará la información de la rama de seguimiento como
Necesitaba encontrar la rama remota correspondiente (si la hubiera) para cada rama local dentro de un bucle que actuaba en una lista de las ramas locales. Terminé usando lo siguiente:
git for-each-ref --format='%(refname:short):%(upstream:short)' refs/heads | grep "^LocalBranchName:.*/" | sed "s/^LocalBranchName://"
Esto no generará nada (una cadena vacía) para las ramas locales que no tienen una rama remota correspondiente ("someremote / somebranch").
Respuestas:
Usando el ejemplo de mi copia de Puppet desprotegida del repositorio Git aguas arriba en Github.com ...
Entonces, si tuviera que ejecutar lo siguiente:
Y finalmente vuelva a ejecutar el
git remote show origin
comando nuevamente, veré lo siguiente cerca de la parte inferior:fuente
git fetch
ogit pull
cambios a las sucursales remotas se rastreó en su repositorio clonado. Las ramas locales son solo eso, las ramas locales de las ramas remotas y, por lo tanto, las actualizaciones de las ramas remotas se rastrearán y fusionarán cuando se dé el comando apropiado para hacerlo. Incluyo explícitamente la opción '-t' al hacer la rama local para asegurarme de que rastrea la rama desde la que se originó. Recuerde que una sucursal local también puede rastrear otra sucursal local, por lo que no tiene que ser una sucursal remota.git remote show remote-name
refieren a "rastrear ramas" (instantáneas de ramas de repositorios remotos). Las líneas de "fusión con" se refieren a las sucursales locales que tienen una configuración de "rama ascendente" (hecha con la opción--track
/-t
de git branch o git checkout y, por lo tanto, a menudo se confunde con "ramas de seguimiento").Para todas las sucursales:
Solo para sucursales locales:
Solo para sucursales remotas:
muestra todas las ramas, así como el nombre de la rama ascendente.
fuente
git branch -lvv
mostrar solo sucursales locales con upstream podría ser útilgit branch -vv
funciona para mí ...Jeremy Bouse ilustra cómo
git remote show
muestra la información de seguimiento . Eso debería ser suficiente si solo desea la información para el consumo humano.Si planea usar la información en un contexto automatizado (por ejemplo, un script), debe usar el nivel inferior ("plomería") en su
git for-each-ref
lugar.El
git for-each-ref
aprendieron el%(upstream)
token en Git 1.6.3 . Con versiones anteriores de Git, tendrá que extraer la información de seguimiento congit config branch.<name>.remote
ygit config branch.<name>.merge
(probablemente usandogit for-each-ref
para construir los comandos para cada nombre de sucursal local).fuente
git for-each-ref --format=$'\n'' '' '' '' '' '' ''/%(refname:short);%(upstream:short)' refs/heads | tr ';' $'\n'
Para una rama en particular, puede usar
git rev-parse
con el sufijo@{u}
o@{upstream}
en el nombre de la rama, por ejemplo:... o para la forma abreviada, agregue
--abbrev-ref
Generalmente puede usar la
branch@{upstream}
sintaxis donde se espera una confirmación.fuente
git rev-parse --symbolic-full-name HEAD
vs.git rev-parse --symbolic-full-name HEAD@{u}
¡gracias!Utilizo el siguiente script de shell (llamado
git-tracks
) para mostrar la rama remota que es rastreada por la rama actual:Esto también podría usar lo mencionado
git for-each-ref
, pero el acceso directo me pareció algo más simple que filtrar la salida de la rama actual.fuente
set -e
, pero generalmente me quedo con la comprobación explícita. Pero en este caso, es realmente mejor.git version 1.9.4
. Echos nada :(.git/config
el archivo también proporcionará la información de la rama de seguimiento comofuente
muestra exactamente lo que pides. Muestra las ramas locales junto con la rama remota correspondiente que están rastreando.
fuente
Agregue estas runas a la
[alias]
sección de su archivo .gitconfig:fuente
Necesitaba encontrar la rama remota correspondiente (si la hubiera) para cada rama local dentro de un bucle que actuaba en una lista de las ramas locales. Terminé usando lo siguiente:
Esto no generará nada (una cadena vacía) para las ramas locales que no tienen una rama remota correspondiente ("someremote / somebranch").
fuente
Probar
git branch
con opciones :De lo contrario, examine su
.git/config
.fuente