Nous avons 3 référentiels distincts de git (chacun avec certaines branches) que nous aimerions combiner en une histoire complète et la capacité d'accéder aux branches, comme si:
C'est ce que nous avons. 3 REPOS: P>
super/.git super/A super/B
3 Réponses :
Probablement le moyen le plus simple de le faire est d'utiliser Sumouules . Il ne parle pas exactement au cas que vous cherchez à réaliser, mais c'est fouier et non très mal de tête. P>
Créez simplement un nouveau répertoire et gitez-le comme votre «Super» Repo. Ajoutez ensuite dans vos repos A, B et C à l'aide des commandes données sur le lien ci-dessus. P>
Merci, nous sommes au courant des sous-modules, mais ils ne sont pas une option. J'ai ajouté cette information à ma question initiale.
Vous ne voulez pas que vous ne voulez pas que vous tirez vos cheveux avec toutes les commandes de mise à jour de la sous-module GIT, vous émettez. Vous devrez également émettre 3 commandes de journaux git au lieu d'un pour voir ce qui s'est passé dans une certaine quantité de temps.
Apportez toutes les histoires dans un seul repo. Utilisez la branche filtrante pour réinitialiser les répertoires que chaque historique des repos réside. Il n'y a pas besoin de coudre. Vous pouvez simplement fusionner à tout moment une fois la branche de filtre. P>
essentiellement repoa / maître, repob / maître et le député / maître / maître / le nouveau repo que vous faites (bien que vous puissiez commencer par l'un des eux). Après avoir appliqué une branche de filtre, chaque arbre de chaque commit aura un nouveau nœud racine qui sera un répertoire (A pour les branches de repoa, B pour les branches de repousses, etc.). P>
ou p>
git checkout -b newbranch --root git log --all --format=%ad%H | sort | cut -c10- | xargs -n 1 git cherry-pick
HM, genre de ... Si nous le faisons, nous nous retrouvons avec 3 arbres non liés qui fusionnent une sur notre point actuel. Maintenant, lorsque vous vérifiez une révision antérieure qui appartient à l'un des anciens repos, nous n'avons que des fichiers de ce référentiel. Comme mentionné ci-dessus, nous aimerions que d'autres fichiers présents au moment de cette révision (même si d'autres repos originaux) sont là aussi. Et Git-Stitch-Repo fait ce que nous voulons, mais est évidemment buggé car certains fichiers / commits aléatoires sont manquants après le point ..
Merci pour la 2e option, mais je dois dire que nous n'avons pas essayé. Nous avons passé trop de temps à ce sujet déjà et cela n'a pas semblé trop prometteur. Nous sommes enfin allés avec une simple fusion des succursales non liées, ce qui signifie que lorsque nous allons nous engager dans le temps, nous ne verrons qu'une branche.
Il est possible, mais en raison de l'aplatissement nécessaire pour les faire interstirez correctement, vous jetraîneriez probablement des informations historiques utiles. Meilleurs voeux.
Splice_Repos est un outil que j'ai écrit que les entrelaves s'engagent à partir de référentiels différents dans un nouveau référentiel, de sorte que les branches idées-nommées obtiennent des histoires fusionnées (comme elles se sont engagées dans l'ordre historique), plutôt que de simplement être fusionnées à la fin avec des histoires distinctes sur différents branches. Il y a un Entrée de blog décrivant la justification derrière elle. P>
Le lien vers le blog est en panne.
@reto - C'est pour moi, pouvez-vous vérifier à nouveau?
Le lien du blog donne maintenant un "serveur introuvable". Voici un lien vers la version d'archive Web: web.archive.org/web/20160328125607/http://westmarch.sjsoft.comm om / ...
Avez-vous essayé l'une des autres méthodes suggérées dans cette question (combinant plusieurs référentiels GIT)? Il y a plusieurs options présentées là-bas.
Oui. Aucun d'entre eux ne semble faire ce que Git-Stitch-repo fait, qui s'inscrit vraiment les engagements dans un ordre en temps voulu afin que le repo résultant se sent totalement comme s'il comprenait toutes les parties du début. Seulement, comme mentionné, Git-Stitch-Repo quitte au hasard des fichiers ..
Ok alors, faites un fichier de
git journal --format =% d% h code> de chaque branche. Pipe cela par triez alors à Xargs et à git Cherry-Choisissez sur une nouvelle branche. Vous voudrez peut-être attirer d'abord les histoires avec Rebase.Compte tenu de votre dernier commentaire, j'ai ajouté un lien vers un outil que j'ai écrit que peut le faire; simplement rebasting et tri ne suffisent pas pour moi lorsqu'il s'agit de beaucoup de branches et de faire cela progressivement