2009-03-16 3 views
7

J'ai deux petits git repos. Les projets ont tous deux démarré à partir de différents points mais ont convergé vers un très similaire (mêmes noms de fichiers, structure de dossiers, etc.). L'un n'est pas une branche de l'autre, mais l'un peut être considéré comme une évolution de l'autre.Est-il possible de fusionner deux dépôts git de structure identique alors qu'ils n'ont jamais eu d'historique commun?

Ce serait bien si je pouvais fusionner les deux afin que repo2 est la suite de repo1. Est-ce possible, tout en ajoutant l'historique de repo2 à la fin de repo1?

Répondre

7

Vous pouvez fetch one into another:

$ cd project1 
$ git config remote.project2.url /path/to/project2 
$ git config remote.project2.fetch 'refs/heads/*:refs/project2/*' 
$ git fetch project 

Cela vous donnera deux (ou plus) branches, contenant l'histoire de la project1 et Projet2. Ils sont encore complètement indépendants, il suffit d'utiliser le même magasin d'objets.

Puis (non testé), vous pouvez utiliser un fichier de greffe (.git/info/grafts) où vous pouvez remplacer le parent d'un commit (comme le premier de Projet2 ayant pour parent le dernier de project1)

Comme Dustin dit dans les commentaires, une rebase est en ordre afin de la "rendre permanente", en rejouant project2 commits sur project1.


Vous avez une autre illustration dans cette entrée de blog « Using Git within a project (forking around) », en particulier la section « Comment tirer des amis et influencer les gens ». Encore une fois:

git checkout two_point_ooh 
git remote add strelau git://gitorious.org/ruby-on-rails-tmbundle/mainline.git 
git checkout -b strelau/two_point_ooh 
git pull strelau two_point_ooh 

est un processus similaire, mais pour les dépôts qui sont en forme de fourche (qui est pas exactement votre cas)

+0

Notez que vous devez changer la base après la greffe sorte de le rendre « permanent ». – Dustin

Questions connexes