programing

Git가 새 하위 모듈을 시작/동기화/업데이트하지 않음

newsource 2023. 6. 19. 21:36

Git가 새 하위 모듈을 시작/동기화/업데이트하지 않음

▁▁my▁of의 일부 .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

번째 submodule)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/config의새운내바로탕의 .gitmodules그것은 또한 그것을 만들지 않을 것입니다.external/pyfacebook하위 모듈의 내용을 폴더로 이동합니다.

제가 무엇을 빠뜨리고 있나요? 개입).git/config 그 이유는 무엇입니까?) 정말로 필요하며, 그 이유는 무엇입니까?

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

저도 같은 문제가 있었습니다. 알고 보니 .gitmodules 파일은 커밋되었지만 실제 서브모듈 커밋(즉, 서브모듈의 커밋 ID 기록)은 커밋되지 않았습니다.

수동으로 추가하면 다음과 같은 이점이 있습니다.

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

(.git/config 또는 .git 모듈에서 아무것도 제거하지 않아도 됩니다.)

그런 다음 ID를 제대로 기록하도록 커밋합니다.

이 작업 답변에 몇 가지 추가 설명 추가: git submodule init 또는 git submodule 업데이트가 작동하지 않으면 위에서 설명한 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(하위 모듈의 변경 사항을 확인하지 않으려면)를 통해 확인할 수 있습니다.

2git 전 2.7.4.은 로컬 코드 " 이명은로코업다니합트이데를드컬" 합니다. git submodule update --init --force --remote

을 무시했을 때도 같은 문제가 있었습니다.init그리고.update명령을 실행하고 아무것도 수행하지 않습니다.

수리 방법

  1. 하위 모듈 폴더가 gitrepo에 커밋되어야 합니다.
  2. .gitignore에 있으면 안 됩니다.

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

만약 당신이 그 모든 것을 했는데도 여전히 작동하지 않는다면,

  1. 하위 모듈을 수동으로 추가합니다(예:git submodule add git@... path/to
  2. git submodule init
  3. git submodule update
  4. files - 모든파커고푸시하밋을 -.gitmodules 모듈 폴더 않음)를 하십시오.
  5. 로컬 Git repo를 삭제
  6. 새 파일을 복제합니다.
  7. ..git/config
  8. 지금이다,git submodule init module .
  9. git submodule update module을 참조하십시오.
  10. , 이제 보요세이를 보세요..git/config 등록된 수 .

을 생각하는 .gitmodules충분합니까? 틀렸습니다.

의 지역 내컬로git version 2.22.0이 글의 시점에서

그래서 나는 왜 그렇지 않았을까 하는 생각에 이 스레드에 도달했습니다.git submodule init작동 중; 나는 설정했습니다..gitmodules파일을 작성하고 다음 작업을 진행했습니다.git submodule init...

중요한

  1. git submodule add company/project.git includes/project를 입력해야 합니다(모듈을 처음 추가할 때). 이는 다음과 같습니다.

    • 구성 .git/config
    • .gitmodules
    • 위치를 합니다.includes/project이 예에서는).
  2. 그럼 당신은git commit..gitmodules추적된 하위 모듈 위치입니다.

