[git] Git은 새 하위 모듈을 초기화 / 동기화 / 업데이트하지 않습니다.

다음은 내 .gitmodules파일 내용의 일부입니다 .

[submodule "src/static_management"]
        path = src/static_management
        url = git://github.com/eykd/django-static-management.git
[submodule "external/pyfacebook"]
        path = external/pyfacebook
        url = http://github.com/sciyoshi/pyfacebook.git

그러나 .git/config첫 번째 만 포함합니다.

[submodule "src/static_management"]
        url = git://github.com/eykd/django-static-management.git

두 번째 하위 모듈 ( external/pyfacebook)은 다른 개발자가 기능 분기에 추가했습니다. 나는 지금 개발을 계승했으며 기능 브랜치를 확인했습니다. 그러나 Git은 나를 위해 하위 모듈을 가져 오지 않습니다. 난 노력 했어:

  • git submodule init
  • git submodule update
  • git submodule update --init
  • git submodule sync
  • 모든 서브 모듈 정의를 제거 .git/config하고 실행 git submodule init. 이전에 존재하는 하위 모듈 만 복사하고 새 하위 모듈은 무시합니다.
  • .git/config수동으로 새 하위 모듈 정의를 입력 하고 git submodule update. 이전에 존재하는 하위 모듈 만 업데이트됩니다.

다양한 조합으로 가능하지만 git은의 .git/config새로운 내용을 기반으로 업데이트되지 .gitmodules않으며 external/pyfacebook폴더를 생성 하고 하위 모듈의 내용을 가져 오지 않습니다 .

내가 무엇을 놓치고 있습니까? 수동 개입 (에 수동으로 하위 모듈 항목 추가 .git/config)이 정말로 필요하며 그 이유는 무엇입니까?

편집 : 수동 개입이 작동하지 않습니다. 새 하위 모듈 항목을 수동으로 추가 .git/config해도 아무 일도 일어나지 않습니다. 새 하위 모듈은 무시됩니다.



답변

최근에 git 버전 1.7.0.4로 업그레이드하셨습니까? 나는 지금 비슷한 문제를 겪고 있습니다 …

편집 : 내 문제를 해결했지만 문제가 어디에 있는지 전혀 모릅니다. .git / config 및 .gitmodules에서 수동으로 하위 모듈 항목을 제거하고 사용 단계 (git submodule add 등 …)로 하위 모듈을 다시 추가했습니다. Worksforme이지만이 스레드에 값을 추가하지 않습니다.


답변

.gitmodules 파일이 커밋되었지만 실제 서브 모듈 커밋 (즉, 서브 모듈의 커밋 ID 기록)은 그렇지 않은 것으로 밝혀졌습니다.

수동으로 추가하면 트릭을 수행하는 것처럼 보였습니다. 예 :

git submodule add http://github.com/sciyoshi/pyfacebook.git external/pyfacebook

(.git / config 또는 .gitmodules에서 아무것도 제거하지 않아도)

그런 다음 ID를 올바르게 기록하도록 커밋하십시오.

이 작업 답변에 몇 가지 추가 설명 추가 : git submodule init 또는 git submodule update가 작동하지 않으면 위에서 설명한대로 git submodule add url이 트릭을 수행해야합니다. 하나는 이것을 교차 확인할 수 있습니다.

 git config --list

그리고 git config –list 명령의 결과에서 가져 오려는 하위 모듈의 항목을 가져와야합니다. 구성 결과에 하위 모듈 항목이있는 경우 이제 일반적인 git 하위 모듈 업데이트 –init가 하위 모듈을 가져와야합니다. 이 단계를 테스트하려면 수동으로 하위 모듈의 이름을 바꾼 다음 하위 모듈을 업데이트 할 수 있습니다.

 mv yourmodulename yourmodulename-temp
 git submodule update --init

하위 모듈에 로컬 변경 사항이 있는지 확인하려면 git status -u (서브 모듈의 변경 사항을 확인하려는 경우) 또는 git status –ignore-submodules (변경 사항을보고 싶지 않은 경우)를 통해 확인할 수 있습니다. 서브 모듈).


