2017-05-17 1 views
0

Lorsque je récupère mon projet git qui utilise des sous-modules, les sous-modules ont une tête détachée. J'ai lu beaucoup de messages ici sur stackoverflow et ils disent que ce problème devrait être résolu - donc je fais quelque chose de mal, mais je ne peux pas détecter quoi.Sous-modules Git encore avec tête détachée

C'est ce qui se passe:

M.Grunwald % git clone -b BranchName ssh://[email protected]:7999/~m.grunwald/repo_with_submodules.git some_repo 
Cloning into 'some_repo'... 
remote: Counting objects: 26, done. 
remote: Compressing objects: 100% (26/26), done. 
remote: Total 26 (delta 9), reused 0 (delta 0) 
Receiving objects: 100% (26/26), done. 
Resolving deltas: 100% (9/9), done. 
M.Grunwald % cd some_repo 
M.Grunwald % cat .gitmodules 


[submodule "Library/MyLib"] 
     path = Library/MyLib 
     url = ssh://[email protected]:7999/~m.grunwald/my_lib.git 
     branch = BranchName 


M.Grunwald % git submodule init 
Submodule 'Library/MyLib' (ssh://[email protected]:7999/~m.grunwald/my_lib.git) registered for path 'Library/MyLib' 
M.Grunwald % git submodule update --remote 
Cloning into 
'/cygdrive/c/Users/m.grunwald/Documents/TMP/some_repo/Library/MyLib'... 
Submodule path 'Library/MyLib': checked out '5c665e00cca5eb24d9b615294807520a6036fa90' 
git submodule update --remote 4.31s user 10.61s system 10% cpu 2:21.52 total 
M.Grunwald % cd Library/MyLib 
M.Grunwald % git status 
HEAD detached at 5c665e0 
nothing to commit, working tree clean 

Ainsi, les .gitmodules contient le sous-module, y compris "branche = branchname" et je l'appelle mise à jour avec --remote ... submodule Ce qui manque encore?

% git --version version git 2.12.3

C'est ce qui se passe si je passe à BRANCHNAME (CWD est some_repo/Library/MyLib):

M.Grunwald% git branch -r 
    origin/HEAD -> origin/master 
    origin/BranchName 
M.Grunwald % git checkout BranchName 
Branch BranchName set up to track remote branch BranchName from origin. 
Switched to a new branch 'BranchName' 
M.Grunwald % git status 
On branch BranchName 
Your branch is up-to-date with 'origin/BranchName'. 
nothing to commit, working tree clean 
M.Grunwald % cd .. 
M.Grunwald % .. 
M.Grunwald % git status 
On branch BranchName 
Your branch is up-to-date with 'origin/BranchName'. 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 
    (commit or discard the untracked or modified content in submodules) 

     modified: Library/MyLib (new commits) 

M.Grunwald % git diff Library/MyLib 
diff --git a/Library/MyLib b/Library/MyLib 
index 1341b30..5c665e0 160000 
--- a/Library/MyLib 
+++ b/Library/MyLib 
@@ -1 +1 @@ 
-Subproject commit 1341b30ae55df1afc7265a9110fbf09661dd627b 
+Subproject commit 5c665e00cca5eb24d9b615294807520a6036fa90 
+0

Quelle version de Git utilisez-vous? –

+0

Et si vous vérifiez 'BranchName' dans votre sous-module, voyez-vous un changement dans le superprojet? –

+0

Bonjour Nils, s'il vous plaît voir ma mise à jour – Markus

Répondre

0

semble normal pour moi. Quel est exactement votre problème? Un sous-module est toujours dans un état de tête détaché, même s'il est correctement configuré pour suivre une branche (voir le lien ci-dessous). Lorsque vous changez de branche dans votre référentiel parent, vous devez exécuter git submodule update pour mettre à jour vos sous-modules à la validation de la nouvelle branche, si elle est différente.

De this answer, qui semble adresse exactement ce que vous voulez savoir:

Notez que le résultat, pour chaque sous-module mis à jour, sera toujours un détaché tête, comme note Dan Cameron dans sa réponse.