Unisci il repository git nel ramo di un altro repository


122

Dato repo Foo e repo Bar. Voglio unire Bar con Foo, ma solo in un ramo separato, chiamato baz.

git checkout -b baz <= metti qui il repository Bar.

Risposte:


231

Non puoi unire un repository in un ramo . Puoi unire un ramo da un altro repository a un ramo nel tuo repository locale. Supponendo che tu abbia due repository fooed barentrambi situati nella tua directory corrente:

$ ls
foo bar

Cambia nel foorepository:

$ cd foo

Aggiungi il barrepository come remoto e recuperalo:

$ git remote add bar ../bar
$ git remote update

Crea un nuovo ramo baznel foorepository basato su qualunque sia il tuo ramo attuale:

$ git checkout -b baz

Unisci il ramo somebranchdal barrepository al ramo corrente:

$ git merge --allow-unrelated-histories bar/somebranch

( --allow-unrelated-historiesnon è richiesto prima della versione 2.9 di git)


21
poiché git 2.9 probabilmente dovrai aggiungere --allow-unrelated-historiesal comando git merge.
Drasill


10
Non ho idea di cosa sto facendo e non posso davvero leggerlo con i segnaposto foo / bar. Qualcuno può modificarlo con esempi di vita reale (come i collegamenti ove appropriato e simili)?
rien333

Ooh, questo è fantastico. Preferirei unirlo in una sottodirectory. Non può essere così diverso, vero? Preferirei aggiungere quel passaggio.
martedì

1
Ottengo tonnellate di conflitti di unione. Comunque potresti forzare la fusione in un nuovo ramo?
nomadoda

41

Aggiornato con comandi "reali":

Inizia dalla directory del repository, assicurati che la tua copia di lavoro sia pulita (nessun file modificato, aggiunto o rimosso).


Crea un nuovo ramo:

git checkout -b <my-branch>

Aggiungi il telecomando secondario, quindi recuperalo:

git remote add <repo-name> git@github.com:xxx/<repo-name>.git
git remote update

Unisci uno dei loro rami nel tuo ramo attuale:

git merge <repo-name>/<their-branch>


Se non sai quale <their-branch>vuoi, allora vaimaster

Se sei sicuro di voler accettare tutte le modifiche remote ed evitare conflitti ( sovrascrivi le tue ), puoi specificare -X theirscome opzione git mergenell'ultimo passaggio.

Se vuoi aggiungerlo in una sottodirectory, probabilmente dovresti usare i sottomoduli git


3

Usando la guida di larsks, sono stato in grado di farlo usando SourceTree.

  1. Creato un ramo nel repository di destinazione
  2. Aggiunto il repository sorgente come remoto, premendo il pulsante Impostazioni e aggiungendo il repository sorgente.
  3. I rami di entrambi i repository ora vengono visualizzati nell'elenco dei rami. Ho usato lo strumento di unione per unire un ramo dal repository di origine al ramo del mio nuovo repository di destinazione.
  4. Risolti eventuali conflitti utilizzando SourceTree o il mio IDE
  5. Conferma i cambiamenti nel mio ramo.
  6. Rimuovere il repository di origine dall'elenco remoto, utilizzando il pulsante Impostazioni.
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.