2011-05-16 11 views
10

Tengo una rama git que continuamente se 'recrea' con una caja de letras alterna cada vez que realizo un 'git pull'. Suponiendo que el nombre de la sucursal es 'a' (o 'A' por lo que sé), un 'git pull' producirá la línea:git branch continuamente recreado en pull

* [new branch]  a  -> origin/a 

Y luego el siguiente 'git pull' producirá:

* [new branch]  A  -> origin/A 

Esto nunca se detiene. No sé cómo se creó la rama (o para qué sirve) cuando alguien más la creó.

¿Cómo domar esta rama y hacer que deje de hacer esto?

+1

¿Esta rama (o ramas?) Aparece en la salida de 'git ls-remote origin'? – Cascabel

+0

Parece que ha tocado algo. De hecho, hay dos ramas que aparecen en este listado. Uno es refs/head/a y el otro es refs/head/A. Supongo que esto significa que alguien creó las dos ramas con diferentes casos sin darse cuenta, ¿verdad? – acoward

Respuesta

7

Como se mencionó en los comentarios, tanto refs/heads/A como refs/heads/a existen en el control remoto. Eso significa que existen dos ramas distintas allí. (Git es sensible a las mayúsculas y minúsculas, al igual que la mayoría de los sistemas de archivos que no son de Windows.)

Sin embargo, si usa Windows, eso probablemente explique este problema. Los Refs se crean como archivos individuales, uno por ref. Git ve ambos en el control remoto, pero luego cuando intenta actualizarlos localmente, solo uno existe, por lo que el otro siempre se crea. El orden interno de las dos operaciones debe ser tal que el nuevo creado sobrescriba al otro, lo que lleva a la alternancia.

Si los árbitros están apuntando a la misma comprometerse, entonces la solución es eliminar uno de ellos en el control remoto:

git push origin :refs/heads/A 
+0

Esto también puede suceder en Mac OS X (lo reproduje), donde también hay una solución alternativa (si una de las ramas no puede ser simplemente eliminada/renombrada): use * Disk Utility * para crear una imagen de disco con una "Mac Sistema de archivos extendido (sensible a las mayúsculas y minúsculas) OS (** Archivo **> ** Nuevo **> ** Imagen de disco en blanco ... **) y 'cd' al nuevo volumen antes de clonar el depósito sensible a mayúsculas y minúsculas . –

1

Parece que el origen/a y el origen/A se eliminan localmente dado que usted obtiene [nueva rama] todo el tiempo. Si alguien o algo está borrando estas referencias, obtendrá estas ramas cada vez que busque (o extraiga) del control remoto. ¿Has intentado volver a clonar el repositorio? ¿Eres el único que tiene este problema?

+0

No soy el único que tiene este problema. La primera vez que me encontré con esto fue cuando alguien más en el equipo tuvo este problema y pensó que la re-clonación podría solucionarlo. No estoy seguro si intentaron volver a clonar y se fue. Voy a averiguar. Ahora tengo el mismo problema. No creo que se produzca una eliminación local, ya que esto ocurre siempre, incluso cuando no ocurre nada más en el repositorio local. Puedo realizar el 'git pull' en sucesión inmediata y esto todavía sucede todo el tiempo. – acoward

+0

¿Tiene algún gancho Git disparándose cuando tira? – ralphtheninja

+0

Soy un git newb. Supongo que ya que no sabría cómo dispararle a Git Hooks que no los tengo, ¿verdad? – acoward

1

simplemente me encontré con este problema. En mi caso, uno de los nombres de las ramas estaba en descenso directo desde el otro, así que eliminé la rama más antigua del control remoto, ya que no agregaba ningún valor. Asumir la rama para borrar es "a", entonces este comando se elimina de la distancia ("origen" llamado):

git push origin :a 

Un par de recuperaciones y el problema se ha ido (hasta que otra persona lo empuja de nuevo. ..)