Підмодуль Git показує нові коміти, статус підмодуля нічого не вимагає


47

У сховищі git я створив мій файл .gitmodules для посилання на сховище github:

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

коли я 'git status' на цьому репо, він показує:

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)

Якщо я входжу в src / repo і git status на repo, він говорить, що робити нічого немає.

Чому моє гіпо репо на найвищому рівні скаржиться?

Відповіді:


42

Це тому, що записи Git, які здійснюють (не гілка чи тег, точно один коміт, представлений у хеші SHA-1), повинні перевірятися для кожного підмодуля. Якщо ви щось зміните в підмодулі dir, Git виявить це і закликає вас здійснити ці зміни в репортації верхнього рівня.

Запустіть git diffу сховище верхнього рівня, щоб показати, що насправді змінило думку Git. Якщо ви вже зробили деякі підкоди у своєму підмодулі (таким чином «очистіть» у підмодулі), він повідомляє про хеш-зміну підмодуля.

$ 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

В іншому випадку він показує -dirtyхеш-зміни, які ви не можете встановити або здійснити в сховищі верхнього рівня. git statusтакож стверджує, що субмодуль має неперевірений / модифікований вміст.

$ 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")

Щоб оновити, які записи фіксів слід перевірити для підмодуля, вам потрібно git здійснити підмодуль на додаток до внесення змін у підмодуль:

git add src/repo

1
Що робити, якщо я не хочу додавати жодних комісій у основний репо? Моя справа використання - у мене є основний сховище, тоді я маю його вікі, який також є сховищем (як це доступно в GitHub та Bitbucket). Тепер я додав wikiяк підмодуль у вікі каталогу . Я не хочу, щоб будь-які мої зміни з wiki(тобто каталогу wiki ) відображалися в моєму основному сховищі / коді. Чи варто просто додати .gitmodules шлях до мого .gitignoreосновного сховища? Як мені це робити?
yadav_vi

14
У моєму випадку все, що мені потрібно було, - це оновити сам підмодуль з основного репо. Щось на кшталт:git submodule update src/repo
Agustín Amenabar

19

Я щойно зіткнувся з цим самим класом проблем, і мені вдалося використати рішення, запропоноване @AugustinAmenabar, у розділі коментарів прийнятої відповіді. Моє налаштування було трохи складніше, тому я додав --recursiveпрапор, щоб довести всі залежності до сучасності.

git submodule update src/repo --recursive

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.