programing

Git 분기: 마스터 대 오리진/마스터 대 원격/오리진/마스터

i4 2023. 7. 5. 20:05
반응형

Git 분기: 마스터 대 오리진/마스터 대 원격/오리진/마스터

저는 기트의 기본 개념을 제대로 이해하고 있다고 생각합니다.

원격 저장소를 이미 설정하고 복제했습니다.또한 서버 측 빈 리포지토리를 만들고 로컬 리포지토리를 연결했습니다.

문제는 다음과 같은 차이점을 이해하지 못한다는 것입니다.

  • 오리진/마스터 대 원격/리모트/마스터

가 알기로는 마스터는 로컬 브랜치이고, remote/origin/master는 원격 브랜치입니다.

하지만 기원/마스터는 정확히 무엇입니까?

하고 원격저을생고실행을 합니다.git branch -a(git이 알고 있는 모든 가지를 보여주기 위해).아마도 다음과 같이 보일 것입니다.

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

여기서,master로컬 리포지토리의 분기입니다. remotes/origin/master라는 이름의 분기입니다.master이 " 는라이원서에지격"인 원격에서.origin다음 중 하나로 참조할 수 있습니다.origin/master다음과 같이:

git diff origin/master..master

다음과 같이 참조할 수도 있습니다.remotes/origin/master:

git diff remotes/origin/master..master

동일한 항목을 참조하는 두 가지 다른 방법이 있습니다(참고로, 두 명령 모두 "원격 간의 변경 사항 표시"를 의미합니다).master과 나의 랜치앤마이브이.master분기).

remotes/origin/HEAD는 것은입니다.default branch이름이 " "인origin이것은 간단히 말할 수 있습니다.originorigin/master.

나와 같은 바보들을 위한 짧은 대답(토렉에게서 도난):

  • 오리진/마스터는 "마지막으로 확인했을 때 마스터가 있었던 위치"입니다.
  • 마스터는 "내가 해온 일에 따라 마스터가 여기 있는 곳"입니다.

기술적으로 Gitrepo에는 실제로 "원격" 항목이 전혀1 없습니다. 다른 다른 repo의 이름과 일치해야 하는 로컬 이름만 있습니다.이름이 붙은 사람들은origin/whatever처음에는 복제한 repo의 데이터와 일치합니다.

git clone ssh://some.where.out.there/some/path/to/repo # or git://some.where...

다른 레포의 로컬 복사본을 만듭니다. 과정에서하고, 는, 그과에서그고기, 을들언고하급, 붙는당지이다니, 으로 로컬 에 붙입니다.refs/remotes/origin/.

이 얼마나 걸리느냐에 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜgit fetch아니면 "내 물건의 복사본"을 업데이트하는 것과 같습니다.디서어. .there"는 하거나 새 할 수 ."그곳에서, 그들은 그들의 분기를 바꾸고, 새로운 분기를 만들고, 일부를 삭제할 수 있습니다.당신이 당신의 일을git fetch(또는)git pull새만들고 모든 "fetch + merge", "fetch + merge"를합니다.refs/remotes/origin/<name>필요에 따라 항목을 입력합니다.바로 그 순간입니다.fetch모든 것이 일치하도록 만드는 것(글쎄요, 그리고 초기 클론, 그리고 일부 사례)push기본적으로 Git가 확인할 기회가 있을 때마다 아래의 주의 사항을 참조하십시오.

Git은 보통 당신이 당신 자신을 언급하도록 합니다.refs/heads/<name><name>그리고 먼 곳의 사람들은origin/<name>어느 것이 어느 것인지 분명하기 때문에 모든 것이 작동합니다.까지 그것에 :-) 짧은 거기서부터 됩니다: " 때때로명않지가것만만지에드때그걱까지런정하지다지마이십시가은름오짧을는확하게하게명장정할하발면생일이는게이름능을확하하이하는유점한고지▁:▁g-)에▁it▁there:▁go▁fromit▁names▁:▁that▁will▁your명게하가이오짧▁thatit지다확▁until는▁own하▁about게시▁make'origin/master했을 때 곳이며, "는 가입마지때저있내곳었던기니다"입니다.master"내가 해온 일을 근거로 마스터가 여기 있는 곳"입니다.려달을 합니다.git fetch필요에 따라 "마스터가 있는 위치"에서 Giton을 업데이트합니다.


