2012-04-03 11 views
7

Primo: scuse per il titolo della domanda, in realtà non so quale sia il problema, quindi non so come chiederlo.Git non sembra voler mantenere i riferimenti locali all'origine/master

Voglio div master con master upstream (dovrebbe essere origine/master, in base al modo in cui i miei telecomandi sono impostati).

Ma: l'origine è stata messa lì dopo Ho lavorato su di esso localmente per un po ', quindi è "origine" solo nel nome. Cioè: ho avuto un repo locale, l'ho messo in una configurazione gitolite, e poi ho detto al mio git locale di chiamarlo origine.

Questi sono i sintomi:

$ 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) 

ok, sembra giusto.

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

Hm.

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

Non ho idea se è corretto. Sembra produttivo, ma git diff master origin/master ancora non riesce, e:

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

Wha?

$ ls .git/refs/remotes 
gitps ps 

Che sembra sbagliato: quelli sono vecchi telecomandi che non sono esistiti da mesi. Inoltre sono vuoti. E .git/remotes non esiste affatto, anche se non sono sicuro che dovrebbe.

risposta

10

Potrebbe essere necessario indicare a quali rami recuperare dall'origine. Nel file .git/config per questo repository, sotto la sezione [remote "origin"], dovrebbe esserci una riga come fetch = .... Questo dice a git cosa scaricare e dove inserirlo localmente. Ecco un esempio piuttosto standard:

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

Se non vedi la linea fetch = ..., si può tranquillamente aggiungere in modo che corrisponda l'esempio, che è lo standard "traccia tutti i rami e li chiamano origine/ramo localmente "opzione impostata da git clone.

Vedere git pro book per una buona descrizione di cosa sta succedendo.

+1

Fantastico, grazie! Sì, la linea di ricerca mancava completamente. – quodlibetor

+0

Grazie. Per me, la mia linea di recupero esisteva, ma per qualche motivo stavo solo recuperando da un particolare ramo di rilascio. Ho aggiornato la riga a quanto sopra e ho fatto 'git update remoto' e poi' git reset --hard origin/branchname' e tutto funziona perfettamente. – Phil

11

Hai provato git remote update? Questo aggiornerà tutti i telecomandi, creando filiali di localizzazione remota secondo necessità.

+0

Ho appena provato, esattamente lo stesso risultato di 'git fetch -a origine', sfortunatamente. – quodlibetor

0

Ho avuto un problema simile proprio ora. Ho scoperto che la mia directory .git locale come in realtà un file

$ file .git 
    .git: ASCII text 

ho cancellato il file, e inizializzato il repository git

git init && git remote add origin "gitrepo" 

Non troppo sicuro perché questo è accaduto. Speriamo che questo possa aiutare qualcuno ..

Problemi correlati