원격 Git 리포지토리에서 특정 커밋 가져오기

내 PC에 복제하지 않고 원격 Git 리포지토리에서 특정 커밋 하나만 검색할 수 있는 방법이 있나요? 원격 리포지토리의 구조는 내 리포지토리와 완전히 동일하므로 충돌은 없지만 이 작업을 수행하는 방법을 모르겠고 그 거대한 리포지토리를 복제하고 싶지 않습니다.

저는 깃을 처음 사용하는데 방법이 있을까요?

질문에 대한 의견 (8)
해결책

깃 (git) 을 시작으로 2015년 버전 2.5+ (Q2), 단일 커밋합니다 불러오기 (클론한 없이 전체 리포) 는 실제로 폴링합니다. 참조 [커밋합니다 68ee628] (https://github.com/git/git/commit/68ee628932c2196742b77d2961c5e16360734a62) 에서 [프레드리크 메들리 ('모르텐')] (https://github.com/moroten), 21일 5월 2015년. sup&gt <; (병합되었습니다 에서 [주니우 캜 하마노 기트스터 '-' -] (https://github.com/gitster) 에서 [커밋합니다 a9d3493] (https://github.com/git/git/commit/a9d34933803198f89ad721ee17f138b046131090), 01일 6월 2015년), /sup&gt &lt. 이제 새로운 구성 (server side)

uploadpack.allowReachableSHA1InWant

&gt. '업로드하십시오 팩 줄 것을 요청할 수 있는' 에서 접속할 수 있는 모든 객체에 대한 참조가 수락하려면 페치할 묻는 팁. 하지만 계산할 수 있다는 계산이 비싸다구요 연결가능성 객체에는 있다. 기본적으로 '거짓'. 결합할 경우 해당 서버 측 구성과 얕은 클론할 ('-' 깊이까지의 페치할 깃 (git) = 1), 단일 커밋합니다 요구할 수 있습니다 (자세한 내용은 ['t/t5516-fetch-push.sh'] [2]:

git fetch --depth=1 ../testrepo/.git $SHA1

깃 (git) 을 확인하기 위해 사용할 수 있습니다 '명령' cat 파일 커밋합니다 반입됨 왔다.

git cat-file commit $SHA1

&gt. 깃 (git) ',' &quot 업로드하십시오 팩 &quot. 깃 (git) ',' 역할을 하는 &quot 페치할 &quot. 리즈한테 할 수 있습니다. 어떤 이들은 없는 ref, deltamove 커밋한 http://support. tip ref uploadpack.allowReachableSHA1InWant 접속할 수 있는 '에서' 구성 변수다.

전체 문서는: &gt. # '업로드하십시오 팩': 페치 허용하시겠습니까 sha1 접속할 수 있습니다 &gt. 깃 (git) '의 구성 설정 옵션을 통해 uploadpack.allowreachablesha1inwant 서버 측에서', '&quot 페치할 &quot. 요청을 할 수 있는 want&quot "; 줄이 개체에 이름이 않은 광고됨 (있을 가능성이 큰 것으로 보고 받은 아웃오브밴드 호출하든 한 서브모두리 포인터입니다). 즉, 접속할 수 있는 오브젝트만 분기에서 팁 및 분기로서의 트란스페리히데레프스 의해 숨겨진 ',' the union of 광고됨 분기로서의 처리됩니다. 참고로 관련 비용 문제가 발생할 수 있기 때문에 다시 확인할 수 있도록 연결가능성 걸을 수 있다. &gt. 특정 로칼에서 컨텐트에서 받을 때 이 기능을 사용할 수 있습니다. 알려져 있는 sha1 클론한 전체 필요 없이, 얕은 페치할 사용할 경우, 특히 리포지토리를 . &gt. 유용한 경우는 (예: &gt. - 리포지토리를 대용량 파일을 포함 사상

  • 만 불러오기 위해 필요한 데이터를 서브모두리 체크아웃합니다,
  • 공유할 때, 그 정확한 분기로의 속해 있는 sha1 물어보지도 않고 그렇게 생각한다면, 게릿 커밋한 변경하십시오 측면에서 대신 숫자임. (이 게릿 경우 이미 해결 '는' 를 통해 모든 게릿 allowTipSHA1InWant 변경하십시오 참조.)
  • 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&gt <; (병합되었습니다 에서 [주니우 캜 하마노 기트스터 '-' -] (https://github.com/gitster) 에서 [커밋합니다 824a0be] (https://github.com/git/git/commit/824a0be6be8d6c3323003bae65b3df98387e575b), 19일 8월 2015년), /sup&gt &lt. &gt. # '참조': 지원 제외어 트란스페리히데레프스 '' &gt. Refs 의 계층을 사용하여 숨기면 트란스페리히데레프스 &quot 수 있는 방법이 없다 '' 구성, 나중에 구성용 오버라이드합니다 unhide"; it. 이 패치는 &quot 구축, negative&quot. 어떤 경우에도 즉시 다른 것으로 인해 숨기십시오 일치시킵니다 일치시킵니다 숨기십시오 아니하였으매 나타내기 때문이다. 우리는 이 경기를 통해 우리에게 잘있게나 적용하십시오 역순으로 방식에 의해 기계 등 우리의 일반적인 &quot 구성용 급지됨 수 있는 마지막 1 wins"; 구성용 우선순위 작동합니까 (및 항목은 '.git/config', 예를 들어, / etc / 기트콘피그 오버라이드합니다 ''). &gt. 그래서 할 수 있습니다.

git config --system transfer.hideRefs refs/secret
git config transfer.hideRefs '!refs/secret/not-so-secret'

&gt. '비밀' 을 제외한 모든 레포스 관련해 한 비트 / 숨기기 위해 참조 하나의 특정 리포.

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&gt <; (병합되었습니다 에서 [제프 프레프 - '킹' -] (https://github.com/peff) 에서 [커밋합니다 dbba85e] (https://github.com/git/git/commit/dbba85e46b9c7450710a23208ca1868179330e1e), 20일 11월 2015년), /sup&gt &lt. &gt. # '콘피그리그스테스트': 문서화해야 시맨틱스를 히데레프스 이름공간이 있는 '의' &gt. 지금 당장 어떻게 할 수 없다 '정의' 트란스페리히데레프스 선택해제합니다 동작할 때 이름공간이 설정되었습니다. 이 경우 접두사 '이름 있는' 히데레프스 설명하란말야 해당되어서는 남겨두었습니다. 이는 현재 '어떻게' 히데레프스 패턴 구매시스템통합에 팩 처리합니다. &gt. # 히데레프스: 전체 참조 찾기 위한 지원 추가 &gt. 그 외에도 추가할 수 있습니다 '' 패턴 매칭 빼앗아 참조, 한 히데레프스 일치됩니다 전체 (언스트리프트) 참조. 이러한 새로운 패턴 및 전체 일치시킵니다 접두어로 빼앗아 구별할 수 있어야 합니다 한 곡절 부호 ('^'). 따라서 [새 문서용으로] [3]:

transfer.hideRefs:

&gt. 이름공간이 접두사가 통해 제거할 경우 사용 중인 이름공간이 전에 각 참조입니다 일치됩니다 '트란스페리히데레프스' 으로 나타낼 수 있다. 예를 들어, '참조' 와 '마스터' 지정되어 트란스페리히데레프스 앞면이야 / / 현재 이름공간이 foo / / / / 네임스페이스을 '참조' 는 'foo 관심용 앞면이야 / 마스터' 참조 하지만 '와' 참조 / 광고 / 마스터에는 생략되었을 앞면이야 '참조 / / / / / 마스터' 로 불리는 여전히 광고됨 앞면이야 네임스페이스을 표시줄에는 참조 &quot have"; 흐름선. 전에, 앞에 '^' arts) 에서 쌘을 추가하기에서는 일치시키려면 참조 ref name. 결합할 경우 '와' ^ ',' 처음 '!!' 를 지정해야 합니다.

R. 언급 [config. 의견] [5] ['uploadpack.allowAnySHA1InWant'] [6] '구성' a ',' 모든 것을 요구할 수 있는 업로드하십시오 팩 수락하려면 페치할 전혀 객체에는 묻습니다. (기본값은 '거짓'). 커밋합니다 f8edeaa (지켜보리니. 11월 2016년, git v2.11.1) 에서 데이비드 &quot novalis"; 터너 ('노발리스'): &gt. # '업로드하십시오 팩': 모든 sha1 선택적으로 가져오는 허용하시겠습니까 &gt. 우리가 할 수 있는 경우 체크인합니다 리샤빌티 조금 어리석은 것 같다 모든 사용자가 nnt 의탁하도록 액세스하려면 저장소에서의. &gt. 또한, 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

해설 (9)

복제는 한 번만 가능하므로 원격 리포지토리의 복제본이 이미 있는 경우 이 리포지토리에서 끌어와도 모든 것을 다시 다운로드하지 않습니다. 가져오려는 브랜치를 지정하거나 변경 내용을 가져와 원하는 커밋을 체크아웃하면 됩니다.

새 리포지토리에서 가져오기는 가지고 있지 않은 변경 사항만 다운로드하기 때문에 대역폭이 매우 저렴합니다. 최소한의 부하로 올바른 일을 하는 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으로 저장합니다.

해설 (9)

제 깃 리포지토리를 살펴봤어요:

git pull --rebase  

git이 브랜치에 대한 모든 코드를 가져올 수 있도록 허용한 다음 관심 있는 커밋으로 리셋을 수행했습니다.

git reset --hard

도움이 되었기를 바란다.

해설 (3)

다음을 사용하여 원격 리포지토리의 단일 커밋을 간단히 가져올 수 있습니다.

git fetch  

where,

  • `는 원격 리포지토리 이름(예:origin)이거나 원격 리포지토리 URL(예:https://git.foo.com/myrepo.git`)일 수 있습니다.
  • ``은 SHA1 커밋일 수 있습니다.

예를 들어

git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545

커밋(및 누락된 조상)을 가져온 후 다음과 같이 간단히 체크아웃할 수 있습니다.

git checkout FETCH_HEAD

이렇게 하면 상태가 된다는 점에 유의하세요.

해설 (9)

Remote 리포 함께 페치할 됩니다.

git fetch 

여기서,

될 수 있습니다. '-' &lt repo&gt 원격입니다 리포 이름 (예, '그'), 또는 더 원격입니다 리포 uirl (예를 들어, 'https://git.foo.com/myrepo.git')

예를 들면 다음과 같습니다.

git fetch https://git.foo.com/myrepo.git 

이 후에는 반입됨 레포스 커밋한 병합합니다 사용할 수 있습니다 (이후 이 질문 내용 중 하나만 선택하여 사용할 수 있습니다, 체리 선택 아닌 읽어들입니다 커밋합니다 병합해야 커밋합니다):

git merge 
  • ',' SHA1 커밋합니다 &lt commit&gt 될 수 있습니다.

예를 들면 다음과 같습니다.

git cherry-pick 0a071603d87e0b89738599c160583a19a6d95545

또는

git merge 0a071603d87e0b89738599c160583a19a6d95545

이 경우, 또한 최신값 보기할 커밋합니다 병합해야 FETCH_HEAD 변수를 사용할 수 있습니다.

git cherry-pick (or merge) FETCH_HEAD
해설 (3)

마지막으로 클론할 깃 (git) 을 사용하여 특정 커밋합니다 체리 선택 길을 찾았다.

39 라고 너회가 don& t 의 로컬 및 원격, 특정 커밋합니다 아무런 리포지토리를 에서 볼 수 있습니다.

  1. 의 로컬 및 빈 리포지토리를 만드시겠습니까 init 깃 (git)

  2. , &quot url-of-repository*&quo 원격 추가 깃 (git) 을 의미한다.

    • git 페치할 origin * [이 파일을 옮깁니다 작업공간에서 병합합니다 않을 경우 해당 지역]

깃 (git) 4) , &quot enter-long-commit-hash-that-you-need*&quo 체리 선택.

해당 지역 내 에서 파일 하나만 커밋합니다 운행에서어떠한 도네이티스 됩니다.

긴 커밋합니다 해시라고 입력하십시오.:

&Gt afaq afnor 사용할 수 있습니다. git 로그에서는 예쁜 = 오넬 강 -

해설 (0)

이 가장 효과적으로 사용할 수 있습니다.

git fetch origin specific_commit
git checkout -b temp FETCH_HEAD

이름 &quot temp"; 뭐든지 완t.티스 분기로의 고립된 표시되어도 수도 있습니다.

해설 (1)

39, & # 39, git ls-remote& 생쥐라. (http://git-scm.com/docs/git-ls-remote) 어떻게해야합니다 그리웠댔지. 힘 없이 페치할 또는 댕게라

해설 (0)

이 경우 요청되었습니다 커밋합니다 요청률 당기십시오 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
해설 (0)