Cette GitPro page n'résumer la conséquence d'un git sous-module de mise à jour bien
Lorsque vous exécutez git submodule update
, il vérifie la version spécifique du projet, mais pas à l'intérieur d'une branche. Cela s'appelle avoir un décollement de la tête - la TÊTE de fichier de points directement à la livraison, pas d'une référence symbolique.
Le problème est que vous ne voulez pas travailler dans une maison individuelle à la tête de l'environnement, car il est facile de perdre les modifications.
Si vous faites un premier sous-module de mise à jour, s'engager dans ce sous-module répertoire sans la création d'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, 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.
Note Mars 2013:
Comme mentionné dans "git sous-module de suivi plus tard", un sous-module maintenant (git1.8.2) suivre une direction.
Le reste de cette réponse les détails de la classique de sous-module fonction (référence à un commit).
Pour éviter ce problème, créez une branche lorsque vous travaillez dans un sous-module de répertoire avec la commande git checkout-b de travail ou quelque chose d'équivalent. Lorsque vous faites le sous-module de mise à jour un deuxième temps, il sera toujours revenir à votre travail, mais vous aurez au moins un pointeur de revenir.
La commutation de branches avec des submodules peut aussi être difficile. Si vous créez une nouvelle branche, ajouter un sous-module de là, et puis revenir à une branche sans que le sous-module, vous avez encore le sous-module répertoire comme un sans traces répertoire:
Donc, pour répondre à vos questions:
puis-je créer des succursales ou des modifications et de les utiliser push/pull tout comme je serais en repos régulier, ou il y a des choses à être prudent sur l'?
Vous pouvez créer une branche et de pousser des modifications.
AVERTISSEMENT (à partir de Git sous-module Tutoriel): Toujours publier (push) le sous-module de changement avant de les publier (push) le changement de la superproject la référence. Si vous oubliez de publier le sous-module de changement, les autres ne sont pas en mesure de cloner le dépôt.
comment avance le sous-module référencé commettre de dire (tagged) 1.0 à 1.1 (même si le chef de l'original de la pension de titres est déjà à 2.0)
La page "Comprendre les Submodules" peut aider
Submodules sont mis en œuvre à l'aide de deux pièces en mouvement:
- l'
.gitmodules
le fichier et
- un type spécial d'objet de l'arborescence.
Ces ensemble de trianguler une révision spécifique d'un référentiel spécifique qui est vérifié dans un emplacement spécifique dans votre projet.
Depuis le git sous-module de page
vous ne pouvez pas modifier le contenu de la sous-module de l'intérieur le projet principal
100% correct: vous ne pouvez pas modifier un sous-module, seulement se référer à l'un de ses commits.
C'est pourquoi, lorsque vous modifiez un sous-module de l'intérieur le projet principal, vous:
- besoin de s'engager et de pousser à l'intérieur de la sous-module (à l'amont du module), et
- ensuite, allez dans votre projet principal, et s'engage de nouveau (dans l'ordre pour que le projet principal pour se référer à la nouvelle sous-module s'engager que vous venez de créer et poussé)
Un sous-module vous permet d'avoir une composante de base de l'approche de développement, où le projet principal seulement se réfère à des validations de d'autres composants (ici "autres dépôts Git a déclaré que les sous-modules").
Un sous-module est un marqueur (commit) à un autre dépôt Git qui n'est pas lié par les principaux cycle de développement du projet: (les "autres" repo Git) peuvent évolue de façon indépendante.
C'est le projet principal à choisir que les autres pensions de quoi commettre des besoins.
Cependant, si vous voulez, de commodité, de modifier l'un de ces submodules directement à partir de votre projet principal, Git vous permet de le faire, à condition de la première publication de ces sous-module des modifications à son origine repo Git, et ensuite valider votre projet principal fait référence à une nouvelle version de ladite sous-module.
Mais l'idée principale reste la même: le référencement des composants spécifiques qui:
- ont leur propre cycle de vie
- ont leur propre ensemble de balises
- ont leur propre développement
La liste des changements que vous avez fait référence dans votre projet principal définit votre configuration (c'est ce que la Configuration est la Gestion, qui englobe simple Système de Contrôle de Version)
Si un composant peut vraiment être développé en même temps que votre projet principal (parce que toute modification sur le projet impliquerait la modification de la sous-répertoire, et vice-versa), alors il serait un "sous-module" non plus, mais un sous-arbre de fusion (également présentés dans la question de Transfert de code hérité de la base de cvs à base distribuée), en lien avec l'histoire des deux repo Git ensemble.
Ne fait qu'aider à la compréhension de la véritable nature des Submodules?