: 1.8.4 Git입니다.git fetch에는 "마스터가 있는 위치"를 업데이트하지 않는 일부 모드가 있습니다(더 정확하게는 원격 검색 분기를 업데이트하지 않는 모드). 중입니다.git fetch origin또는git fetch --all 그냥 아면그냥니▁just.git fetch업데이트를 수행합니다.입니다.git fetch origin master 하지 않습니다.안타깝게도 이 "업데이트 안 함" 모드는 일반적으로 트리거됩니다.git pull 1


1글쎄요, "원격"이라고 불리는 것이 하나 있습니다.하지만 그것 또한 지역적입니다!그 이름은originGit이 "리모트"라고 부르는 것입니다.기본적으로 복제할 때 사용한 URL의 짧은 이름입니다.그것은 또한 그 장소입니다.originorigin/master출신이다.그 이름은origin/master이를 원격 검색 분기라고 하며, 특히 오래된 문서나 비공식 문서에서는 "원격 분기"로 줄여 쓰기도 합니다.

저는 @Erich를 만들기 위해 노력할 것입니다.초보자를 위한 Bschulz의 대답은 간단합니다.

  • origin/master는 원격 리포지토리의 마스터 분기 상태입니다.
  • master는 로컬 리포지토리의 마스터 분기 상태입니다.
  1. origin - 원격을 가리키는 가장 일반적인 사용자 지정 이름입니다.

$ git remote add origin https://github.com/git/git.git이 명령을 실행하여 github 프로젝트를 오리진에 연결합니다.여기서 오리진은 사용자 정의입니다.이름을 변경할 수 있습니다.$ git remote rename old-name new-name


  1. master - Git의 기본 분기 이름입니다.원격 컴퓨터와 로컬 컴퓨터 모두에 사용됩니다.

  1. origin/master - 원격 repo에서 마스터 분기를 참조하기 위한 포인터일 입니다.원점이 원격을 가리킨다고 했던 것을 기억하세요.

$ git fetch origin원격 리포지토리에서 로컬 컴퓨터 [오리진/마스터]로 개체 및 참조를 다운로드합니다.즉, 다음을 사용하여 마스터 분기를 병합하지 않는 한 로컬 마스터 분기에 영향을 주지 않습니다.$ git merge origin/master할 확인하십시오.

참고: 가져온 콘텐츠는 원격 분기로 표시됩니다.가져오기는 변경사항을 프로젝트 복사본에 통합하기 전에 검토할 수 있는 기회를 제공합니다.와 원격 사용자 사항을 $git diff master..origin/master

한 가지 설명(그리고 나를 혼란스럽게 했던 점):

"remote/origin/HEAD가 기본 분기입니다."는 정확하지 않습니다.

remote/message/master가 원격 리포지토리의 기본 분기입니다(마지막으로 확인한 경우).HEAD는 분기가 아니라 분기를 가리킬 뿐입니다.

HEAD를 작업 영역으로 생각합니다.이렇게 생각하면 작업 영역 파일을 특정 분기의 파일로 변경하는 것과 관련하여 'git checkout branchname'이 의미가 있습니다.분기 파일을 작업 영역으로 "체크아웃"합니다.모든 실용적인 목적을 위한 HEAD는 작업 영역에서 볼 수 있는 것입니다.

나는 이 깃슬래시 표기법이 아마도 당신의 내부를 보면 가장 잘 이해될 것이라고 생각합니다..git폴더를 누릅니다.


