수색…


하위 모듈 추가

Git이 추적하는 프로젝트 내에서 다른 Git 저장소를 폴더로 포함 할 수 있습니다.

$ git submodule add https://github.com/jquery/jquery.git

새로운 .gitmodules 파일을 추가하고 커밋해야합니다. git submodule update 가 실행될 때 어떤 서브 모듈이 복제되어야하는지 알려줍니다.

하위 모듈이있는 Git 저장소 복제

하위 모듈을 사용하는 저장소를 복제 할 때는 하위 모듈을 초기화하고 업데이트해야합니다.

$ git clone --recursive https://github.com/username/repo.git

이것은 참조 된 서브 모듈을 복제하고 적절한 폴더 (서브 모듈 내의 서브 모듈 포함)에 배치합니다. 이는 복제가 완료된 후 git submodule update --init --recursive 를 실행하는 것과 같습니다.

하위 모듈 업데이트

서브 모듈은 다른 저장소에서 특정 커밋을 참조합니다. 모든 서브 모듈에 대해 참조되는 정확한 상태를 확인하려면 다음을 실행하십시오.

git submodule update --recursive

때로는 참조 된 상태를 사용하는 대신 로컬 체크 아웃을 리모컨의 해당 서브 모듈의 최신 상태로 업데이트하려고합니다. 단일 명령으로 모든 하위 모듈을 리모컨의 최신 상태로 체크 아웃하려면 다음을 사용할 수 있습니다.

git submodule foreach git pull <remote> <branch>

또는 git pull 인수를 사용한다.

git submodule foreach git pull

이 작업은 로컬 작업 복사본을 업데이트합니다. git status 를 실행하면이 명령으로 인해 하위 모듈 디렉토리가 변경된 경우 해당 하위 모듈 디렉토리가 dirty로 표시됩니다. 대신 새 상태를 참조하도록 저장소를 업데이트하려면 변경 사항을 커밋해야합니다.

git add <submodule_directory>
git commit

git pull 을 사용하면 충돌을 병합 할 수있는 몇 가지 변경 사항이있을 수 있으므로 git pull --rebase 를 사용하여 변경 사항을 맨 위로 되 git pull --rebase 대부분 충돌의 가능성이 줄어 듭니다. 또한 모든 지점을 로컬로 가져옵니다.

git submodule foreach git pull --rebase

특정 서브 모듈의 최신 상태를 체크 아웃하려면 다음을 사용할 수 있습니다.

git submodule update --remote <submodule_directory>

분기를 따르도록 하위 모듈 설정하기

하위 모듈은 항상 특정 커밋 SHA1에서 체크 아웃됩니다 ( "gitlink", 상위 저장소 색인의 특수 항목)

그러나 서브 모듈 원격 저장소의 최신 커밋으로 그 서브 모듈을 업데이트하도록 요청할 수 있습니다.

git checkout abranch --track origin/abranch, git pull , 각 서브 모듈에 들어가기보다는 git checkout abranch --track origin/abranch, git pull (부모 repo에서) 간단히 할 수있다 :

git submodule update --remote --recursive

하위 모듈의 SHA1이 변경 될 것이므로 다음을 수행해야합니다.

git add .
git commit -m "update submodules"

하위 모듈을 가정하면 다음과 같습니다.

  • 따라야 할 지점이 추가되었습니다.

      git submodule -b abranch -- /url/of/submodule/repo
    
  • 또는 기존 서브 모듈에 대해 분기를 따르도록 구성 할 수 있습니다.

      cd /path/to/parent/repo
      git config -f .gitmodules submodule.asubmodule.branch abranch
    

하위 모듈 제거

1.8

다음을 호출하여 서브 모듈 (예 : the_submodule )을 제거 할 수 있습니다.

$ git submodule deinit the_submodule
$ git rm the_submodule 
  • git submodule deinit the_submodule 은 .git / config에서 the_submodule s 항목을 삭제합니다. 이것은 the_submodule을 git submodule update , git submodule syncgit submodule foreach 호출에서 제외하고 로컬 컨텐츠 (소스)를 삭제합니다. 또한 상위 리포지토리에 변경 사항으로 표시되지 않습니다. git submodule initgit submodule update 는 부모 저장소에 커밋 할 수있는 변경없이 서브 모듈을 복원 할 것입니다.

  • git rm the_submodule 은 작업 트리에서 서브 모듈을 제거합니다. 파일은 .gitmodules 파일 (소스) 의 서브 모듈 항목과 함께 사라집니다. git rm the_submodule (이전의 git submodule deinit the_submodule 이 실행되지만, .git / config 파일의 하위 모듈 항목은 그대로 유지됩니다.

1.8

여기 에서 가져온 :

  1. .gitmodules 파일에서 관련 섹션을 삭제하십시오.
  2. 스테이지 .gitmodules 변경 git add .gitmodules
  3. .git/config 에서 관련 섹션을 삭제하십시오.
  4. git rm --cached path_to_submodule (후행 슬래시 없음)을 실행하십시오.
  5. rm -rf .git/modules/path_to_submodule 실행하십시오.
  6. Commit git commit -m "Removed submodule <name>"
  7. 지금 추적 할 수없는 서브 모듈 파일을 삭제하십시오
  8. rm -rf path_to_submodule

하위 모듈 이동

1.8

운영:

$ git mv old/path/to/module new/path/to/module
1.8
  1. .gitmodules 편집하고 서브 모듈의 경로를 적절하게 변경하고 git add .gitmodules 를 사용하여 색인에 넣습니다.

  2. 필요한 경우 하위 모듈의 새 위치에 대한 상위 디렉토리를 만듭니다 ( mkdir -p new/path/to ).

  3. 모든 내용을 이전 디렉토리에서 새 디렉토리로 이동합니다 ( mv -vi old/path/to/module new/path/to/submodule ).

  4. Git이이 디렉토리를 추적하는지 확인하십시오 ( git add new/path /to ).

  5. git rm --cached old/path/to/module 하여 이전 디렉토리를 제거하십시오.

  6. 모든 내용을 .git/modules/ new/path/to/module 디렉토리로 이동하여 .git/modules/ old/path/to/module 디렉토리로 이동하십시오.

  7. .git/modules/ new/path/to /config 파일 .git/modules/ new/path/to /config 편집하고 작업 트리 항목이 새 위치를 가리키는 지 확인하십시오.이 예제에서는 worktree = ../../../../../ old/path/to/module 이어야합니다 worktree = ../../../../../ old/path/to/module . 일반적으로 그 곳의 직접 경로에 두 개의 more .. then 디렉토리가 있어야합니다. . new/path/to/module /.git 파일을 편집하여 그 안에있는 경로가 주 프로젝트 .git 폴더의 정확한 위치를 가리 키도록하십시오 gitdir: ../../../.git/modules/ new/path/to/module 예를 들어 gitdir: ../../../.git/modules/ new/path/to/module .

    git status 출력은 다음과 같습니다.

     # On branch master
     # Changes to be committed:
     #   (use "git reset HEAD <file>..." to unstage)
     #
     #       modified:   .gitmodules
     #       renamed:    old/path/to/submodule -> new/path/to/submodule
     #
    
  8. 마지막으로 변경 사항을 적용하십시오.


스택 오버 플로우의 예제, Axel Beckert 저



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow