github의 포크와 분기의 차이점


127

github에서 호스팅되는 프로젝트를 포크하면. 모든 가지를 포크합니까? 내 포크가 어떤 브랜치를 기반으로하는지 어떻게 알 수 있습니까? 다시 말해 어떤 분기가 내 PC로 다운로드됩니까?


1
간단한 영어 설명 : 가지는 부모 포크에서 나온 포크와 같습니다. 포크는 부모 브랜치가없는 브랜치와 같습니다.
Ken Kin

답변:


41

GitHub의 모든 브랜치는 포크로 복사됩니다. (분명히 여기에는 GitHub에 푸시되지 않은 브랜치가 포함되지 않습니다.)

그러나 포크는 GitHub-to-GitHub 작업입니다. 아무것도 PC에 복사되지 않습니다. Git clone 과는 다릅니다 . “프로젝트를 복제 할 때 무엇을 복사합니까?”라는 질문을하려면 설명서를 참조하십시오 git-clone(1).


153

이런 식으로 생각하십시오 :

리포지토리 는 하나 또는 여러 지점에 걸친 팀의 공동 작업에 해당합니다. 모든 기고자에게는 고유 한 사본이 있습니다.

메인 리포지토리의 각 포크 는 기고자의 작업에 해당합니다. 포크는 실제로 사용자 계정에 저장소의 복제본을 저장하는 Github (Git 아님) 구문입니다. 복제본은 포크를 만들 때 주 리포지토리의 모든 가지를 포함합니다.

포크 및 / 또는 메인 리포지토리의 각 브랜치 는 작업 방식에 따라 여러 가지 유형에 해당 할 수 있습니다. 각 브랜치는 프로젝트의 버전을 참조 할 수 있지만 핫픽스 나 실험적인 작업과 같은 다양한 개발 채널에 해당 할 수도 있습니다.

GitHub 에코 시스템 의 풀 요청 은 작업에 해당합니다. 격리 된 완료된 작업을 기본 리포지토리에 제공 할 때마다 해당 작업 의 커밋에 해당하는 풀 요청을 만듭니다 . 이 커밋은 내 포크브랜치 에서 메인 리포지토리 로 가져옵니다 .

A는 커밋 코드를 변경의 집합입니다. 이것은 Git에서 가장 흥미로운 것 중 하나입니다. 파일을 전송하지 않고 변경 로그를 전송합니다.


4
포크 / 브랜치에 대한 풀 요청 매핑과 같은 모든 관련 비트를 설명하는 방법을 좋아했습니다. "파일을 전송하지 않고 변경 로그를 전송합니다"... 이미 알고 있지만이 문구는 완벽합니다!
harshvchawla

2
포크는 git이 아니라 github임을 명확히하기 위해 플러스-하나. 감사!
emery.noel

10

포크는 GitHub 측의 복제본입니다 (모든 것을 복제합니다).
리포지토리를 복제 할 때 모든 리포지토리와 함께 모든 리포지토리의 역사를 얻게됩니다.

이론적 으로 원격 저장소의 기본 분기를 변경할 수 있지만 GitHub 저장소의 복제본은 주로 마스터 분기를 찾습니다. GitHub 클론이 가져올 "기본"브랜치를 변경하려면 마스터 브랜치의 이름을 바꿔야합니다.


포크 분기 리포지토리를 복제하면 (PC에 효과적으로 다운로드) 분기가 PC에 있습니까? 그러나 한 지점에서 추가 파일이 추가되었습니다. 내 PC에 해당 파일이 있습니까?
조나단.

1
@Jonathan : PC에 모든 파일이 포함 된 모든 분기가 제공됩니다. 그러나 작업 디렉토리 ( 지점 중 하나 를 체크 아웃하는 공간 )는 실제로 해당 파일을 볼 수있는 유일한 공간입니다.
VonC

다른 파일은 실제로 .git 폴더에 저장됩니까?
조나단.

