문제
git-fetch의 뉘앙스를 이해하는 데 어려움을 겪고 있습니다.나는 그것을 이해한다 fetch
, 원격 참조를 로컬 추적 분기로 가져옵니다.
하지만 몇 가지 질문이 있습니다.
로컬 추적 지점이 존재하지 않을 수도 있습니까?그렇다면 자동으로 생성되나요?
내가 어떤 일을 하면 어떻게 될까요?
fetch
비추적 지점을 대상으로 지정하시겠습니까?git-fetch 매뉴얼 페이지는 다음을 지정합니다.
git-fetch <options> <repository> <refspec>
refspec을 사용하여 원격 마스터의 콘텐츠를 원격 추적 분기로 가져오려면 어떻게 해야 합니까?현재 HEAD가 마스터에 있고 실행하면 이것이 가능할 것이라고 믿습니다.
git fetch origin master
그러나 다음을 사용할 수 있습니까? <+?src:dest>
같은 것을 달성하기 위해 refspec이 있습니까?개념을 더 잘 이해하는 데 도움이 될 것 같아요.
그리고 질문 하나 더:
내 .git/config 파일에는 가져오기를 위한 다음 줄이 있습니다(관련 줄만 표시).
fetch = +refs/heads/*:refs/remotes/origin/*
누군가 이 줄이 정확히 무엇을 의미하는지 설명해 주실 수 있나요?
해결책
첫째, 그러한 개념은 없습니다 로컬 추적 가지만 원격 추적 가지. 그래서 원산지/마스터 원격 추적 지점입니다 주인 에서 기원 레포.
일반적으로 당신은합니다 git fetch $ 리모컨 모든 원격 트래킹 브랜치를 업데이트하고 필요한 경우 새로운 지점을 만듭니다.
그러나 REFSPEC을 지정할 수도 있지만 원격 추적 브랜치를 터치하지 않고 대신에 지정한 지점을 가져와 대상을 지정하지 않는 한 FCTE_HEAD에 저장합니다. 일반적으로 당신은 이것을 엉망으로 만들고 싶지 않습니다.
드디어,
fetch = +refs/heads/*:refs/remotes/origin/*
당신이한다면 그것은 의미합니다
git fetch origin
실제로 할 것입니다 :
git fetch origin +refs/heads/*:refs/remotes/origin/*
리모컨을 의미합니다 머리/foobar 현지가 될 것입니다 리모컨/원산지/foobar, 그리고 플러스 부호는 빠르게 진행되지 않더라도 업데이트 될 것임을 의미합니다.
아마도 당신이 추적 지점으로 생각하는 것은 git 당기기 그리고 병합 구성.
다른 팁
펠리펙 가지다 그의 대답에서 문제의 대부분의 문제에 대답했습니다.
남은 몇 명 (대부분은 가져 왔습니다 git fetch 인력; 불행히도 일부 장소에서는 약간 날짜가 있습니다) :) : 불행히도) :
만약에 원격 트래킹 브랜치 (일부 원격 저장소에서 일부 분기를 추적하는 분기)가 존재하지 않으면 생성됩니다.
당신이 가져온 가지 (The
<dst>
안에[+]<src>:<dst>
) 거주 할 필요가 없습니다remotes/<remote>/
네임 스페이스. 예를 들어 미러링 리포지토리의 경우 (git clone --mirror
) refspec은 1 ~ 1입니다. 별도의 리모컨 레이아웃 전 옛날에 (전remotes/<remote>/
원격 추적 참조를위한 네임 스페이스) 주인 지점이 지점으로 가져 왔습니다 기원. 현재 태그조차도 직접 가져옵니다tags/
미러링 방식의 네임 스페이스.분기가 당신이 가져 오는 경우 (Refspec의 오른쪽)
<src>:<dst>
존재하는 경우, Git은 다운로드가 빠르게 진행되는지, 즉 현재 상태가<dst>
국가의 조상입니다<src>
주어진 원격 저장소에서. 그렇지 않은 경우 사용하지 않습니다-f
/--force
'+'가있는 git-fetch 또는 prefix refspec 옵션 (사용+<src>:<dst>
RefSpec) Fetch는 해당 브랜치 업데이트를 거부 할 것입니다.git fetch origin master
동일합니다git fetch origin master:
, 그렇지 않습니다git fetch origin master:master
; 그것은 저장 한 가치를 가져옵니다 주인 분기 (원격 기원) 안에 fetch_head, 그리고 안에 주인 분기 또는 원격 추적remotes/origin/master
나뭇가지. 이어질 수 있습니다git merge FETCH_HEAD
. 일반적으로 직접 사용되지 않지만 원격 추적 브랜치를 설정하지 않고 일회성 풀의 일부로 사용하십시오.git pull <URL> <branch>
.+refs/heads/*:refs/remotes/origin/*
가치로 remote.origin.fetch 구성 변수는 각 분기 (ref inrefs/heads/
원격으로 네임 스페이스) 기원 각각 이름이 지어진 원격 트래킹 브랜치로 가져옵니다refs/remotes/origin/
네임 스페이스, 예를 들어 주인 지점 기원 (즉refs/heads/master
참조)가 가져올 것입니다 원산지/마스터 원격 트래킹 브랜치 (예 :refs/remotes/origin/master
참조). '+'접두사는 Fetch가 빠르게 진행되지 않은 경우에도 성공할 것임을 의미합니다. 즉, 원격의 분기가 다시 거부되거나 재설정 (과거의 일부 상태로 재설정) 또는 다른 방식으로 수정 될 때를 의미합니다.
사이드 노트 : 당신은 아마도 더 높은 수준을 사용하고 싶을 것입니다 git 리모컨 원격 리포지토리를 관리하고 업데이트를 받으려는 명령.
이제 Git의 주요 관리자(Git 2.1, 2014년 8월)가 다음에 대한 설명을 추가했습니다. git fetch
:
(보다 fcb14b0 커밋 ~에 의해 주니오 C 하마노(gitster
):
구성된 원격 추적 지점
정기적으로 반복적으로 가져오는 방식으로 동일한 원격 저장소와 상호 작용하는 경우가 많습니다.이러한 원격 저장소의 진행 상황을 추적하기 위해,
git fetch
구성할 수 있습니다.remote.<repository>.fetch
구성 변수.일반적으로 이러한 변수는 다음과 같습니다.
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
이 구성은 두 가지 방법으로 사용됩니다.
언제
git fetch
명령줄에서 가져올 분기 및/또는 태그를 지정하지 않고 실행됩니다.git fetch origin
또는git fetch
,remote.<repository>.fetch
값은 다음과 같이 사용됩니다. refspecs---가져올 참조와 업데이트할 로컬 참조를 지정합니다..
위의 예는 다음에 존재하는 모든 분기를 가져옵니다.origin
(즉.값의 왼쪽과 일치하는 모든 참조,refs/heads/*
) 및 해당 원격 추적 분기를 업데이트합니다.refs/remotes/origin/*
계층.언제
git fetch
명령줄에서 가져오기 위해 명시적인 분기 및/또는 태그를 사용하여 실행됩니다.git fetch origin master
,<refspec>
명령줄에 주어진 s는 무엇을 가져올지 결정합니다(예:master
이 예에서는master:
, 이는 "'를 가져오다'를 의미합니다.master
' 분기를 사용하지만 명령줄에서 업데이트할 원격 추적 분기를 명시적으로 말하지는 않습니다."), 예제 명령이 가져오는 내용은 다음과 같습니다. 오직 'master
' 나뭇가지.
그만큼remote.<repository>.fetch
값은 업데이트되는 원격 추적 분기(있는 경우)를 결정합니다.
이런 식으로 사용하면,remote.<repository>.fetch
가치는 결정에 아무런 영향을 미치지 않습니다. 무엇 가져옵니다(예:명령줄에 참조 사양이 나열될 때 해당 값은 참조 사양으로 사용되지 않습니다.그들은 결정하는 데에만 사용됩니다 어디 가져온 참조는 매핑 역할을 하여 저장됩니다.
또한 Git 2.5+(2015년 2분기)에서는 git merge FETCH_HEAD
~할 수 있다 여러 git fetch를 병합.
보다 d45366e 커밋 ~에 의해 주니오 C 하마노(gitster
), 2015년 3월 26일.
(병합자: 주니오 C 하마노 -- gitster
-- ~에 bcd1ecd를 커밋, 2015년 5월 19일)
"
git merge FETCH_HEAD
"이전의 것을 배웠습니다"git fetch
"는 Octopus 병합을 만드는 것일 수 있습니다. 즉,"병합 불가"로 표시되지 않은 여러 분기를 기록합니다.
이를 통해 이전 스타일 호출을 잃을 수 있습니다."git merge <msg> HEAD $commits...
"의 구현에서 "git pull
" 스크립트;이전 스타일 구문은 이제 더 이상 사용되지 않을 수 있습니다.
그만큼 git merge
문서 이제 언급하십시오 :
언제
FETCH_HEAD
(다른 커밋은 없음)이 지정되었습니다. 에 기록된 가지.git/FETCH_HEAD
이전 호출에 의한 파일git fetch
병합을 위해 현재 분기에 병합됩니다..
Git 2.13(2017년 2분기)에서는 공식적으로 이전 구문을 폐기합니다. git merge
.
보다 b439165 커밋 (2015년 3월 26일) 주니오 C 하마노(gitster
).
(병합자: 주니오 C 하마노 -- gitster
-- ~에 1fdbfc4 커밋, 2017년 3월 30일)
merge
:떨어지다 'git merge <message> HEAD <commit>
' 구문지원 중단"
git merge <message> HEAD <commit>
"2007 년 10 월 이후 더 이상 사용되지 않은 구문은 v2.5.0 이후 감가 상각 경고 메시지를 발행합니다.
이는 이전 스타일의 경고 메시지 "를 의미합니다.'git merge <msg> HEAD <commit>' is deprecated.
"는 더 이상 없습니다.