O submódulo Git mostra novas confirmações, o status do submódulo não diz nada para confirmar

28

Em um repositório git, eu configurei meu arquivo .gitmodules para referenciar um repositório github:

[submodule "src/repo"]
    path = src/repo
    url = repourl

quando eu git status 'neste repo, ele mostra:

On branch master
Your branch is up-to-date with 'origin/master'.

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)

modified:   src/repo (new commits)

Se eu fizer cd no status src / repo e git no repositório, ele diz que não há nada para confirmar.

Por que meu repositório do Git de nível superior está reclamando?

    
por Catherine Holloway 09.07.2015 / 16:12

2 respostas

26

É porque o Git registra qual commit (não uma ramificação ou uma tag, exatamente uma confirmação representada no hash SHA-1) deve ser registrada para cada submódulo. Se você alterar algo no submódulo dir, o Git irá detectá-lo e pedir que você faça essas alterações no repositório de nível superior.

Execute git diff no repositório de nível superior para mostrar o que realmente mudou o Git pensa. Se você já fez alguns commits no seu submódulo (portanto, "limpo" no submódulo), ele relata a mudança de hash do submódulo.

$ git diff
diff --git a/src/repo b/src/repo
index b0c86e2..a893d84 160000
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit a893d84d323cf411eadf19569d90779610b10280

Caso contrário, ele mostrará -dirty hash change que você não pode preparar ou confirmar no repositório de nível superior. git status também afirma que o submódulo tem conteúdo não rastreado / modificado.

$ git diff
diff --git a/src/repo b/src/repo
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea-dirty

$ git status
On branch master
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:   src/repo (untracked content)

no changes added to commit (use "git add" and/or "git commit -a")

Para atualizar quais registros de confirmação devem ser verificados para o submódulo, você precisa confirmar o submódulo, além de confirmar as alterações no submódulo:

git add src/repo
    
por 11.07.2015 / 12:59
10

Acabei de me deparar com esta mesma classe de problemas e consegui utilizar a solução oferecida por @AugustinAmenabar na secção de comentários da resposta aceite. Minha configuração foi um pouco mais complexa, então adicionei o sinal --recursive para atualizar todas as dependências.

git submodule update src/repo --recursive

    
por 28.01.2017 / 00:32

Tags