프로젝트가 다시 복제될 때, 그것은 다음을 가질 것입니다..gitmodules 빈 하위 디렉토리( " " " " ")includes/project이 예에서는). 시점에서 이시점서에▁at..git/config아직 서브모듈 .git submodule init실행되고, 이것만 작동한다는 것을 기억하십시오. 왜냐하면.gitmodules그리고.includes/project메인 깃 레포에서 추적됩니다.

참고 자료는 다음을 참조하십시오.

저도 같은 문제를 겪었지만 위의 해결책들 중 어느 것도 도움이 문제가 되지 않았습니다. ./config의 .git 듈 모 .git/config 의명옳령만git submodules update --init --recursive아무것도 하지 않았습니다.하고, ▁run다▁and▁i▁also▁removed▁did니od습또▁the▁subm실행을 실행했습니다.git submodules update --init --recursive서브모듈 디렉토리를 다시 가져왔지만 전과 정확히 동일한 커밋을 사용했습니다.

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

것을 하며, 즉, 서듈이게설올않정았며으지되바브모르으않,며았,git submodule add명령을 실행해야 합니다.하위 모듈의 작동 방식에 대한 자세한 설명:

하위 모듈이 올바르게 추가되지 않은 경우:

을 .gitmodules 파일을 통해 .git submodule add앞으로 나아가기 전에

  • 참고: 여기서 언급한 것처럼 Git에는 현재 .gitmodules 파일에 있는 여러 하위 모듈에 대해 이 작업을 한 번에 수행하는 명령이 없습니다.

가 입니까?git submodule add하십니까?

가 .git submodule add명령을 실행하면 다음과 같은 작업이 수행됩니다.

  1. 하위 모듈이 존재하지 않는 경우 하위 모듈이 상주할 폴더 만들기
  2. 프로젝트를 하위 모듈로 복제
  3. 공유 가능한 .gitmodules 파일에서 하위 모듈 매개 변수 설정
  4. 개인 .git/config 파일에서 하위 모듈 매개 변수 설정
  5. 슈퍼 프로젝트의 개인 .git/messages 폴더에 하위 모듈에 대한 .git 폴더를 만듭니다.
  6. 또한, 슈퍼 프로젝트 인덱스에 각 서브 모듈이 상주할 폴더와 상태(서브 모듈의 해시 커밋 코드)를 기록합니다.

3번 6번 지점은 슈퍼 프로젝트를 복제할 때 관련이 있으며, 6번 지점은 다음과 같은 작업을 수행하는지 여부를 나타냅니다.git submodule add올바르게 수행되고 커밋되었습니다.하위 모듈이 상주해야 하는 폴더가 이미 있고 비어 있는지 확인하여 지점 6을 확인할 수 있습니다(참고: Git 메커니즘의 일부이므로 .keep 또는 .gitignore 메커니즘을 설치할 필요가 없습니다).슈퍼 프로젝트를 복제한 후에는 다음을 수행할 수도 있습니다.git submodule어떤 하위 모듈이 필요한지 확인합니다.

그런 다음 다음 작업을 수행하여 계속할 수 있습니다.

  • git submodule

    트리에 있는 하위 모듈과 해당하는 커밋 해시 코드를 보여주며, 어떤 하위 모듈이 예상되는지 확인하는 초기 검사 역할을 할 수 있습니다.

  • git submodule init

    하위 모듈 매개 변수를 repo의 .gitmodules 파일에서 개인 .git/config 파일(포인트 4)로 복사합니다.

  • git submodule update

    SuperProject에 의해 결정된 커밋에 서브모듈을 복제하고 SuperProject의 .git/folder(포인트 2 5) 아래에 서브모듈의 .git 폴더를 만듭니다.

  • git submodule update --remote

    각 모듈의 원격 합니다.git pull

  • 또는 --->: git submodule update --init --remote

    위의 모든 것을 합친 것.

또는 repo가 올바르게 설정된 경우 다음 작업을 수행할 수 있습니다.git clone--recursive플래그를 지정하여 하위 모듈을 포함하고 업데이트를 자동으로 수행합니다.

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

git submodule init.git/config(.git 모듈에서)에서 항목을 마법처럼 생성하는 것이 아닙니다.상위 프로젝트를 복제하거나 이전에 존재하지 않았던 하위 모듈을 추가하는 커밋을 풀링한 후 완전히 비어 있는 하위 디렉터리에 무언가를 설정합니다.

다시 말해서, 당신은 다음을 따릅니다.git clone(파일을 알 수 ) 의 .gitmodules에 git submodule update --init --recursive.

당신은 따르지 않습니다.git submodule add ...git submodule init(또는)git submodule update --init안 .), 그은작않아야합니다지동하것▁),합.사실, 문제가 해결되면 추가는 이미 적절한 .git/config를 업데이트할 것입니다.

