etc./StackOverFlow

하위 모듈을 포함하여 "git clone"하는 방법은 무엇입니까?

청렴결백한 만능 재주꾼 2021. 11. 26. 06:55
반응형

질문자 :Mark


하위 모듈을 리포지토리에 넣으려고 합니다. 문제는 상위 리포지토리를 복제할 때 하위 모듈 폴더가 완전히 비어 있다는 것입니다.

git clone parent_repo 실제로 하위 모듈 폴더에 데이터를 넣도록 만드는 방법이 있습니까?

예를 들어, http://github.com/cwolves/sequelize/tree/master/lib/ , nodejs-mysql-native 는 외부 git 하위 모듈을 가리키고 있지만, sequelize 프로젝트를 체크아웃하면 해당 폴더가 비어 있습니다.



나중에 망할 놈의 버전 2.13으로 --recurse-submodules 대신 사용할 수 있습니다 --recursive :

 git clone --recurse-submodules -j8 git://github.com/foo/bar.git cd bar

편집자 주: -j8 은 버전 2.8에서 사용할 수 있는 선택적 성능 최적화이며 한 번에 최대 8개의 하위 모듈을 가져옵니다. man git-clone

Git 버전 1.9에서 버전 2.12까지( -j 플래그는 버전 2.8 이상에서만 사용 가능):

 git clone --recursive -j8 git://github.com/foo/bar.git cd bar

Git 버전 1.6.5 이상에서는 다음을 사용할 수 있습니다.

 git clone --recursive git://github.com/foo/bar.git cd bar

이미 복제된 저장소 또는 이전 Git 버전의 경우 다음을 사용하십시오.

 git clone git://github.com/foo/bar.git cd bar git submodule update --init --recursive

Mathias Bynens

하위 모듈이 채워지기 전에 두 가지 작업을 수행해야 합니다.

 git submodule init git submodule update

LiraNuna

Git 2.23(2019년 3분기): 하위 모듈을 최신 버전 으로 복제하고 업데이트하려는 경우:

 git clone --recurse-submodules --remote-submodules

기록된 SHA1에서 복제하려는 경우:

 git clone --recurse-submodules

아래를 참조하십시오.

Git 2.29(2020년 4분기)는 하위 모듈 처리와 관련하여 상당한 최적화를 제공합니다.

Orgad Shaneh( orgads )의 commit a462bee (2020년 9월 6일)를 참조하십시오.
(2020년 9월 18일 2ce9d4e 커밋 에서 Junio C gitster -- gitster -- 병합)

submodule : 파일 이름 및 객체 ID에 대한 참조 모호성 검사를 억제합니다.

사인오프: Orgad Shaneh

collect_changed_submodules() 의 argv 인수에는 개체 ID(모든 참조의 개체 참조)만 포함됩니다.

assume_dashdash, 를 전달하여 입력이 파일 이름이 아님을 setup_revisions() 통지하여 각 참조에 대한 중복 통계를 방지할 수 있습니다.

또한 각 객체에 대한 파일 시스템 조회를 피하기 위해 refname_ambiguity 비슷한 논리는 cat-file, pack-objects 등에서 찾을 수 있습니다.

이 변경은 내 저장소의 git fetch ( man ) 시간을 25초에서 6초로 줄 입니다.


원래 답변 2010

joschi 가 주석에서 언급했듯이 git submodule --recursive 옵션(Git1.6.5 이상)을 지원합니다.

--recursive 가 지정되면 이 명령은 등록된 하위 모듈로 재귀하여 그 안에 있는 모든 중첩된 하위 모듈을 업데이트합니다.

init 부분에 대해서는 재귀적으로 git 하위 모듈 작업을 참조하세요.
자세한 내용은 git submodule 대한 설명을 참조하세요.

–-recursive 옵션을 사용하여 수퍼 프로젝트를 복제하여 이 작업을 자동으로 수행할 수 있습니다.

 git clone --recursive git://github.com/mysociety/whatdotheyknow.git

2016년 업데이트(git 2.8 포함): " git clone --recursive 사용하여 git 하위 모듈 다운로드 속도를 높이거나 병렬화하는 방법? "

병렬로 여러 스레드를 사용하여 하위 모듈 가져오기를 시작할 수 있습니다.
예를 들어:

 git fetch --recurse-submodules -j2

더욱이 Git 2.23(2019년 3분기)을 사용하면 하나의 명령으로 하위 모듈을 추적 분기에 복제하고 체크아웃할 수 있습니다!

Ben Avison( bavison )의 commit 4c69101 (2019년 5월 19일)을 참조하십시오.
(2019년 6월 17일 커밋 9476094 에서 Junio C gitster -- gitster -- 병합)

clone : --remote-submodules 플래그 추가

git clone --recurse-submodules 사용할 때 이전에는 하위 모듈을 원격 추적 분기에서 체크아웃하려는 사용 사례에 대해 암시적 git submodule update --remote 스위치를 전달할 방법이 없었습니다. 슈퍼 프로젝트에 기록된 SHA-1.