예를 들어, 여기 LibreOffice 소스 기반에 대한 my .git의 다소 축약된 트리가 있습니다.

리눅스에서 sudo apt-get install tree이 항목을 보는 데 유용합니다.
Windows의 경우에 따라tree명령이 계속 작동할 수 있습니다.

아래로 스크롤하여 하단 근처의 참조(일명 '참조')를 살펴봅니다.

$ tree  
.  
├── branches  
├── config  
├── description  
├── FETCH_HEAD  
├── gitk.cache  
├── HEAD  
├── hooks  
│   ├── applypatch-msg.sample  
    ...
├── index  
├── info  
│   └── exclude  
├── logs  
│   ├── HEAD  
│   └── refs  
│       ├── heads  
│       │   ├── master  
│       │   └── remotes  
│       │       └── origin  
│       └── remotes  
│           └── origin  
│               ├── distro  
│               │   ├── cib  
│               │   │   └── libreoffice-6-0  
│               │   ├── collabora  
│               │   │   └── cp-6.0  
│               │   └── lhm  
│               │       └── libreoffice-5-2+backports  
│               ├── HEAD  
│               ├── libreoffice-6-2  
│               ├── master  
│               └── private  
│                   └── mst  
│                       └── sw_redlinehide_4a  
├── objects  
│   ├── info  
│   └── pack  
│       ├── pack-b80087dc57e2b3315f449ca0f1aaa91987bf0c5e.idx  
│       ├── pack-b80087dc57e2b3315f449ca0f1aaa91987bf0c5e.pack  
│       ├── pack-eb4e6808029e712d8d9c2671accbbd98aaeb9a04.idx  
│       └── pack-eb4e6808029e712d8d9c2671accbbd98aaeb9a04.pack  
├── ORIG_HEAD  
├── packed-refs  
└── refs  
    ├── heads  
    │   ├── master  
    │   └── remotes  
    │       └── origin  
    ├── remotes  
    │   └── origin  
    │       ├── distro  
    │       │   ├── cib  
    │       │   │   └── libreoffice-6-0  
    │       │   ├── collabora  
    │       │   │   └── cp-6.0  
    │       │   └── lhm  
    │       │       └── libreoffice-5-2+backports  
    │       ├── HEAD  
    │       ├── libreoffice-6-2  
    │       ├── master  
    │       └── private  
    │           └── mst  
    │               └── sw_redlinehide_4a  
    └── tags  
        └── libreoffice-6-2-branch-point  

32 directories, 45 files

이렇게 배치했다면 덜 혼란스러웠을 수도 있지만, 그렇지는 않았습니다.

repositories (i.e. independent trees)
├──local
│  └──master
│
└──origin1
│  └──master
└──origin2
   └──master

참조에는 헤드, 원격 태그의 세 가지 기본 유형이 있습니다.

  • .git/refs/heads로컬 마스터를 보유하고 있습니다.

  • .git/refs/remote는 여러 가지 원격을 저장할 수 있지만 현재는 오리진만 있습니다.

  • .git/refs/refs/refs(다른 곳에서 논의됨).

따라서 원점은 우리의 유일한 원격입니다.오리진/마스터를 포함합니다.


2개의 HEAD(현재 지점에 대한 포인터), 1개의 로컬 및 1개의 원격이 있습니다.

$ cat .git/HEAD                        #         local:  HEAD -> master
ref: refs/heads/master

$ cat .git/refs/remotes/origin/HEAD    # remote origin:  HEAD -> master
ref: refs/remotes/origin/master

분기를 나열하는 경우:

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/aoo/aw080
  remotes/origin/aoo/trunk
  remotes/origin/distro/capgemini/cg-4.1
  remotes/origin/distro/cib/libreoffice-5-0
  remotes/origin/distro/cib/libreoffice-5-1
  remotes/origin/distro/cib/libreoffice-5-2
  ...
  • 나열된 첫 번째 분기(마스터)만 원격이 아닙니다.이 경우에는 하나의 지역 지점이 있습니다.여기서 새로운 지점과 이후 커밋을 위한 자체 작업을 시작합니다.

