Git estrae da un altro repository


95

Ho chiamato un repository Generic, che è un'applicazione generica. L'ho biforcato in un repository chiamato Acme, che si basa sul Genericrepository memorizzato dell'applicazione e aggiunge il marchio Acme Co ad esso.

Se apporto modifiche alla funzionalità di base in Generic, voglio aggiornare il Acmerepository con le ultime modifiche apportate alla funzionalità di base in Generic. Come potrei farlo?

Per quanto ne so, sto essenzialmente cercando di unire le modifiche apportate in un repository a monte nel fork corrente.

Se significa qualcosa, sto provando a farlo perché ho un'applicazione generica che poi costruisco e marchio per i singoli clienti (come Acmein questo esempio). Se esiste un modo più pulito per farlo, fammelo sapere.

Risposte:


135

Emetti il ​​seguente comando nel tuo Acmerepository. Aggiunge un nuovo repository remoto denominato upstreamche punta al Genericrepository.

git remote add upstream https://location/of/generic.git

È quindi possibile unire tutte le modifiche apportate al Genericramo corrente Acmecon il seguente comando:

git pull upstream

Se vuoi solo che scarichi le modifiche senza unirle automaticamente, usa git fetchinvece di git pull.

Se desideri disabilitare il push a quel repository, imposta l'URL push su un URL non valido utilizzando qualcosa di simile

git config remote.upstream.pushurl "NEVER GONNA GIVE YOU UP"

Git ora ti sgriderà di non essere in grado di trovare un repo se provi a spingere a upstream(e mi dispiace per il Rickroll, ma è stata la prima stringa casuale che mi è venuta in mente).


6
Eccellente grazie. Solo un'altra cosa: esiste un modo in cui posso rendere questo telecomando di sola lettura, in modo da non finire per spingerlo accidentalmente?
Libbux

1
Ho iniziato a rispondere ma vedo che McLovin ha già modificato la sua risposta per includerla.
Frankie Simon

4
A partire da git 2.9, sarà necessario specificare il flag --allow-unrelated-histories. Vedere stackoverflow.com/a/37938036/3799847
sfinks_29

5
Avevo bisogno di emetteregit pull --allow-unrelated-histories upstream master
Alec Jacobson

Ci ho provato ma si git pull upstreamblocca ... qualche idea?
Paulo Carvalho

6

Per estrarre un particolare ramo da diversi repository è possibile utilizzare il comando git seguente.

git pull <git_url> <branch> --allow-unrelated-histories
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.