git 저장소에서 github 저장소를 참조하도록 .gitmodules 파일을 설정했습니다.
[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에 CD를 넣고 repo의 git 상태를 보면 커밋할 것이 없다고 나옵니다.
내 최상위 git 저장소가 왜 불평합니까?
답변1
방금 같은 문제가 발생하여 제공된 솔루션을 사용할 수 있었습니다.@어거스틴 아메나바르허용된 답변의 댓글 섹션에 있습니다. 내 설정은 약간 복잡하므로 --recursive
모든 종속성을 최신 상태로 유지하기 위해 플래그를 추가했습니다.
git submodule update --recursive src/repo
답변2
이는 Git이 각 하위 모듈(브랜치나 태그가 아니라 SHA-1 해시로 표시되는 커밋)에 대해 어떤 커밋을 체크아웃해야 하는지 추적하기 때문입니다. 하위 모듈 디렉터리에서 무언가를 변경하면 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 commit해야 합니다.
git add src/repo
답변3
여기에 있는 답변 중 어느 것도 내 문제를 해결하지 못합니다.
이곳은 나에게 맞는 것을 기록/공유하는 곳입니다. 다른 사람에게 도움이 되기를 바랍니다.
처음에 내 서브모듈은 커밋 A에 있었습니다.(메인 저장소에 서브모듈을 추가하는 경우), 그런 다음 브랜치를 체크아웃하고(라고 부르겠습니다 new-submodule-branch
) B와 C를 여기에 커밋하고 원격(github.com)으로 푸시합니다.
이것을 게시한 후 내 주요 저장소가 표시되기 시작했습니다.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: <submodule_name> (new commits)
기본 저장소 루트에서 실행하면 git submodule update --remote --init --recursive
커밋 A에 대해 하위 모듈의 HEAD가 분리된 상태로 계속 되돌아갑니다.
그런 다음 분기 값을 new-submodule-branch
다음과 같이 설정합니다.<MainRepo>/.gitmodules
[submodule "<submodule_name>"]
path = <submodule_name>
url = [email protected]:ProProgrammer/<submodule_name>.git
branch = new-submodule-branch
이것을 게시하면 git submodule update --remote --init --recursive
커밋 A에 대해 실행할 때 더 이상 하위 모듈의 HEAD가 분리된 상태로 되돌아가지 않지만 여전히 불쾌한 콘텐츠가 계속 표시됩니다.
modified: <submodule_name> (new commits)
지금까지 나는 공식을 팔로우하고 있었습니다.하위 모듈에 대한 git 참조, 이제 좀 더 인터넷 검색을 하기로 결정했고 우연히 다음과 같은 제목의 기사를 발견했습니다.git 하위 모듈이 분기를 추적하도록 허용, 이는 명확하게 보여줍니다.
이 상황을 방지하려면 원격 분기의 최신 코드에 대한 하위 모듈 커밋 참조를 업데이트해야 합니다.
그래서 결국 나는 피하려고 했던 일을 했습니다.
git add <submodule_name>
git commit --amend --no-edit # I combined this with the previous commit where I added the 'branch' value in .gitmodules
원격(제 경우에는 github.com)으로 푸시한 후의 모습을 보려면 다음과 같은 정확한 커밋을 볼 수 있습니다.여기