편집

이전에 존재하지 않았던 Git 하위 모듈이 다른 사용자에 의해 추가된 경우 다음 작업을 수행합니다.git pull커밋 에서, 그 (이 해당커경실하모디가완리렉비전때있다습니히어터의듈할행위밋우의실▁you때▁of▁of(▁executeodwhen,다▁(ule▁directory▁entirely▁will▁be▁then니습할있▁the▁empty행▁commit해▁that▁that▁subm당).git submodule status, 이 은 " " " " 입니다.-에서.)이 경우 다음을 따라야 합니다.git pull 한또와 git submodule update --init(플러스)--recursive서브모듈 내부의 서브모듈인 경우) 이전에는 존재하지 않았던 새로운 서브모듈을 체크아웃할 수 있습니다. 서브모듈이 있는 프로젝트의 초기 클론 후와 같습니다(분명히 서브모듈도 이전에는 없었습니다).

Dave James Miller의 답변에 따르면 저는 그것이 저에게 효과가 있었다는 것을 확인할 수 있습니다.여기서 중요한 것은 하위 프로젝트의 커밋 ID를 커밋하는 것이었습니다..git 모듈에 항목을 넣는 것만으로는 충분하지 않았습니다.

다음은 적절한 커밋입니다.

https://github.com/dirkaholic/vagrant-php-dev-box/commit/d5f4c40bdbd80eefbb5ac6029823733f591435ae

같은 건데 은 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠgit submodule init에 뒤에git submodule sync에 뒤에git submodule update그리고 내 서브모듈들을 잡아당기기 시작했고,마법? 아마도!이것은 Git에 대한 가장 짜증나는 경험 중 하나입니다.

그거 긁어요.저는 실제로 그것을 작동시켰습니다.git submodule update --init --recursive이게 도움이 되길 바랍니다.

PS: 하위 모듈의 디렉터리가 아닌 루트 git 디렉터리에 있는지 확인합니다.

저에게 문제는 레포의 이전 개발자가 다음을 저질렀다는 것입니다.submodules/thing폴더로 합니다. 즉, 실을시을했때도다니지행일, 반폴더합정폴로더를.git submodule add ...다음 오류가 발생할 수 있습니다.'submodules/thing' already exists in the index그러나 경로에 하위 모듈이 포함되어 있지 않기 때문에 하위 모듈을 업데이트하려고 해도 실패합니다.

▁the다했니,습▁to▁delete▁to▁i▁fix▁had를 삭제해야 했습니다.submodules/thing, " " 를 합니다.git submodule add다시 올바르게 추가하는 명령:

git submodule add --force --name thing https://github.com/person/thing.git submodules/thing

저도 같은 문제가 있었습니다.

.gitmodules 서모 있만지었이 에 후에그.git submodule init 그것은 명이없었령던것에 ..git/config.

을 추가한 한 것으로 되었습니다..gitignore파일. 그건 안 돼요.

도 오늘 가 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜgit submodule init그리고 나는 그 대사를 내 안에 가지고 있었습니다..git/config:

[submodule]
   active = .

이 항목을 제거하고 다음을 입력했습니다.

git submodule update --init --remote

그리고 모든 것이 정상으로 돌아왔고, 제 서브모듈은 평소처럼 서브디렉토리에서 업데이트되었습니다.

서브모듈에도 비슷한 문제가 있었습니다.복제/풀링/업데이트/아무것도 원하지 않았습니다.

하여 다시 하려고 할 과 같습니다.git submodule add git@my-repo.git destination다음과 같은 출력을 받았습니다.

A git directory for 'destination' is found locally with remote(s):
  origin        git@my-repo.git
If you want to reuse this local git directory instead of cloning again from
  git@my-repo.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.

그래서 add 명령을 실행하려고 했습니다.
git submodule add --force git@my-repo.git destination

제 경우에는 효과가 있었습니다.

