문제

git-fetch의 뉘앙스를 이해하는 데 어려움을 겪고 있습니다.나는 그것을 이해한다 fetch, 원격 참조를 로컬 추적 분기로 가져옵니다.

하지만 몇 가지 질문이 있습니다.

  1. 로컬 추적 지점이 존재하지 않을 수도 있습니까?그렇다면 자동으로 생성되나요?

  2. 내가 어떤 일을 하면 어떻게 될까요? fetch 비추적 지점을 대상으로 지정하시겠습니까?

  3. 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 in refs/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."는 더 이상 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top