다음으로, 원격 추적 지점이 많이 있을 수 있으며, 여기에 있습니다.접두사가 'remote/'이기 때문에 원격 추적 분기입니다.여기에 표시된 것은 원격 명명된 오리진용입니다.

  • 두 번째 줄은 오리진의 현재 분기 포인터입니다.원격/원산지 : HEAD --points to--> master.이것은 원격 저장소에서 현재 분기가 마스터라는 이름의 분기임을 나타냅니다(마스터라는 이름의 로컬 분기와 혼동되지 않음).

  • 것이 .git/refs/에서 찾을 수 . 대신 다음에서 찾을 수 있습니다..git/packed-refs.

가져오기를 수행하면 변경 사항을 원격 저장소에서 원격 추적 저장소로 다운로드합니다.

병합할 때 이 로컬 원격 추적 저장소의 변경 사항을 작업 중인 로컬 분기(이 경우에는 마스터 분기)에 병합합니다.

(끌어당길 때는 한 번의 작업으로 이 두 단계를 모두 수행합니다.)


마스터에 대한 이러한 로컬 및 원격 UUID가 현재 동일한 노드(일명 'commit')를 가리키고 있다는 점도 흥미롭습니다.

$ cat refs/heads/master                   # local         master
1ca409292272632f443733450313de5a82c54a9c

$ cat refs/remotes/origin/master          # remote origin master
1ca409292272632f443733450313de5a82c54a9c

로컬 마스터는 원격의 오리진 마스터와 동일한 위치를 가리킵니다.

[local] master = [remote] origin master

마지막으로, 저는 또한 그것을 보는 것이 유용하다고 생각합니다..git/packed-refs

$ cat packed-refs 
# pack-refs with: peeled fully-peeled 
3c1d4742e649fe9c8aed8c2817fe3e1f3364f298 refs/remotes/origin/aoo/aw080
e87c8b7922e9a73e0abb7f9a7a47c9ac3374a826 refs/remotes/origin/aoo/trunk
b70fdffb041c12f124dcc0822b61bf3450e53137 refs/remotes/origin/distro/capgemini/cg-4.1
5dbc3f1754809b9489faaf380b1a4bdbcfbb6205 refs/remotes/origin/distro/cib/libreoffice-5-0
cfdbc96ca47d68d6785fd21829a8d61f49d6e591 refs/remotes/origin/distro/cib/libreoffice-5-1
5189c8c47461ef09739086e55512fc6a10245273 refs/remotes/origin/distro/cib/libreoffice-5-2
3bee5917569ca8e6ee3b086458f5b1a917b88ca1 refs/remotes/origin/distro/cib/libreoffice-5-3
92fbe703f9ca480d3a2b8610d87e991c729edf77 refs/remotes/origin/distro/cib/libreoffice-5-4
05c0a5df66cc69d75280f05b804cf82f3387d42b refs/remotes/origin/distro/cib/libreoffice-6-0
7fe193e759b24b90852e6e327115b77114d7b119 refs/remotes/origin/distro/cib/libreoffice-6-1
8187f7aa413e7ef7b377eea2b057d336bf256867 refs/remotes/origin/distro/collabora/cd-5.3
7a6b608591e21ef61dc05cff9fc58da531035755 refs/remotes/origin/distro/collabora/cd-5.3-3.1
....

이것은 의심할 여지 없이 답보다 더 많은 질문을 남깁니다. 하지만 무엇이 무엇인지에 대한 여러분의 질문에 답하는 데 도움이 될 수 있다고 생각합니다.

언급URL : https://stackoverflow.com/questions/10588291/git-branching-master-vs-origin-master-vs-remotes-origin-master

반응형