참고로:
는 빈 저장소를 서브모듈로 추가하여 동일한 문제를 만들었습니다.이 경우 하위 모듈에 사용할 수 있는 참조 해시가 없으므로 원본 포스터에 설명된 오류가 발생합니다.

문제를 해결한 후 저장소를 강제로 추가(Arvids 게시물에서처럼)
git submodule add --force git@my-repo.git destination

다음 동기화 명령으로 문제가 해결되었습니다.

git submodule sync

당신과 마찬가지로 Git submodule sync가 당신이 기대하는 것을 하지 않는다는 것을 알았습니다.으로 한 후에만.git submodule add다시 하위 모듈 URL이 변경됩니다.

그래서 이 대본을 넣었습니다.~/bin/git-submodule-sync.rb:

https://gist.github.com/frimik/5125436

또한 수신 후 Git 배포 스크립트에 대해서도 동일한 논리를 사용합니다.

이제 편집만 하면 됩니다..gitmodules그리고 이 스크립트를 실행하면 마침내 내가 생각했던 것처럼 작동합니다.git submodule sync하기로 되어 있었습니다.

내가 오늘 이것을 보았을 때, 한 개발자가 트리의 일부를 새로운 하위 디렉터리로 이동했고 그의 git 클라이언트가 업데이트된 하위 프로젝트 규칙을 트리에 기록하지 않은 것처럼 보였습니다. 대신에, 그것들은 단지 핵으로 처리되어 남겨졌습니다..gitmodules오래된 위치와 현재 트리에 더 이상 존재하지 않는 하위 프로젝트를 모두 참조합니다.

하위 모듈을 다시 추가하고 하위 모듈의 커밋 섀시를 다음에서 확인한 커밋 섀시와 비교합니다.git show $breaking_commit_sha(regexp와 일치하는 라인 검색)^-Subproject) 필요에 따라 수정할 수 있습니다.

하위 모듈 dir 및 해당 내용("외부/pyfacebook" 폴더)이 이전에 존재하는 경우 삭제git submodule add ...문제를 해결할 수 있습니다.

나에게 도움이 된 것을 공유하는 것:

git clone --recurse-submodules <repository path>

그러면 하위 모듈이 이미 포함된 원격 저장소가 복제됩니다.따라서 복제 후 git 하위 모듈 업데이트나 init를 실행할 필요가 없습니다.

Book of git에 따르면 서브모듈의 기본 브랜치를 현재 작업 중인 로컬 레포로 "풀"하려면 다음을 시도합니다.git submodule update --remote.

다른 분기를 추적하는 방법에 대해 알아보려면 위에 언급된 문서를 주의 깊게 확인하십시오.

>를 수동으로 가져와서 하위 디렉터리에 병합하지 않으려면 이 작업을 수행하는 더 쉬운 방법도 있습니다.git submodule update --remote를 실행하면 git이 서브모듈로 이동하여 가져오기 및 업데이트를 수행합니다.

$ git submodule update --remote DbConnector
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 2), reused 4 (delta 2)
Unpacking objects: 100% (4/4), done.
From https://github.com/chaconinc/DbConnector
   3f19983..d0354fc  master     -> origin/master
Submodule path 'DbConnector': checked out 'd0354fc054692d3906c85c3af05ddce39a1c0644'

저도 같은 문제가 있었고 저의 경우 해결책은 매우 쉬웠습니다.

  1. 빈 폴더 삭제(하위 모듈 이름)
  2. 달려.git submodule update
  • 서브모듈을 분리합니다..git/config
  • 달려.git submodule init지휘권
  • 하위 모듈 디렉토리로 이동하여 실행git pull origin master

이제 작동해야 합니다.

하위 모듈 디렉토리를 확인하십시오.

.git 파일만 있는 경우 삭제합니다.

이제 실행git submodule update --remote --init

언급URL : https://stackoverflow.com/questions/3336995/git-will-not-init-sync-update-new-submodules