2017-08-30 1 views
-1

Nous nous retrouvons avec 2 repo différents avec une histoire différente car deux personnes ont commencé leur propre repo et maintenant il est temps de fusionner.Fusion de deux référentiels différents avec des historiques différents

Le code de démarrage est le même et seulement deux git init et remote différents.

donc la condition est développeur D1 a commencé et sa mise en pension est:

Démarrer-> A> B> C>

Developer D2 a commencé et sa mise en pension est:

start-> Z-> Y-> X-> 0->

Maintenant, il est souhaitable d'avoir une branche commune pour les deux repo à tirer qu'ils peuvent fusionner leur propre branche pour un nouveau travail.

Leur travail est principalement séparé avec de petits conflits qui peuvent être résolus manuellement.

Quelle commande ou quel processus devrait être le meilleur?

+0

double possible de [Comment fusionner-vous deux dépôts Git?] (Https://stackoverflow.com/questions/1425892/how-do-you-merge-two-git-repositories) – kowsky

+0

pas sa question différente. le SDK initial est le même ici. Les deux désirent avoir une branche qui est commune et ils peuvent fusionner localement et ensuite pousser à la branche commune. – coder007

+0

Copie possible de [Fusionner deux référentiels git du même projet] (https://stackoverflow.com/questions/33669726/merge-two-git-repositories-of-same-project) – phd

Répondre

0

Ma suggestion est juste pour obtenir un des repo en tant que principal (disons dit premier repo), créer une succursale (laisse dit le autre-repo), puis sauvegarde/copie (pas de commande git , juste une copie ordinaire) la pointe de l'autre-repo dans le répertoire de travail du premier repo étant le le autre-repo à la tête, valider les modifications et la fusion le autre -repo branche dans la tête de la branche "maître" du premier-repo.

Si vous souhaitez conserver l'historique des validations, vous pouvez effectuer une réinitialisation.

+0

Oui, cela fonctionne, mais le point ici est à la fois veulent avoir de l'histoire et, si possible, ne veulent pas obtenir de nouveaux repo. ils veulent juste continuer si possible avec leur propre git. – coder007

+0

@ coder007 Vous pouvez ensuite faire un rebase. –

+1

En fait, vous pouvez * fusionner deux commits sans base commune. Git avait l'habitude de le faire sans avertissement. maintenant vous avez besoin de '--allow-unrelated-histories' (voir [la réponse de David Guan] (https://stackoverflow.com/a/45951036/1256452)). Dans les deux cas, ce que Git utilise comme "base commune" est en réalité l'arbre vide, de sorte que les deux conseils de branche (par rapport à cette base de fusion synthétique) consistent entièrement en "ajouter tous les fichiers". C'est parfois ce que vous voulez, et parfois non. – torek

0

Ma suggestion:
Il peut être fait dans le repo de D1 ou de prise en pension de D2:

Pour le côté D2

git remote add [name-for-D1-repo] [D1-repo-url] 
git fetch --all 
git merge [name-for-D1-repo]/[D1-working-branch] --allow-unrelated-histories 
+0

Typo trivial: c'est 'git fetch --all'.L'indicateur '--allow-unrelated-histories' est new-ish; Si 'git merge' le rejette, vous avez simplement un Git plus ancien qui assume le drapeau à tout moment. – torek