@Jonathan : 느슨하거나 압축 된 객체는 book.git-scm.com/7_how_git_stores_objects.html (오브젝트는 "파일"), 트리, 커밋 또는 태그 ( book.git-scm.com/)를 참조하십시오. 1_the_git_object_model.html )
VonC

4

프로젝트를 포크하면 전체 프로젝트를 git hub 계정으로 복사합니다. 당신은 당신의 PC에 아무것도 대처하고 있지 않습니다

PC에 사본을 만들려면 복제하고 모든 것을 가져와야하며 해당 프로젝트의 모든 분기 및 코드를 얻습니다.


2

Github 웹 사이트에서 프로젝트 포크를 생성하면 업스트림 프로젝트에서 모든 브랜치를 가져옵니다.

새로 발행 된 포크에서 로컬 PC로 복제하는 경우 PC의 origin리모콘이 Github에서 포크의 마스터 분기를 가리키게됩니다.


Help.GitHub 페이지에 따르면 프로젝트를 포크 하여upstream 분기 ( 분기를 것이 당신이해야 할 일입니다. 그렇게하는 방법을 알려줍니다.
JC 살로몬

2
그것은 지점이 아닌 원격입니다.
Arrowmaster

1

이것은 매우 잘 설명 될 수 있습니다. GitHub에 중앙 저장소가 있습니다. 개인 컴퓨터에서 복제본을 가져 와서 일부 변경을 수행 할 때마다 주 저장소의이 로컬 복제본을 포크라고합니다.

지점은 다른 것으로 포크 / 리포에 포함되어 있습니다. 실제로 지점은 다른 개발 단계에서의 작업입니다. 기능 세트를 저장하고, 다른 사용자에게 액세스 권한을 부여하고, 클라이언트에게 사이트를 시연하기 위해 필요한대로 작성됩니다.


1

지점을 사용할 때와 포크를 사용할 때 의 실제 사례를 공유하고 싶습니다.

우리는 상점에 GitLab을 가지고 있으며 때로는 라 라벨 프로젝트에서 패키지를 다루어야합니다. 우리는 일반적으로 지점을 생성하고 실제 Laravel 프로젝트로 작업 할 때 로컬 VM 개발 환경에서 테스트 한 지점으로 변경 사항을 푸시합니다.

우리 프로젝트가 있다고 가정 해 봅시다.

https://github.com/yardpenalty/mainproject.git

지점 사용법 :

지점이라고합니다 It_doesnt_matter

지점에 생산 방식을 설정하고 나면 마지막으로이 지점에 푸시 하고 병합 요청생성 한 다음 테스트를 위해 UAT로 이동합니다. 테스트가 QC를 통과하면 변경 사항이 프로덕션에 병합됩니다.

병합 로부터 It_doesnt_matter 지점 이 이제 마스터 프로젝트로 푸시됩니다.

...에서 https://github.com/yardpenalty/mainproject.git

패키지 프로젝트가 있다고 가정 해 봅시다.

https://github.com/yardpenalty/mypackage.git

mainproject는 프로덕션에서이 패키지를 사용하므로 다른 이유 때문에이 패키지로 간단히 변경하여 변경할 수는 없습니다. 웹 개발자가이 패키지를 편집하여 프로덕션 환경을 변경해야한다고 가정 해 봅시다.

간단한 분기는 패키지 등을 게시하지 않고 변경 사항을 볼 수 없기 때문에 작동하지 않습니다.

포크 사용법 : 이제 패키지로 약간의 속임수를 써야하므로 포크를 통해 프로덕션 패키지의 복제본을 만듭니다. composer.json 파일은 현재 사용자 또는 그룹 경로 에있는 포크를 가리 키도록 업데이트 할 수 있습니다.

그래서 우리는 포크를 만들 것입니다 https://github.com/yardpenalty/mypackage.git

전화 해 https://github.com/yardpenalty/yards/mypackage.git

이제 우리는 "repositories"에서이 패키지를 가리 키도록 composer.json 파일을 업데이트 할 수 있습니다 .

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.