수색…
하위 모듈 추가
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
하위 모듈 제거
다음을 호출하여 서브 모듈 (예 : 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 sync
및git submodule foreach
호출에서 제외하고 로컬 컨텐츠 (소스)를 삭제합니다. 또한 상위 리포지토리에 변경 사항으로 표시되지 않습니다.git submodule init
와git submodule update
는 부모 저장소에 커밋 할 수있는 변경없이 서브 모듈을 복원 할 것입니다.git rm the_submodule
은 작업 트리에서 서브 모듈을 제거합니다. 파일은.gitmodules
파일 (소스) 의 서브 모듈 항목과 함께 사라집니다.git rm the_submodule
(이전의git submodule deinit the_submodule
이 실행되지만, .git / config 파일의 하위 모듈 항목은 그대로 유지됩니다.
-
.gitmodules
파일에서 관련 섹션을 삭제하십시오. - 스테이지
.gitmodules
변경git add .gitmodules
-
.git/config
에서 관련 섹션을 삭제하십시오. -
git rm --cached path_to_submodule
(후행 슬래시 없음)을 실행하십시오. -
rm -rf .git/modules/path_to_submodule
실행하십시오. - Commit
git commit -m "Removed submodule <name>"
- 지금 추적 할 수없는 서브 모듈 파일을 삭제하십시오
-
rm -rf path_to_submodule
하위 모듈 이동
운영:
$ git mv old/path/to/module new/path/to/module
1.8 .gitmodules
편집하고 서브 모듈의 경로를 적절하게 변경하고 git add .gitmodules
를 사용하여 색인에 넣습니다.
필요한 경우 하위 모듈의 새 위치에 대한 상위 디렉토리를 만듭니다 ( mkdir -p new/path/to
).
모든 내용을 이전 디렉토리에서 새 디렉토리로 이동합니다 ( mv -vi old/path/to/module new/path/to/submodule
).
Git이이 디렉토리를 추적하는지 확인하십시오 ( git add new/path /to
).
git rm --cached old/path/to/module
하여 이전 디렉토리를 제거하십시오.
모든 내용을 .git/modules/ new/path/to/module
디렉토리로 이동하여 .git/modules/ old/path/to/module
디렉토리로 이동하십시오.
.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
#
마지막으로 변경 사항을 적용하십시오.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow