Git Submodule을 정리해 보도록 하겠습니다.
5107 단어 Git
개시하다
Git Submodule에 대해 알고 있는 범위를 요약해 보십시오.
같은 기사가 많았지만 판본이 다르고 움직임도 미묘하게 다르고 자신도 상상할 수 없는 부분도 있어서 기사를 썼다.
Giit 버전:
Git Shell git version 2.11.0.windows.3
(GitHub for Windwos 3.3.4.0)
.
필요조건
프로비저닝
상위 항목은 Parent이고 하위 항목은 차일드입니다.
창고의 구성, 특히 평범한 그림에서.
하위 프로젝트는 공개하지 않아도 되기 때문에 그림 아래에서 시도해 보았지만 파일의 통합성이 이상해져 포기했다.
상세한 상황은 뒤에 서술할 것이다.
각 디렉토리 및 파일의 구성은 다음과 같습니다.Child
child.txt
Parent
parent.txt
디렉토리에는 텍스트 파일이 하나만 있습니다.
child.txt는 다음과 같습니다.child
parent.txt는 다음과 같습니다.parent
그냥 써있어요.
창고를 만들다
Child 디렉토리로 이동하고 를 클릭합니다.# Child
git init
git add .
git commit -m "first"
git remote add origin <ChildRemoteURL>
git push -u origin master
를 입력하고 Parent 디렉토리로 이동합니다.# Parent
git init
git submodule add <ChildRemoteURL>
git add .
git commit -m "first"
git remote add origin <ParentRemoteURL>
git push -u origin master
집행하다.
이렇게 하면 ParentParent
.gitmodules
parent.txt
Child
child.txt
.
기존 글에서git submodule init
git submodule update
'필요하다'고 쓰여 있지만 현 상태에서는 필요 없을 것 같다.
하위 프로젝트 업데이트 가져오는 중
다음은 하위 항목 업데이트를 시도해 봅시다.
사전 준비로 차일드 창고, 차일드.txt 열기child
1 on child
업데이트하고 다음 작업을 수행합니다.# Child
git add .
git commit -m "1 on child"
git push
Parent 창고로 이동하여 다음 작업을 수행합니다.# Parent
git submodule foreach git fetch
git submodule foreach git merge origin/master
파렌트 밑에 있는 차일드야.txt가 최신 버전으로 업데이트되었습니다.
여기, 상술한 명령 대신# Parent
git submodule update --remote --merge
그래도 돼요.
또한 업데이트만 하면 다음 명령도 가능합니다.# Parent
git submodule update --remote
git submodule update --remote
에도 child가 있다.txt의 최신 버전을 수록할 수 있습니다.
그러나 이 명령의 경우 파렌트 밑의 차일드Detached HEAD
가 된다.
Parent에서 서브 모듈을 업데이트하는 경우 Detached HEAD
시간이 조금 걸립니다.
하위 모듈만 참고하면 이 명령은 충분합니다.
지금까지의 작업은 로컬만 업데이트되었습니다.
원격 업데이트를 위해 다음과 같은 조작을 실행합니다.# Parent
git add .
git commit -m "update child1"
git push --recurse-submodules=check
상위 항목에서 하위 항목 업데이트
Parent 창고 아래에 있는 child입니다.txt를 다음과 같이 편집합니다.child
1 on child
2 on parent
Parent 창고에서 다음을 수행합니다.# Parent
git submodule foreach git add .
git submodule foreach git commit -m "2 on parent"
git submodule foreach git push
원격 차일드가 업데이트됩니다.
Parent의 원격 주소를 업데이트하려면 다음과 같이 하십시오.# Parent
git add .
git commit -m "update child 2"
git push --recurse-submodules=check
마지막 편지의 로컬 주소를 업데이트하려면 Child 창고를 사용하여 다음을 수행합니다.# Child
git fetch
git merge origin/master
Detached HEAD에서 밀어냄
git submodule update --remote
를 사용하여 서브모듈을 업데이트하는 경우 Parent 산하의 Child는 Detached HEAD
입니다.
이런 상태에서,child.txt가 업데이트되면 Parent가 Child로 밀어넣기를 거부합니다.
이 경우 아래 명령 등을 통해 압력을 가할 수 있다.# Parent
git submodule foreach git status #HEADのリビジョン名(SHA-1)を調べる
git submodule foreach git checkout master
git submodule foreach git merge <HEADのSHA-1> #rebse
git submodule foreach git push
최후
이상은 서브모듈 사용 방법의 개요입니다.
이 글은 모든 창고의 루트 디렉터리를 사용했다git submodule foreach
.
하위 모듈의 루트 디렉토리로 이동하려면(위의 글은 Parent/Child) 없음submodule foreach
명령을 사용할 수 있습니다.
여러 개의 서브 모듈을 사용하는 경우도 이곳에서 조작해야 하는 경우도 있다.
명령하다
Child
child.txt
Parent
parent.txt
child
parent
Child 디렉토리로 이동하고 를 클릭합니다.
# Child
git init
git add .
git commit -m "first"
git remote add origin <ChildRemoteURL>
git push -u origin master
를 입력하고 Parent 디렉토리로 이동합니다.# Parent
git init
git submodule add <ChildRemoteURL>
git add .
git commit -m "first"
git remote add origin <ParentRemoteURL>
git push -u origin master
집행하다.이렇게 하면 Parent
Parent
.gitmodules
parent.txt
Child
child.txt
.기존 글에서
git submodule init
git submodule update
'필요하다'고 쓰여 있지만 현 상태에서는 필요 없을 것 같다.하위 프로젝트 업데이트 가져오는 중
다음은 하위 항목 업데이트를 시도해 봅시다.
사전 준비로 차일드 창고, 차일드.txt 열기child
1 on child
업데이트하고 다음 작업을 수행합니다.# Child
git add .
git commit -m "1 on child"
git push
Parent 창고로 이동하여 다음 작업을 수행합니다.# Parent
git submodule foreach git fetch
git submodule foreach git merge origin/master
파렌트 밑에 있는 차일드야.txt가 최신 버전으로 업데이트되었습니다.
여기, 상술한 명령 대신# Parent
git submodule update --remote --merge
그래도 돼요.
또한 업데이트만 하면 다음 명령도 가능합니다.# Parent
git submodule update --remote
git submodule update --remote
에도 child가 있다.txt의 최신 버전을 수록할 수 있습니다.
그러나 이 명령의 경우 파렌트 밑의 차일드Detached HEAD
가 된다.
Parent에서 서브 모듈을 업데이트하는 경우 Detached HEAD
시간이 조금 걸립니다.
하위 모듈만 참고하면 이 명령은 충분합니다.
지금까지의 작업은 로컬만 업데이트되었습니다.
원격 업데이트를 위해 다음과 같은 조작을 실행합니다.# Parent
git add .
git commit -m "update child1"
git push --recurse-submodules=check
상위 항목에서 하위 항목 업데이트
Parent 창고 아래에 있는 child입니다.txt를 다음과 같이 편집합니다.child
1 on child
2 on parent
Parent 창고에서 다음을 수행합니다.# Parent
git submodule foreach git add .
git submodule foreach git commit -m "2 on parent"
git submodule foreach git push
원격 차일드가 업데이트됩니다.
Parent의 원격 주소를 업데이트하려면 다음과 같이 하십시오.# Parent
git add .
git commit -m "update child 2"
git push --recurse-submodules=check
마지막 편지의 로컬 주소를 업데이트하려면 Child 창고를 사용하여 다음을 수행합니다.# Child
git fetch
git merge origin/master
Detached HEAD에서 밀어냄
git submodule update --remote
를 사용하여 서브모듈을 업데이트하는 경우 Parent 산하의 Child는 Detached HEAD
입니다.
이런 상태에서,child.txt가 업데이트되면 Parent가 Child로 밀어넣기를 거부합니다.
이 경우 아래 명령 등을 통해 압력을 가할 수 있다.# Parent
git submodule foreach git status #HEADのリビジョン名(SHA-1)を調べる
git submodule foreach git checkout master
git submodule foreach git merge <HEADのSHA-1> #rebse
git submodule foreach git push
최후
이상은 서브모듈 사용 방법의 개요입니다.
이 글은 모든 창고의 루트 디렉터리를 사용했다git submodule foreach
.
하위 모듈의 루트 디렉토리로 이동하려면(위의 글은 Parent/Child) 없음submodule foreach
명령을 사용할 수 있습니다.
여러 개의 서브 모듈을 사용하는 경우도 이곳에서 조작해야 하는 경우도 있다.
명령하다
child
1 on child
# Child
git add .
git commit -m "1 on child"
git push
# Parent
git submodule foreach git fetch
git submodule foreach git merge origin/master
# Parent
git submodule update --remote --merge
# Parent
git submodule update --remote
# Parent
git add .
git commit -m "update child1"
git push --recurse-submodules=check
Parent 창고 아래에 있는 child입니다.txt를 다음과 같이 편집합니다.
child
1 on child
2 on parent
Parent 창고에서 다음을 수행합니다.# Parent
git submodule foreach git add .
git submodule foreach git commit -m "2 on parent"
git submodule foreach git push
원격 차일드가 업데이트됩니다.Parent의 원격 주소를 업데이트하려면 다음과 같이 하십시오.
# Parent
git add .
git commit -m "update child 2"
git push --recurse-submodules=check
마지막 편지의 로컬 주소를 업데이트하려면 Child 창고를 사용하여 다음을 수행합니다.# Child
git fetch
git merge origin/master
Detached HEAD에서 밀어냄
git submodule update --remote
를 사용하여 서브모듈을 업데이트하는 경우 Parent 산하의 Child는 Detached HEAD
입니다.이런 상태에서,child.txt가 업데이트되면 Parent가 Child로 밀어넣기를 거부합니다.
이 경우 아래 명령 등을 통해 압력을 가할 수 있다.
# Parent
git submodule foreach git status #HEADのリビジョン名(SHA-1)を調べる
git submodule foreach git checkout master
git submodule foreach git merge <HEADのSHA-1> #rebse
git submodule foreach git push
최후
이상은 서브모듈 사용 방법의 개요입니다.
이 글은 모든 창고의 루트 디렉터리를 사용했다git submodule foreach
.
하위 모듈의 루트 디렉토리로 이동하려면(위의 글은 Parent/Child) 없음submodule foreach
명령을 사용할 수 있습니다.
여러 개의 서브 모듈을 사용하는 경우도 이곳에서 조작해야 하는 경우도 있다.
명령하다
git push --recurse-submodules=check
소속된 하위 모듈을 누르지 않으면 메시지를 표시하고 누르는 것을 중단합니다.git submodule foreach
등록된 제출 ID로 서브 모듈 업데이트git submodule update
서브모듈git submodule update --remote
하위 모듈의 현재 분기를 원격 추적 분기git submodule update --remote --rebase
서브모듈의 현재 브랜치를 원격 추적 브랜치와 결합non-bare 창고로 밀어넣기
하위 모듈과는 직접적인 관계가 없지만 그림에서 보여준 아래의 구조를 구성하지 않는 것이 좋으므로 여기에 기술합니다.
기본값에서 non-bare 창고를 누르면 모두 거부됩니다.
따라서 밀어넣기를 수락할 저장소git submodule update --remote --merge
를 설정해야 합니다.
설정하면 단추를 받아서 역사를 업데이트하지만 파일의 내용은 업데이트되지 않습니다.(없어 보인다.)
왜 업데이트 안 해요?
에 대한 업데이트 2개
a
b
받는 사람 파일 확인 a
누르면 a
b
업데이트 후 a
를 새 업데이트로 덮어씁니다.결과적으로 파일의 내용은 업데이트되기 전까지 유지된다.
Reference
이 문제에 관하여(Git Submodule을 정리해 보도록 하겠습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/BlueSilverCat/items/19bb9b814572cd35b2ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)