답변

git 버전 2.7.4. 이 명령은 로컬 코드를 업데이트합니다.

git submodule update --init --force --remote


답변

git이 무시 init하고 update명령 할 때 동일한 문제 가 있었고 아무것도하지 않았습니다.

어떻게 고치는 지

  1. 하위 모듈 폴더는 git repo에 커밋되어야합니다.
  2. .gitignore에 없어야합니다.

해당 요구 사항이 충족되면 작동합니다. 그렇지 않으면 모든 명령이 메시지와 결과없이 실행됩니다.

모든 작업을 수행했지만 여전히 작동하지 않는 경우 :

  1. 수동으로 서브 모듈 추가, 예 : git submodule add git@... path/to
  2. git submodule init
  3. git submodule update
  4. 모든 파일을 커밋하고 푸시- .gitmodules모듈 폴더 (폴더의 내용은 커밋되지 않음)
  5. 로컬 git repo를 삭제하십시오.
  6. 새 복제
  7. .git/config아직 하위 모듈이 없는지 확인하십시오.
  8. 이제 git submodule init– 그러면 모듈이 등록되었다는 메시지가 표시됩니다.
  9. git submodule update -모듈을 가져옵니다
  10. 이제 살펴보면 .git/config등록 된 하위 모듈을 찾을 수 있습니다.

답변

답변에 여기에 (또한) 많은 혼란이있는 것 같습니다.

git submodule init.git / config (.gitmodules에서)에서 마법처럼 물건을 생성하기위한 것이 아닙니다 . 부모 프로젝트를 복제하거나 이전에 존재하지 않는 하위 모듈을 추가하는 커밋을 가져온 후 완전히 비어있는 하위 디렉터리에 무언가를 설정하기위한 것입니다.

즉, git clone.gitmodules 파일이 .gitmodules 파일을 체크 아웃했다는 사실을 알 수있는 하위 모듈이있는 프로젝트 를 따릅니다 git submodule update --init --recursive.

당신은 할 수 없습니다 에 따라 git submodule add ...git submodule init(또는 git submodule update --init)이이 일에 예정되어 있지 않습니다. 사실, 추가는 이미 작동하는 경우 적절한 .git / config를 업데이트합니다.

편집하다

이전에 존재하지 않는 git 하위 모듈이 다른 사람에 의해 추가되고 git pull해당 커밋 을 수행하면 해당 하위 모듈의 디렉토리가 완전히 비어 있습니다 ( git submodule status새 하위 모듈의 해시 를 실행할 때 표시되어야하지만 -앞에 .가)이 경우 당신이 따라야 당신 git pull도와 git submodule update --init(플러스 --recursive는 서브 모듈은 새로운, 이전에 존재하지 않는, 서브 모듈 체크 아웃 얻기 위해) 서브 모듈 내부 때; 하위 모듈이있는 프로젝트의 초기 복제 후 (분명히 이전에 해당 하위 모듈이 없었던 경우)과 같습니다.


답변

나는 같은 문제가 있었지만 위의 해결책 중 어느 것도 도움이되지 않았습니다. .gitmodules 및 .git / config의 항목은 옳았지만 명령 git submodules update --init --recursive은 아무것도하지 않았습니다. 또한 하위 모듈 디렉토리를 제거하고 실행 git submodules update --init --recursive하여 하위 모듈 디렉토리를 되찾았지만 이전과 똑같은 커밋을 사용했습니다.

페이지 에서 답을 찾았습니다 . 명령은 다음과 같습니다.git submodule update --remote


답변

정렬 마법의, 그러나 오늘 나는 달렸다 git submodule init다음에
git submodule sync다음에 git submodule update그것은 … 매직을 내 서브 모듈을 당겨 시작? 혹시! 이것은 정말로 Git에서 가장 성가신 경험 중 하나입니다.

스크래치. 나는 실제로 git submodule update --init --recursive. 도움이 되었기를 바랍니다.

추신 : 서브 모듈이 아닌 루트 git 디렉토리에 있는지 확인하십시오.