Domanda

È git remote update l'equivalente di git fetch?

È stato utile?

Soluzione

UPDATE:! Ulteriori informazioni |

avrei dovuto fare questo fin dall'inizio: (! Così meta) ho grepped le note di rilascio Git in Git repo di Git

grep --color=always -R -C30 fetch Documentation/RelNotes/* | less

Poi ho fatto una ricerca per less --all, e questo è quello che ho trovato sotto il note di rilascio per la versione Git 1.6.6 :

  

git fetch imparato opzioni --all e --multiple, per eseguire recuperare da molti repository, e l'opzione --prune per rimuovere rami di monitoraggio remoto che è andato stantio. Questi fanno git remote update e git remote prune meno necessaria (non esiste un piano per rimuovere remote updateremote prune, però).

La versione 1.6.6 non è stato rilasciato fino dicembre 23 2009 , e il manifesto originale ha chiesto la sua domanda il 6 dicembre 2009.

Quindi, come potete vedere dalle note di rilascio, di Git gli autori erano a conoscenza del fatto che la funzionalità dei comandi git remote update era stato duplicato un po 'per git fetch, ma hanno deciso di non rimuoverlo, forse per la compatibilità con gli script esistenti e programmi, o forse perché è solo troppo lavoro e non ci sono elementi di priorità più elevata.


risposta originale con più dettagli

di xenoterracide risposta è di 3,5 anni ormai, e Git è passato attraverso diverse versioni da allora (si è passati da per v1.8.3.2 stesura di questo documento), e guardando la corrente documentazione per git remote update e git fetch , sembra che sia in grado di eseguire in fondo la stessa funzione di andare a prendere nuove impegna da più telecomandi , date le giuste opzioni e gli argomenti.

Recuperare tutti i telecomandi

Un modo per andare a prendere diversi telecomandi è con la bandiera --all:

git fetch --all

Verrà recuperato da tutti i telecomandi configurati, partendo dal presupposto che non si dispone di serie remote.<name>.skipFetchAll per loro:

  

Se fosse vero, questo telecomando verrà saltato per impostazione predefinita quando l'aggiornamento utilizzando git-fetch (1) o l'aggiornamento di sottocomando git-a distanza (1) . - documentazione git-config

Questo sarebbe equivalente a usare

git remote update

senza specificare qualsiasi gruppo a distanza per andare a prendere, e pur non avendo set remotes.default nella configurazione dei pronti contro termine, e anche che nessuno dei vostri telecomandi hanno remote.<name>.skipDefaultUpdate impostata su true.

Il corrente 1.8.3.2 la documentazione per la configurazione del Git non menziona l'impostazione remotes.default, ma ho consultato l'Onnipotente Google su di esso e abbiamo trovato questo expl utileanation da Mislav Marohnić :

$ git config remotes.default 'origin mislav staging'
$ git remote update

# fetches remotes "origin", "mislav", and "staging"
  

È possibile definire un elenco predefinito di telecomandi per essere recuperati dal comando remote update. Questi possono essere telecomandi dai tuoi compagni di squadra, i membri della comunità di fiducia di un progetto opensource o simili.

Quindi, presumibilmente, se avete impostato remotes.default, e non tutti i telecomandi sono elencati in esso, allora git remote update sarà non prendere tutti i telecomandi che il pronti contro termine è "consapevole" di.

Per quanto riguarda l'impostazione remote.<name>.skipDefaultUpdate, la documentazione Git spiegano questa convenzione:

  

Se fosse vero, questo telecomando verrà saltato per impostazione predefinita quando l'aggiornamento utilizzando git-fetch (1) o l'aggiornamento di sottocomando git-a distanza (1) .

recupero di un gruppo specifico di telecomandi

Invece di andare a prendere tutti i telecomandi, sia fetch e remote update consentono di specificare diversi telecomandi e gruppi di telecomandi per andare a prendere:

git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]

git fetch [<options>] <group> permette può riaccedere diversi telecomandi che fanno parte di un gruppo (per prendere in prestito un altro esempio da Mislav ):

$ git config remotes.mygroup 'remote1 remote2 ...'
$ git fetch mygroup

git fetch --multiple consente di specificare diversi repository e gruppi di repository per andare a prendere in una sola volta (da la documentazione ):

  

Consentire diversi argomenti <repository> e <group> da specificare. No <refspec>s può essere specificato.

L'ambiguità nella documentazione git remote update

Il remoto sinossi git remote update specifica che la sintassi del comando è la seguente:

git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]

Si noti la parte ultima, [(<group> | <remote>)…]? I punti di trascinamento ... implica che è possibile specificare più gruppi e telecomandi con il comando, il che significherebbe si comporta nello stesso modo in cui git fetch --multiple ... vedere come la sintassi tra i due è così simile?

Tuttavia, nello stesso documento, la spiegazione per il comando update non dice nulla su come specificare più argomenti di gruppo e remoti, ma solo che

  

Fetch [es] aggiornamenti per un set denominato di telecomandi nel repository come definito da remotes.<group>.

Quindi, non è chiaro se git remote update funziona in modo identico a git fetch --multiple quanto riguarda la definizione di più telecomandi singoli e molteplici gruppi remoti.

Recupero un unico telecomando

Infine, tutti sanno il semplice caso di andare a prendere un solo telecomando:

git fetch <remote>

Potrebbe essere il caso che si può anche utilizzare

git remote update <remote>

per fare la stessa cosa, ma come ho già detto nel paragrafo precedente, la documentazione per git remote update è chiaro sul fatto che è possibile prendere qualcosa di diverso da un singolo gruppo di telecomandi con il comando.

Wrapup

Come ho spiegato, git fetch e git remote update comportano in modo simile per quanto riguarda il recupero da più telecomandi. Essi condividono sintassi e gli argomenti simili, anche se git fetch è più breve, in modo dapersone probabilmente trovano più facile ed uso.

Può essere il caso che git remote update non può essere utilizzato per andare a prendere solo un unico telecomando come con git fetch, ma, come ho sottolineato, la documentazione non chiarire questo punto.

Oltre

La duplicazione di funzionalità tra comandi porcellana Git, esemplificato da git fetch e git remote update sopra, non è unica. Ho notato una situazione simile con git rebase --onto e git cherry-pick , in quanto entrambi possono adottare una serie di commit di patch su una nuova base commesso.

Credo che, come Git è evoluta nel corso degli anni, alcune funzionalità era (inevitabilmente?) Duplicato, forse a volte come una comodità per gli utenti finali (ad esempio, è più semplice passare un intervallo per cherry-pick, che passare un singolo commettere più e più volte per scegliere un intervallo). A quanto pare cherry-pick non sempre accettare una serie di commit, come spiegato nel rilascio v1.7.2 note :

  

git cherry-pick imparato a prendere una serie di commit (ad esempio cherry-pick A..B e cherry-pick --stdin), così ha fatto git revert; questi non supportare il più bello rebase [-i] controllo di sequenziamento ha, però.

Altri suggerimenti

Sì e no. git remote update recupera da tutti i telecomandi, non uno solo.

Senza guardare il codice per vedere se remote update è solo uno script di shell (possibile) che, in fondo, corre recuperare per ogni distanza. git fetch può essere molto più granulare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top