2009-04-10 12 views
32

Quando faccio una spinta git, compaiono i seguenti:Che cosa significa git "warning current check out branch"?

warning: updating the currently checked out branch; this may cause confusion, 
as the index and working tree do not reflect changes that are now in HEAD. 

Ho cercato su google per questo messaggio, e tutto quello che posso trovare è un git mailing list discussion in cui gli autori cercano di decidere esattamente come fare questo messaggio migliore per comunicare per me qual è il vero problema.

Come ho causato questo, e come posso risolvere il problema?

+2

possibile duplicato di [Errore push Git '\ [master respinto \] remoto -> master (il ramo è attualmente estratto)'] (http://stackoverflow.com/questions/2816369/git-push-error-remote -rejected-master-master-branch-is-moment-checked) –

+1

@WilliamTate no, questo post si occupa di un avviso, offerte post collegate con errore – CharlesB

+2

Sì lo è, penso che sia l'avviso che hai ricevuto invece dell'errore in precedenza versioni di Git. –

risposta

46

Questo accade quando si sta spingendo verso un repository non nudo. Un repository nudo è uno che consiste esclusivamente in una directory .git; un repository non nudo include anche un checkout. In generale, non si dovrebbe spingere a un repository non nudo; infatti, nella versione futura di git, sarà vietato. Se si esegue il push su un repository non nudo, l'HEAD di quel repository non sarà sincronizzato con l'indice e la copia di lavoro.

Se si sta creando un pronti contro termine che la gente sta andando a voler spingere a, allora si dovrebbe creare utilizzando git init --bare (e git init --bare --shared se più account utente, hanno bisogno di accedere ad esso), o git clone --bare se si sta creando da essa clonazione di un repository esistente.

+1

Grazie. Questo importante avvertimento mi stava dicendo che sono stato clonato e spinto nel repository sbagliato !! Ho un repository nudo, chiamato in modo simile ad un altro repository che ho clonato casualmente! – skiphoppy

+1

Va bene passare da un repository non nudo a un non-nudo. Non credo? – Keyo

+1

@Keyo Sì, è bene passare da un repository non nudo a un altro. Ma non dovresti spingere in un repository non nudo. –

12

In breve, il repository remoto non è più nullo e si preme sul ramo di pagamento remoto.

Vedere "How to publish a Git repository":

Un repository nudo è uno senza una copia di estratto di lavoro del codice. Contiene solo il database git.
Come regola generale, non inserire mai un repository che contiene modifiche nella copia di lavoro.
per assicurare che questo non accada, stiamo facendo il repository server di un repository nudo - non ha copia di lavoro

Da here:

Nota che l'obiettivo di una "spinta" è normalmente a archivio nudo (cioè senza un albero di lavoro a sé stante).
È anche possibile passare a un repository con un albero di lavoro estratto, ma l'albero di lavoro non verrà aggiornato dal push.
Questo potrebbe portare a risultati imprevisti se il ramo su cui si preme è il ramo attualmente estratto.

Se si definisce un albero di lavoro indipendente (che può per esempio corrispondere a DocumentRoot di un server web), è necessario:

check, sul repository remoto, il valore di git config core.worktree e git config core.bare

+1

Nota per l'utente: consultare http://stackoverflow.com/questions/2041823/2041865#2041865 per un esempio di utilizzo bare dei repository. – VonC

5

Ho reso il mio repository spoglio clonando un nuovo repository dal mio incasinato, salvando quello incasinato per ogni evenienza e sostituendolo con il mio clonato nuda.

Sono nuovo di git, e quando ho impostato il repository, ho dimenticato di usare l'opzione --bare. Grazie per tutto il vostro aiuto!

Da allora ho letto il libro git O'Reilly e ora sono un totale git convert.