이 패치는 이러한 상황을 수정합니다.
실제로 --no-fetchgit submodule update 에도 전달합니다. 하위 모듈이 방금 복제되었기 때문에 원격에서 다시 가져오면 속도가 느려질 뿐입니다.

그 의미는:

 --[no-]remote-submodules:

복제된 모든 하위 모듈은 상위 프로젝트의 기록된 SHA-1 대신 하위 모듈의 원격 추적 분기 상태를 사용하여 하위 모듈을 업데이트합니다. --remotegit submodule update 로 전달하는 것과 같습니다.


VonC

[빠른 답변]

이 명령을 사용하여 모든 하위 모듈과 함께 저장소를 복제할 수 있습니다.

 git clone --recursive YOUR-GIT-REPO-URL

또는 이미 프로젝트를 복제한 경우 다음을 사용할 수 있습니다.

 git submodule init git submodule update

Javier C.

[빠른 답변]

상위 리포지토리(일부 하위 모듈 리포지토리 포함)를 복제한 후 다음을 수행합니다.

 git submodule update --init --recursive

Benyamin Jafari

하위 모듈이 분기에 추가된 경우 복제 명령에 포함해야 합니다...

 git clone -b <branch_name> --recursive <remote> <directory>

Mars Redwyne

이 시도:

 git clone --recurse-submodules

상위 프로젝트에 하위 모듈을 이미 추가했다고 가정하면 자동으로 하위 모듈 데이터를 가져옵니다.


nweiler

나는 당신이 3 단계로 갈 수 있다고 생각합니다.

 git clone git submodule init git submodule update

muhammad ali e

늦은 답변

 // git CLONE INCLUDE-SUBMODULES ADDRESS DESTINATION-DIRECTORY git clone --recursive https://USERNAME@bitbucket.org/USERNAME/REPO.git DESTINATION_DIR

방금 친구와 만지작거리며 한 시간을 보냈을 때: BitBucket에 대한 관리자 권한이 있더라도 항상 ORIGINAL 저장소를 복제하고 저장소를 소유한 사람의 암호를 사용하십시오. 당신이 이 지뢰 덫에 걸렸다는 사실을 알게 되어 짜증이 납니다. :P


kaiser

리포지토리를 복제할 때 --recursive 플래그를 사용할 수 있습니다. 이 매개변수는 git이 저장소에 정의된 모든 하위 모듈을 복제하도록 합니다.

 git clone --recursive git@repo.org:your_repo.git

복제 후 하위 모듈 분기가 변경될 수 있으므로 다음 명령을 실행합니다.

 git submodule foreach "git checkout master"

Ahmad Azimi

git 저장소에 하위 모듈을 포함하려면 이것을 시도하십시오.

 git clone -b <branch_name> --recursive <remote> <directory>

또는

 git clone --recurse-submodules

radhey shyam

이 명령을 사용하여 모든 하위 모듈과 함께 repo를 복제하십시오.

 git clone --recurse-submodules git@gitlab.staging-host.com:yourproject

모든 하위 모듈에 대한 코드를 업데이트하려면

 git submodule update --recursive --remote

Antier Solutions

하위 모듈 병렬 가져오기는 한 번에 여러 저장소를 가져올 수 있도록 하여 저장소 및 모든 관련 하위 모듈을 가져오는 데 필요한 시간을 줄이는 것을 목표로 합니다. 이것은 새로운 --jobs 옵션을 사용하여 수행할 수 있습니다. 예:

 git fetch --recurse-submodules --jobs=4

Git 팀에 따르면 많은 하위 모듈이 포함된 리포지토리 업데이트 속도를 크게 높일 수 있습니다. 새로운 --jobs 옵션 없이 --recurse-submodules를 사용하면 Git은 하위 모듈을 하나씩 가져옵니다.

출처: http://www.infoq.com/news/2016/03/git28-released


Long Nguyen

GitHub 리포지토리에 대해 동일한 문제가 있었습니다. 내 계정에 SSH 키가 없습니다. 과정은

  1. SSH 키 생성
  2. GitHub 계정에 새 SSH 키 추가

git clone --recursive YOUR-GIT-REPO-URL )을 사용하여 저장소를 복제할 수 있습니다.

또는

git submodule initgit submodule update 를 실행하여 이미 복제된 저장소에서 하위 모듈을 가져옵니다.


FatalError

새 프로젝트인 경우 간단히 다음과 같이 할 수 있습니다.

 $ git clone --recurse-submodules https://github.com/chaconinc/YourProjectName

다음보다 이미 설치된 경우:

 $ cd YourProjectName (for the cases you are not at right directory) $ git submodule init $ git submodule update

nzrytmn

이 시도.

 git clone -b <branch_name> --recursive <remote> <directory>

분기에 하위 모듈을 추가한 경우 복제 명령에 추가해야 합니다.


Himeshika96

프로젝트 디렉토리에서 이 작업을 수행하기만 하면 됩니다.

 $ git submodule init $ git submodule update

Rajitha Udayanga

git submodule foreach git pull origin master

Tappas

출처 : http:www.stackoverflow.com/questions/3796927/how-to-git-clone-including-submodules

반응형