Differenze tra git aggiornamento remoto e recuperare?
-
13-09-2019 - |
Domanda
È git remote update
l'equivalente di git fetch
?
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 fannogit remote update
egit remote prune
meno necessaria (non esiste un piano per rimuovereremote update
néremote 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 esempiocherry-pick A..B
echerry-pick --stdin
), così ha fattogit revert
; questi non supportare il più bellorebase [-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.