2010-01-27 14 views
19

Quando ho provato 'git push origin master' nel repository remoto sul mio disco esterno, si è verificato un avviso git che indica che il pusing per il checkout del repository verrà eseguito nelle prossime versioni di git rifiutate per impostazione predefinita. Su disco esterno ho il progetto checkouted e voglio inviare le modifiche che ho fatto sul mio computer a questi repository. 'Git push origin master' non è la strada giusta? Devo 'git pull ...' sul repository sul mio disco esterno? Quindi non posso spingere i cambiamenti ma li tiro semplicemente? Lavorare solo con il repository "bare" è diverso? Quindi, se il repository sul mio disco esterno fosse un repository scarno, potrei inviarlo a modifiche? Capisco correttamente?Git push solo per repository nudi?

risposta

6

Non si dovrebbe eseguire il push su un repository non nullo perché premendo si aggiornerà solo lo stato interno del repository e non si influirà sulle copie in uscita dei file su disco. Pertanto, potresti incorrere in problemi se inizi a lavorare in quel repository senza prima aggiornare (tramite git checkout) le copie su disco dello stato dei file nel repository.

+0

Quindi, spingere al pronti contro termine non è esattamente una spinta dal repo? –

+3

gettingGuru: corretto; una spinta è effettivamente l'opposto di un recupero. Pull = fetch + unisci nel ramo corrente. – ebneter

+2

La chiave è che un pull aggiorna anche i file nell'albero di lavoro (i file "su disco"), che non fa né un push né un recupero. – mipadi

23

Leggere attentamente l'avvertenza. La nuova proibizione predefinita è solo spingendo al ramo attualmente estratto in un repository non nudo. È perfettamente OK passare a qualsiasi altro ramo in un repository non nudo.

La ragione di ciò è che il processo di push non ha accesso diretto all'albero di lavoro in modo che l'indice e la diramazione vengano modificati sotto l'albero di lavoro. Quando successivamente si passa all'albero di lavoro, sembra che l'albero di lavoro abbia annullato le modifiche apportate mescolate a eventuali modifiche che erano realmente in fase di sviluppo. Ciò rende molto difficile separare i due gruppi di modifiche.

La spinta verso altri rami non presenta aspetti negativi. È quindi possibile accedere a quel repository e unire tali modifiche nel ramo estratto, se lo si desidera.

+3

Non ho capito questa risposta fino a quando non ho letto [git ready »push to only repository] (http://gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html) e [tutto ciò che riguarda i repository "nudi" - cosa, perché e come correggere un push non nudo] (http://sitaramc.github.com/concepts/bare.html) (specialmente il "sì sì, ma perché ho bisogno di un repository nudo? "sezione). Ora, comunque, lo faccio! –

+0

È possibile eseguire il push di un ramo non estratto e quindi utilizzare il gancio di post-ricezione per l'unione di barnch con il ramo aggiornato? –

Problemi correlati