Combiner 2 dépôts git, conserver l'historique des fichiers, ne pas conserver l'historique des commit

Je veux combiner 2 dépôts git, et je veux conserver l'historique des fichiers mais je ne veux pas conserver l'historique des commit. En d'autres termes, je veux garder les changements au fil du temps, mais je ne me soucie pas des sommes de contrôle SHA. Je n'aurai pas besoin des anciens dépôts après la fusion.

Les réponses aux questions suivantes ne m'aident pas, parce que je me retrouve toujours avec un repo avec deux racines et un historique de commit séparé:

Ce que je veux faire, c'est exactement le contraire de Détacher (déplacer) sous-répertoire dans un dépôt Git séparé , où git subtree est utilisé pour filtrer toutes les validations qui affectent les fichiers d'un sous-répertoire.

Mes deux référentiels ont une structure de répertoires qui se chevauchent, mais pas de chevauchement de fichiers (sauf pour .gitignore et .gitattributes ) et je veux les fusionner à la racine d'un référentiel.

Les deux référentiels ont des balises qui ont un schéma de dénomination légèrement différent, mais pointent vers une version spécifique. Par exemple, repoA a les étiquettes A-1.0.0, A-1.0.1 et repoB a les étiquettes B-1.0.0, B-1.0.1. Je ne me soucie pas vraiment des commits entre les tags, les différentes branches ou une branche, mais sur les tags il doit y avoir un point de fusion en quelque sorte.

La seule idée que je puisse trouver jusqu'ici peut fonctionner (j'ai essayé tout ce que je pouvais trouver avec des sous-arbres et des fusions):

  1. ajouter repoB en tant que distant
  2. ajouter une branche dans repoA (mergeB) à un point de l'histoire avant la balise A-1.0.0
  3. cherry-choisissez les commits de repoB jusqu'à tag B-1.0.0 sur la branche mergeB
  4. Caisse A-1.0.0
  5. fusionner branche fusionnéeB
  6. cherry-pick chaque commit de repoA de l'ancien tag A-1.0.0 + 1 jusqu'à l'ancien HEAD
  7. branchez à nouveau
  8. répétez les étapes 3 à 7 pour les balises suivantes
  9. quand tout est fait, faites un rebasage (peut-être interactif) pour nettoyer les choses

Cela ressemble à beaucoup de travail manuel, y at-il une meilleure façon de le faire?

0

1 Réponses

Essayez les étapes suivantes. Vous copiez essentiellement les fichiers de l'un à l'autre, puis commencez avec un nouveau repo. Alternativement, init dans un troisième emplacement et copiez les deux anciens.

git clone repo1 a
git clone repo2 b
cp -r a b
rm -rf a/.git
rm -rf b
cd a
git init

BTW, il existe des outils pour convertir snv en Git qui va préserver l'histoire, alors peut-être que vous devriez enquêter sur les utiliser.

0
ajouté
Je pense que je n'étais pas clair. Je souhaite conserver l'historique des fichiers, mais je ne souhaite pas conserver les hachages de validation. La conversion de svn en git s'est très bien passée, ce qui est implicite par le fait que mes dépôts git ont des tags. En fait, qu'ils viennent de svn n'est pas pertinent et déroutant, alors je vais l'éditer.
ajouté l'auteur Amedee Van Gasse, source