En provenance de CVS, nous avons un répertoire de packages, qui contient des référentiels .git uniques pour chaque package. Malheureusement, ils ne sont pas aussi indépendants que les propriétaires CVS d'origine pensaient, donc généralement ils sont tous retirés ensemble et combinés en un ensemble complet dans n'importe quel système de gestion de versions que vous utilisez en tant que développeur.Combinaison de plusieurs référentiels .git tout en conservant les informations de validation basées sur les fichiers
Combining multiple git repositories et http://progit.org/book/ch6-7.html m'a déjà dit comment les combiner dans un seul référentiel de .git, donc au lieu de:
packages/intranet-asus-client/.git
packages/intranet-timesheet/.git
packages/intranet-core/.git
il ressemble
packages/.git
packages/intranet-core (without .git, and so on).
git log
en paquets me montre l'ensemble commit histoire (grande), mais ce qui manque est:
- Fichier b ased histoire git comme
git log --pretty=oneline -- intranet-core/intranet-core.info
. Il ne me montre que les commits que j'ai faits dans le dépôt combiné (ce qui signifie en/packages/.git
) - Aucune branche ou étiquette. J'ai l'intuition que je devrais créer une branche dans
/packages/.git
pour chaque branche présente dans/packages/acs-kernel/.git
et ainsi de suite. Mais qu'en est-il des tags?
Ou est-ce un de ces excellents exemples où les sous-modules seraient vraiment utiles? Malheureusement, cela signifie pour nous (comme nous faisons des correctifs clients réguliers pour les paquets) que nous aurions à fork (nous utilisons github ....) tous les paquets .git remote repository dans un dépôt privé et utiliser nos propres branches clientes là. Bien que ce soit génial pour github (plus d'argent), c'est moins pratique pour nous. Y at-il une solution à notre problème, peut-être avec des scripts exécutant une série de commandes git pour assembler correctement les branches et plus important encore refaire tous les commits dans le nouveau répertoire packages avec horodatage et author, donc il semble que les commits où fait-il tout au long de la place des sous-arbres? Ou est-ce que j'utilise juste le git log d'une manière incorrecte?
La stratégie de fusion de sous-arborescence est certainement plus adaptée dans votre cas que les sous-modules. – VonC
Utiliser '--follow' dans votre exemple' git log' devrait fonctionner, mais le tester moi-même ne semble pas fonctionner. (En effet, Jakub Narebski a [rapporté ceci à la liste de diffusion git] (http://lists-archives.org/git/658126-git-log-follow-filename-doesn-t-follow-across-subtree-strategy- merge.html).) –