J'ai deux projets SVN en cours d'utilisation à partir d'un autre référentiel SVN utilisant svn: externals .
Comment puis-je avoir la même structure de mise en page de référentiel dans Git?
J'ai deux projets SVN en cours d'utilisation à partir d'un autre référentiel SVN utilisant svn: externals .
Comment puis-je avoir la même structure de mise en page de référentiel dans Git?
git submodule
peut désormais émulersvn:external
(depuis mars 2013).Réponses:
Git a deux approches similaires, mais pas exactement équivalentes à svn: externals:
Les fusions de sous-arborescences insèrent le code du projet externe dans un sous-répertoire distinct au sein de votre dépôt. Cela a un processus détaillé à configurer et est ensuite très facile pour les autres utilisateurs, car il est automatiquement inclus lorsque le référentiel est extrait ou cloné. Cela peut être un moyen pratique d'inclure une dépendance dans votre projet.
Il est facile d'extraire les modifications de l'autre projet, mais il est compliqué de les renvoyer. Et si l'autre projet doit fusionner à partir de votre code, les historiques de projet sont fusionnés et les deux projets ne font plus qu'un.
Les sous-modules Git ( manuel ) sont liés à un commit particulier dans le référentiel d'un autre projet, un peu comme svn: externals avec un
-r
argument. Les sous-modules sont faciles à configurer, mais tous les utilisateurs doivent gérer les sous-modules, qui ne sont pas automatiquement inclus dans les extractions (ou clones).Bien qu'il soit facile de soumettre des modifications à l'autre projet, cela peut entraîner des problèmes si le dépôt a changé. Par conséquent, il n'est généralement pas approprié de soumettre des modifications à un projet en cours de développement actif.
la source
svn:externals
. Avec la révision 1.5, la syntaxe a été modifiée pour un format plus flexible. L'adressage URL relatif a été ajouté.Comme je le mentionne dans " Git submodule new version update ", vous pouvez obtenir la même fonctionnalité externe SVN avec les sous-modules Git 1.8.2:
C'est suffisant pour qu'un sous-module suive une branche (comme dans le dernier commit d'une branche distante d'un sous-module en amont du dépôt ). Tout ce que vous avez à faire est de:
Cela mettra à jour le sous-module.
Plus de détails sont dans "
git submodule
le dernier suivi ".Pour convertir un sous-module existant en un seul suivi d'une branche : voir toutes les étapes dans " Sous-modules Git: Spécifiez une branche / balise ".
la source
svn:externals
?--depth
mais cela ne résout pas vraiment le problème.J'ai une solution alternative au problème - outil gil (git links)
Il permet de décrire et de gérer des dépendances complexes de référentiels git.
Il fournit également une solution au problème de dépendance des sous-modules récursifs git .
Considérez que vous avez les dépendances de projet suivantes: exemple de graphique de dépendance de référentiel git
Ensuite, vous pouvez définir le
.gitlinks
fichier avec la description de la relation des référentiels:Chaque ligne décrit le lien git au format suivant:
Enfin, vous devez mettre à jour votre référentiel d'exemples racine:
En conséquence, vous clonerez tous les projets requis et les lierez les uns aux autres de manière appropriée.
Si vous souhaitez valider toutes les modifications dans certains référentiels avec toutes les modifications dans les référentiels liés enfants, vous pouvez le faire avec une seule commande:
Les commandes Pull, Push fonctionnent de la même manière:
L'outil Gil (git links) prend en charge les commandes suivantes:
En savoir plus sur le problème de dépendance des sous-modules récursifs git .
la source
gil
.