git submodule commit / push / pull
Je voudrais utiliser git sous-module.
Les étapes que je dois suivre pour pousser mes changements de mon projet sont
- ajouter/commit/push de sous-module répertoire
- ajouter/commit/push à partir du répertoire parent
Étapes que je dois suivre pour extraire les modifications de mon projet.
- git pull de répertoire parent
- git sous-module de mise à jour du répertoire parent
Étapes pour mettre à jour le sous-module original de son repo
- git pull de sous-module répertoire
Ce qui m'inquiète est le suivant extrait du http://git-scm.com/book/en/Git-Tools-Submodules
Le problème est qu'en général, ne veulent pas d'un décollement de la TÊTE
de l'environnement, car il est facile de perdre les modifications. Si vous n'avez une première
sous-module de mise à jour, s'engager dans ce sous-module répertoire sans créer de
une branche de travail, puis lancez la commande git sous-module de mise à jour à nouveau à partir de la
superproject sans s'engager dans l'intervalle,(?? mise à jour/validation/mise à jour va perdre changement?) Git va écraser
vos modifications sans vous le dire. Techniquement, vous ne perdrez pas le travail,
mais vous n'aurez pas une branche vers celui-ci, de sorte qu'il sera un peu
difficile à récupérer.Pour éviter ce problème, créez une branche lorsque vous travaillez dans un sous-module
répertoire avec la commande git checkout-b de travail ou quelque chose d'équivalent. Lorsque vous
ne le sous-module de mise à jour un deuxième temps, il sera toujours revenir à votre travail,
mais au moins, vous avez un pointeur pour revenir à.
Je vais modifier submodules et ne veux pas gâcher, le doc ci-dessus mentionne brièvement la possibilité de perdre de changer, et je ne comprends pas ce qui peut provoquer la perte.
Je me demande quelles mesures supplémentaires de plus que j'ai énumérés ci-dessus j'ai besoin de prendre pour prévenir l'
la perte de.
En particulier, plusieurs membres de l'équipe de modifier les submodules, ce dont ils ont besoin pour ne pas gâcher?
source d'informationauteur eugene
Vous devez vous connecter pour publier un commentaire.
J'aimerais partager mes expériences avec vous comme quelqu'un qui travaille avec les projets externes dans des solutions Visual Studio pour essayer de résoudre un problème similaire. Je suis relativement nouveau à git, donc si quelqu'un a des critiques constructives, j'apprécierais que.
Si vous utilisez Visual Studio, la Source de Git Fournisseur de Contrôle de l'extension est gratuite (http://visualstudiogallery.msdn.microsoft.com/63a7e40d-4d71-4fbb-a23b-d262124b8f4c), et semblait récursive de commettre des submodules quand je l'ai testé.
CEPENDANT, je suis en utilisant VS Web Developer Express à la maison pour le développement, donc je ne veux pas compter sur une extension (je pense aussi que c'est bon d'avoir une idée de ce qui se passe sous le capot). Par conséquent, j'ai été forcé de comprendre les commandes, et j'ai ajouté quelques notes ci-dessous.
NOTES
Si vous ne l'avez pas déjà fait, avoir une très bonne lecture à travers http://git-scm.com/book/en/Git-Tools-Submodules. Il ya quelques mises en garde, et je vais revenir à cette page. Si vous essayez de travailler avec des submodules sans cette lecture, vous serez vous donner un mal de tête très rapidement.
Mon approche suit ce tutoriel, avec quelques extras: http://blog.endpoint.com/2010/04/git-submodule-workflow.html
Une fois que vous avez votre superproject initialisé (par exemple
git init
&&git remote add origin ...
), commencer à ajouter vos submodules comme suit:Vérifier que votre .gitmodules fichier reflète cet ajout, par exemple,
Passer à votre sous-module répertoire (c'est à dire
cd extension
). Exécuter:J'ai fait un changement d'ici à README.txt j'ai donc pu commettre (c'est aussi je voudrais donc avoir une trace de ce que je faisais dans ce commit), puis engage le module d'appliquer la branche (toujours dans le sous-module de répertoire):
Maintenant, allez dans le superproject (c'est à dire
cd ..
). Vous aurez également besoin de s'engager ici (si vous regardez le git sous-module de la page je l'ai mentionné, il explique pourquoi cela est nécessaire):Maintenant, nous pouvons recusively pousser nos projets comme si requis:
Vous aurez besoin de courir à travers les étapes ci-dessus, une fois pour toutes votre submodules.
Une fois que vous avez fait cela pour tous vos submodules et a commencé à faire des changements que vous voulez faire un commit et push, vous pouvez utiliser:
Unfortunaly je n'ai pas trouvé une façon récursive de s'engager sans l'aide de quelque chose comme
git-slave
(quelqu'un?), donc, vous devez ensuite aller dans chaque sous-module répertoire et exécuter régulièrement de s'engager pour les fichiers que vous venez d'ajouter. Dans le superproject:Une fois que le sous-module est de la validation, vous aurez également besoin de commettre la superproject (encore une fois), donc:
Cela peut devenir un peu ennuyeux (parce qu'en fin de commettre deux fois), mais une fois que vous êtes au courant qu'il est en fait pas si mal (car elle vous oblige à vérifier ce que vous avez commis dans chaque projet). Juste mon avis - si vous avez isolé certains de vos superproject de la fonctionnalité dans submodules, il faut travailler dans l'isolement du reste de vos projets, de toute façon (donc publier à des moments différents, tout ennuyeux, c'est pas la fin du monde).
Maintenant, nous pouvons pousser une fois de plus...
Si vous descendez ensuite dans votre sous-module et d'essayer de la pousser à nouveau, vous verrez qu'il ne fera rien tant que le dernier commit a déjà été poussé.
De clonage (ou à l'aide d'une télécommande d'origine) pour un superproject peut également être source de confusion, tels que la nécessité d'exécuter
git submodule update
deux fois aprèsgit submodule init
. Lire le Clonage d'un Projet avec des Submodules section de http://git-scm.com/book/en/Git-Tools-Submodules.Quelque chose qui m'a surpris quand le clonage de mon superproject a été d'obtenir les dernières modifications pour les submodules. Voir Moyen facile de tirer plus tard de toutes les submodules
Mon variante de cette approche consiste à utiliser un "développement" de la branche pour vérifié submodules (mais vous pouvez l'appeler ce que vous voulez), puis de les utiliser dans le superproject:
Lorsque j'ai mis ce que je remplacer à la direction générale, je veux pousser mes modifications sur l'extrait sous-module comme suit:
Je peux confirmer que, lorsque j'ai suivi les étapes ci-dessus, des modifications à la submodules dans un clone à distance/origine du projet (quand on le pousse) a montré dans d'autres clones/distance origines d'un même projet (ne pas oublier que le dernier sous-module de commande de traction).
J'espère que c'était de quelque utilité pour vous.