2014-07-21 15 views
10

La mia versione git è Git-1.9.4-preview20140611 In precedenza, ho clonato un repository di origine git vuoto. Il repository clonato ma con il seguente messaggioMessaggio passato a monte al passaggio a un ramo principale vuoto?

avviso: Sembra che tu abbia clonato un archivio vuoto. Controllo connettività ... terminato.

Successivamente, ha copiato un file .gitIgnore che si trovava nel repository Git principale di un altro progetto e lo ha commesso sul master locale. Questo file è stato usato da noi molte volte in passato. Questo sembra bene. Abbiamo un file .gitIgnore standardizzato per tutti i nostri progetti. Questo è stato creato come parte delle migliori pratiche.

successivo ha creato un nuovo ramo e copiati po 'di codice nel luogo fisico in cui locale repo git risiede

git checkout -b FromCC 

Aggiunto il codice e si è impegnato in questo ramo.

git add --all 
git commit -M "Blah" 

Tutte queste operazioni hanno esito positivo.

Il mio scopo è unire queste modifiche alla fine nel ramo principale locale.

ho accanto fare

git checkout master 

e ottenere seguente messaggio.

Il tuo ramo è basato su "origine/master", ma l'upstream è sparito. (usa "git branch --unset-upstream" per correggere)

Cosa significa questo messaggio? Perché a monte 'andare via'?

Interessante osservazione: Ho ripetuto lo stesso processo con lo stesso master Git oggi. Questa volta il repository Git non era vuoto. Aveva il file .gitIgnore in mano. Questo messaggio precoce non è apparso.

risposta

31

Non è il monte repository (origin stessa), ma piuttosto il ramo specifico clonato (master in origine) che manca.

Inoltre, il messaggio di Git è fuorviante: il ramo master sull'origine non andare via, era non c'è mai. Quando hai clonato il repository vuoto, non c'erano più rami. Ha continuato a non avere rami. Quindi, il tuo locale master, che era stato impostato per tracciare origin/master, era (è) il tracciamento di un ramo che ha fatto (non) esiste.

Il messaggio è pensato più per una situazione come questa:

$ git clone ... 
$ git checkout featureX # track some feature branch 
[go away for a week, come back] 
$ git fetch -p   # update remote branches 

dove, durante quella settimana eri via, il ramo featureX è stato eliminato (presumibilmente fusa nella sua linea di sviluppo e quindi non è più necessario).A questo punto sei su una filiale locale, featureX, impostato per monitorare il ramo remoto origin/featureX, ma non c'è più lo origin/featureX.

In questo caso, però, è necessario filiale locale master rintracciando origin/master quando non c'è origin/masterancora. Una volta creato (tramite il push che rende il repository non vuoto), il problema andrà via. Questo viene visualizzato solo perché per impostazione predefinita si inizia con master anche se il telecomando è vuoto e non dispone ancora di uno master.

+1

@DolphinJava: corretto. Un repository vuoto (senza oggetti) non ha rami, anzi, non contiene riferimenti finali, poiché tutti i riferimenti, ad eccezione dei riferimenti indiretti, devono contenere un SHA-1. Normalmente c'è un riferimento indiretto, 'HEAD', che contiene un nome-ramo; questo è come puoi essere su un ramo che deve ancora nascere. (A un certo punto in futuro potrebbe essere possibile cambiarlo: git potrebbe usare l'all-zero "NULL SHA-1" come segnaposto per rami non ancora nati o uccisi, ma al momento non lo fa, quindi Se sei su un ramo non ancora nato e ti allontani da esso, semplicemente svanisce.) – torek

+1

Ho lo stesso problema ... un semplice 'push' non lo risolve, fallisce, presumibilmente per la stessa ragione che hai spiegato. – Ant6n

1

Come newbie a git/github mi sono imbattuto in questo dopo aver creato un repository completamente vuoto su github e git clone da locale. Compreso l'avvertimento su un repository vuoto. Quindi un commit per un file locale appena creato ha dato il messaggio riguardante "upstream is gone".

seguito si presuppone si vuole utilizzare repository remoto, quindi il monte sarebbe necessario impostare:

ho pensato di aggiungere, che github suggerito al momento della creazione del vuoto repo alcuni comandi. Quello critico sarebbe il git push -u origin master (dopo init, add (per un file), i comandi commit e remote add origin <url>). Questo trasferisce il master localmente esistente al repository github remoto.

L'opzione -u di push imposta l'upstream (la versione lunga è --set-upstream) sul set su github. Devo ammettere che il resto della manpage git-push per quell'interruttore rimane mistico per me ... Dal momento che il locale non è aggiornato né spinto con successo.

Il messaggio è scomparso poiché il ramo principale ora è disponibile anche sul repository remoto.

0

Ho avuto lo stesso messaggio di errore con github. Il vero problema era che non avevo approvato l'invito al repository. Quindi il git pensava che non avessi i diritti per il repository.