2010-01-20 21 views
7

? Imagine que tengo un repositorio local que he clonado de algún origen. En el momento de mi clonación inicial, el origen tenía cuatro ramas: featureA, featureB, featureC y master. Si empujo cambios en el origen que eliminan la featureA rama yo esperaría a ver algo de ello se eliminará la próxima vez expido:¿Cómo dejo que diga a Git que me advierta sobre ramas remotas posiblemente eliminadas

$ git pull origin

Sin embargo, lo que sucede es que no veo nada y cuando intento para tirar de esa rama específica abajo con

$ git pull origin featureA

me sale el siguiente error:

fatal: Couldn't find remote ref featureA
fatal: The remote end hung up unexpectedly

Esto hace totalmente sentido, ya º De hecho, la sucursal fue eliminada del control remoto, así que sí, el árbitro ya no está, sin embargo, me pregunto por qué no me notificaron sobre este hecho. Mi .git/config para el mando a distancia se ve así:

[remote "origin"]
fetch = +refs/heads/:refs/remotes/origin/
url = [email protected]:/data/git/perecep.git

He escrito un pequeño script que utiliza el git ls-remoto junto con la salida de rama git-r a detectar referencias remotas cuyas ramas ya no existen en el servidor y preguntarme si me gustaría eliminarlas, pero me pregunto si estoy haciendo algo inherentemente incorrecto aquí.

Respuesta

2

No creo que estés haciendo nada mal. Su sucursal local no depende de la sucursal remota para su existencia, y es una situación perfectamente válida para que una sucursal remota se elimine mientras su sucursal local (del mismo nombre y aparentemente el mismo historial) continúe existiendo. Es el enfoque "centralizado" que está describiendo, en todo caso, que se consideraría poco ortodoxo en Git.

Editar: tangencialmente, puede que le interesen las opciones --track y --no-track para git-branch, y la variable de configuración branch.autosetupmerge.

+0

estoy siguiendo un flujo de trabajo más "servidor central" con Git b/c que estoy en un entorno corporativo y es así como los desarrolladores con las computadoras portátiles preferiría compartir el código (creando ramas de temas públicos en un servidor central para impulsar sus cambios para la colaboración) por ahora. Dado que estamos recién en transición de SVN, es algo con lo que se sienten más cómodos. Creo que mi preocupación es que después de crear varias ramas efímeras de esta naturaleza que se eliminan después de que la característica/tema se integre, todos los desarrolladores ahora tienen toneladas de ref secas de rama remota en su repositorio local. – NewGitUser

3

De acuerdo, no es necesario un script especial. Creo que pasé por alto este comando

$ git remote prune origin

Desde la página del manual:

 
    prune 
      Deletes all stale tracking branches under . These stale branches 
      have already been removed from the remote repository referenced by 
      , but are still locally available in "remotes/". 

      With --dry-run option, report what branches will be pruned, but do 
      no(sic) actually prune them. 
+0

¿hay alguna configuración que hace esto de forma automática cuando actualiza el control remoto? – xenoterracide

Cuestiones relacionadas