내 PC에 복제하지 않고 원격 Git 리포지토리에서 특정 커밋 하나만 검색할 수 있는 방법이 있나요? 원격 리포지토리의 구조는 내 리포지토리와 완전히 동일하므로 충돌은 없지만 이 작업을 수행하는 방법을 모르겠고 그 거대한 리포지토리를 복제하고 싶지 않습니다.
저는 깃을 처음 사용하는데 방법이 있을까요?
깃 (git) 을 시작으로 2015년 버전 2.5+ (Q2), 단일 커밋합니다 불러오기 (클론한 없이 전체 리포) 는 실제로 폴링합니다. 참조 [커밋합니다 68ee628] (https://github.com/git/git/commit/68ee628932c2196742b77d2961c5e16360734a62) 에서 [프레드리크 메들리 ('모르텐')] (https://github.com/moroten), 21일 5월 2015년. sup> <; (병합되었습니다 에서 [주니우 캜 하마노 기트스터 '-' -] (https://github.com/gitster) 에서 [커밋합니다 a9d3493] (https://github.com/git/git/commit/a9d34933803198f89ad721ee17f138b046131090), 01일 6월 2015년), /sup> <. 이제 새로운 구성 (server side)
uploadpack.allowReachableSHA1InWant
>. '업로드하십시오 팩 줄 것을 요청할 수 있는' 에서 접속할 수 있는 모든 객체에 대한 참조가 수락하려면 페치할 묻는 팁. 하지만 계산할 수 있다는 계산이 비싸다구요 연결가능성 객체에는 있다. 기본적으로 '거짓'. 결합할 경우 해당 서버 측 구성과 얕은 클론할 ('-' 깊이까지의 페치할 깃 (git) = 1), 단일 커밋합니다 요구할 수 있습니다 (자세한 내용은 ['t/t5516-fetch-push.sh'] [2]:
git fetch --depth=1 ../testrepo/.git $SHA1
깃 (git) 을 확인하기 위해 사용할 수 있습니다 '명령' cat 파일 커밋합니다 반입됨 왔다.
git cat-file commit $SHA1
전체 문서는: >. # '업로드하십시오 팩': 페치 허용하시겠습니까 sha1 접속할 수 있습니다 >. 깃 (git) '의 구성 설정 옵션을 통해 uploadpack.allowreachablesha1inwant 서버 측에서', '" 페치할 ". 요청을 할 수 있는 want" "; 줄이 개체에 이름이 않은 광고됨 (있을 가능성이 큰 것으로 보고 받은 아웃오브밴드 호출하든 한 서브모두리 포인터입니다). 즉, 접속할 수 있는 오브젝트만 분기에서 팁 및 분기로서의 트란스페리히데레프스 의해 숨겨진 ',' the union of 광고됨 분기로서의 처리됩니다. 참고로 관련 비용 문제가 발생할 수 있기 때문에 다시 확인할 수 있도록 연결가능성 걸을 수 있다. >. 특정 로칼에서 컨텐트에서 받을 때 이 기능을 사용할 수 있습니다. 알려져 있는 sha1 클론한 전체 필요 없이, 얕은 페치할 사용할 경우, 특히 리포지토리를 . >. 유용한 경우는 (예: >. - 리포지토리를 대용량 파일을 포함 사상
Git 2.6 (2015년 Q3) 향상시킬 수 있는 모델이다. 참조 [커밋합니다 2bc31d1] (https://github.com/git/git/commit/2bc31d1631229d863376d48ef84eb846fea1df02), [커밋합니다 cc118a6] (https://github.com/git/git/commit/cc118a65b4590cc2d669679260bad7ca627f2a30) (28일 7월 2015년) 에서 [제프 킹 ('프레프')] (https://github.com/peff). sup> <; (병합되었습니다 에서 [주니우 캜 하마노 기트스터 '-' -] (https://github.com/gitster) 에서 [커밋합니다 824a0be] (https://github.com/git/git/commit/824a0be6be8d6c3323003bae65b3df98387e575b), 19일 8월 2015년), /sup> <. >. # '참조': 지원 제외어 트란스페리히데레프스 '' >. Refs 의 계층을 사용하여 숨기면 트란스페리히데레프스 " 수 있는 방법이 없다 '' 구성, 나중에 구성용 오버라이드합니다 unhide"; it. 이 패치는 " 구축, negative". 어떤 경우에도 즉시 다른 것으로 인해 숨기십시오 일치시킵니다 일치시킵니다 숨기십시오 아니하였으매 나타내기 때문이다. 우리는 이 경기를 통해 우리에게 잘있게나 적용하십시오 역순으로 방식에 의해 기계 등 우리의 일반적인 " 구성용 급지됨 수 있는 마지막 1 wins"; 구성용 우선순위 작동합니까 (및 항목은 '.git/config', 예를 들어, / etc / 기트콘피그 오버라이드합니다 ''). >. 그래서 할 수 있습니다.
git config --system transfer.hideRefs refs/secret
git config transfer.hideRefs '!refs/secret/not-so-secret'
Git 2.7 (11월 / 12월 2015년) 다시 개선될 것으로 전망했다. 참조 [커밋합니다 948bfa2] (https://github.com/git/git/commit/948bfa2c0f40a97d670c6a3fc22c05ceb2ec2c3f), [커밋합니다 00b293e] (https://github.com/git/git/commit/00b293e519d1aa0c5b57ae9359ec5306d7023b3f) (05일 11월 2015년), [커밋합니다 78a766a] (https://github.com/git/git/commit/78a766ab6eaaa91c2638158bd4fda06a93291da0), [커밋합니다 92cab49] (https://github.com/git/git/commit/92cab492ba988ffd3e3edf040f19ba820306c833), [커밋합니다 92cab49] (https://github.com/git/git/commit/92cab492ba988ffd3e3edf040f19ba820306c833), [커밋합니다 92cab49] (https://github.com/git/git/commit/92cab492ba988ffd3e3edf040f19ba820306c833) (03일 11월 2015년), [커밋합니다 00b293e] (https://github.com/git/git/commit/00b293e519d1aa0c5b57ae9359ec5306d7023b3f), [커밋합니다 00b293e] (https://github.com/git/git/commit/00b293e519d1aa0c5b57ae9359ec5306d7023b3f) (05일 11월 2015년), [커밋합니다 92cab49] (https://github.com/git/git/commit/92cab492ba988ffd3e3edf040f19ba820306c833), [커밋합니다 92cab49] (https://github.com/git/git/commit/92cab492ba988ffd3e3edf040f19ba820306c833), [커밋합니다 92cab49] (https://github.com/git/git/commit/92cab492ba988ffd3e3edf040f19ba820306c833), [커밋합니다 92cab49] (https://github.com/lfos) (03일 11월 2015년) 에서 [루카스 플라이셔 ('lfo')] (https://github.com/git/git/commit/92cab492ba988ffd3e3edf040f19ba820306c833). 의한 도움으로: [에릭 선샤인 ('선샤인코')] (https://github.com/sunshineco). sup> <; (병합되었습니다 에서 [제프 프레프 - '킹' -] (https://github.com/peff) 에서 [커밋합니다 dbba85e] (https://github.com/git/git/commit/dbba85e46b9c7450710a23208ca1868179330e1e), 20일 11월 2015년), /sup> <. >. # '콘피그리그스테스트': 문서화해야 시맨틱스를 히데레프스 이름공간이 있는 '의' >. 지금 당장 어떻게 할 수 없다 '정의' 트란스페리히데레프스 선택해제합니다 동작할 때 이름공간이 설정되었습니다. 이 경우 접두사 '이름 있는' 히데레프스 설명하란말야 해당되어서는 남겨두었습니다. 이는 현재 '어떻게' 히데레프스 패턴 구매시스템통합에 팩 처리합니다. >. # 히데레프스: 전체 참조 찾기 위한 지원 추가 >. 그 외에도 추가할 수 있습니다 '' 패턴 매칭 빼앗아 참조, 한 히데레프스 일치됩니다 전체 (언스트리프트) 참조. 이러한 새로운 패턴 및 전체 일치시킵니다 접두어로 빼앗아 구별할 수 있어야 합니다 한 곡절 부호 ('^'). 따라서 [새 문서용으로] [3]:
transfer.hideRefs:
R. 언급 [config. 의견] [5] ['uploadpack.allowAnySHA1InWant'] [6] '구성' a ',' 모든 것을 요구할 수 있는 업로드하십시오 팩 수락하려면 페치할 전혀 객체에는 묻습니다. (기본값은 '거짓'). 커밋합니다 f8edeaa (지켜보리니. 11월 2016년, git v2.11.1) 에서 데이비드 " novalis"; 터너 ('노발리스'): >. # '업로드하십시오 팩': 모든 sha1 선택적으로 가져오는 허용하시겠습니까 >. 우리가 할 수 있는 경우 체크인합니다 리샤빌티 조금 어리석은 것 같다 모든 사용자가 nnt 의탁하도록 액세스하려면 저장소에서의. >. 또한, s # 39 의 분산 시스템 - 아마도 서버 한 탈피한 it& 이 광고를 한 적이 있지만, ref, 그 후로 인력용 누름식 다른 참조 http 요청, 그 두 가지 로 전달됩니까 다니엘을 서버.
[2]: https://github.com/git/git/blob/68ee628932c2196742b77d2961c5e16360734a62/t/t5516-fetch-push.sh # L1123-L1176 [3]: https://github.com/git/git/blob/78a766ab6eaaa91c2638158bd4fda06a93291da0/Documentation/config.txt # L2677-L2684
[5]: # comment89086774_30701724 https://stackoverflow.com/questions/14872486/retrieve-specific-commit-from-a-remote-git-repository/30701724 [6]: https://git-scm.com/docs/git-config # git 구성용 uploadpackallowanysha1inwant
복제는 한 번만 가능하므로 원격 리포지토리의 복제본이 이미 있는 경우 이 리포지토리에서 끌어와도 모든 것을 다시 다운로드하지 않습니다. 가져오려는 브랜치를 지정하거나 변경 내용을 가져와 원하는 커밋을 체크아웃하면 됩니다.
새 리포지토리에서 가져오기는 가지고 있지 않은 변경 사항만 다운로드하기 때문에 대역폭이 매우 저렴합니다. 최소한의 부하로 올바른 일을 하는 Git의 관점에서 생각하세요.
Git은 모든 것을 '.git' 폴더에 저장합니다. 커밋은 단독으로 가져와서 저장할 수 없으며, 모든 조상이 필요하다. 그것들은 상호 관련되어 있다.
하지만 다운로드 크기를 줄이려면 특정 브랜치나 커밋과 관련된 오브젝트만 가져오도록 요청할 수 있다:
git fetch origin refs/heads/branch:refs/remotes/origin/branch
그러면 원격 브랜치 branch
(그리고 놓친 커밋만)에 포함된 커밋만 다운로드하여 origin/branch
에 저장한다. 그런 다음 병합하거나 체크아웃할 수 있습니다.
SHA1 커밋만 지정할 수도 있습니다:
git fetch origin 96de5297df870:refs/remotes/origin/foo-commit
그러면 지정한 SHA-1 96de5297df870(및 놓친 조상)의 커밋만 다운로드하여 (존재하지 않는) 원격 브랜치 origin/foo-commit
으로 저장합니다.
다음을 사용하여 원격 리포지토리의 단일 커밋을 간단히 가져올 수 있습니다.
git fetch <repo> <commit>
where,
<repo>
는 원격 리포지토리 이름(예: origin
)이거나 원격 리포지토리 URL(예: https://git.foo.com/myrepo.git
)일 수 있습니다.<commit>
은 SHA1 커밋일 수 있습니다.예를 들어
git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545
커밋(및 누락된 조상)을 가져온 후 다음과 같이 간단히 체크아웃할 수 있습니다.
git checkout FETCH_HEAD
이렇게 하면 <<분리된 헤드>> 상태가 된다는 점에 유의하세요.
Remote 리포 함께 페치할 됩니다.
git fetch <repo>
여기서,
될 수 있습니다. '-' < repo> 원격입니다 리포 이름 (예, '그'), 또는 더 원격입니다 리포 uirl (예를 들어, 'https://git.foo.com/myrepo.git')
예를 들면 다음과 같습니다.
git fetch https://git.foo.com/myrepo.git
이 후에는 반입됨 레포스 커밋한 병합합니다 사용할 수 있습니다 (이후 이 질문 내용 중 하나만 선택하여 사용할 수 있습니다, 체리 선택 아닌 읽어들입니다 커밋합니다 병합해야 커밋합니다):
git merge <commit>
예를 들면 다음과 같습니다.
git cherry-pick 0a071603d87e0b89738599c160583a19a6d95545
또는
git merge 0a071603d87e0b89738599c160583a19a6d95545
이 경우, 또한 최신값 보기할 커밋합니다 병합해야 FETCH_HEAD 변수를 사용할 수 있습니다.
git cherry-pick (or merge) FETCH_HEAD
마지막으로 클론할 깃 (git) 을 사용하여 특정 커밋합니다 체리 선택 길을 찾았다.
의 로컬 및 빈 리포지토리를 만드시겠습니까 init 깃 (git)
, " url-of-repository*&quo 원격 추가 깃 (git) 을 의미한다.
깃 (git) 4) , " enter-long-commit-hash-that-you-need*&quo 체리 선택.
해당 지역 내 에서 파일 하나만 커밋합니다 운행에서어떠한 도네이티스 됩니다.
&Gt afaq afnor 사용할 수 있습니다. git 로그에서는 예쁜 = 오넬 강 -
이 경우 요청되었습니다 커밋합니다 요청률 당기십시오 remote 리포 ID 별로 이해했소 수 있습니다
# Add the remote repo path, let's call it 'upstream':
git remote add upstream https://github.com/repo/project.git
# checkout the pull ID, for example ID '60':
git fetch upstream pull/60/head && git checkout FETCH_HEAD