2012-04-03 8 views
7

Primero: me disculpo por el título de la pregunta, en realidad no sé cuál es el problema, así que no sé cómo preguntar al respecto.Git no parece querer mantener referencias locales al origen/maestro

Quiero diferenciar mi maestro con el maestro upstream (debería ser origin/master, según la configuración de mis controles remotos).

Pero: el origen se puso allí después de He estado trabajando en ello localmente por un tiempo, por lo que es de "origen" solo de nombre. Es decir: tenía un repositorio local, lo puse en una configuración de gitolite y luego le dije a mi git local que lo llamara origen.

Estos son los síntomas:

$ git diff master orgin/master 
fatal: ambiguous argument 'orgin/master': unknown revision or path not in the working tree. 

$ git diff master origin/master -- 
fatal: bad revision 'origin/master' 

Hm.

$ git remote -v 
origin [email protected]:example (fetch) 
origin [email protected]:example (push) 

bien, se ve bien.

$ git branch -a 
... # nothing from origin 

Hm.

$ git fetch -a origin 
From example.com:example 
* branch   HEAD  -> FETCH_HEAD 

No tengo idea si es correcto. Parece productivo, pero git diff master origin/master aún falla, y:

$ git branch --track omaster origin/master 
fatal: Not a valid object name: 'origin/master'. 

¿Qué?

$ ls .git/refs/remotes 
gitps ps 

Eso parece incorrecto: esos son mandos a distancia viejos que no han existido durante meses. También están vacíos. Y .git/remotes no existe en absoluto, aunque no estoy seguro de que así sea.

Respuesta

10

Es posible que deba indicarle a git qué ramas buscar desde el origen. En el archivo .git/config para este repositorio, en la sección [remote "origin"], debe haber una línea como fetch = .... Esto le dice a git qué buscar y dónde ubicarlo localmente. Aquí está un ejemplo bastante estándar:

[remote "origin"] 
     fetch = +refs/heads/*:refs/remotes/origin/* 
     url = ssh://... 

Si no ve la línea fetch = ..., se puede añadir de forma segura para que coincida con el ejemplo, que es el estándar "rastrear todas las ramas y les llame origen/rama localmente "opción configurada por git clone.

Consulte el git pro book para obtener una buena descripción de lo que está sucediendo.

+1

Impresionante, gracias! Sí, la línea de búsqueda faltaba por completo. – quodlibetor

+0

Gracias. Para mí, mi línea de búsqueda existía, pero solo estaba obteniendo de una rama de lanzamiento en particular por alguna razón. Actualicé la línea al anterior e hice 'git remote update' y luego' git reset --hard origin/branchname' y todo funciona perfectamente. – Phil

11

¿Has probado git remote update? Esto actualizará todos los controles remotos, creando ramas de rastreo remoto según sea necesario.

+0

Acabo de probarlo, exactamente el mismo resultado que 'git fetch -a origin', desafortunadamente. – quodlibetor

0

Tuve un problema similar en este momento. Descubrí que mi directorio .git local, como en realidad un archivo

$ file .git 
    .git: ASCII text 

que elimina el archivo, e inicializar el repositorio git

git init && git remote add origin "gitrepo" 
No

muy seguro de por qué sucedió esto. Esperemos que esto pueda ayudar a alguien ...

Cuestiones relacionadas