git forks는 사실 복제품입니까?



Answers

나는 사람들이 그들이 git에서 코드를 포크하고 있다고 들었다. Git "fork"는 git "clone"과 미래의 병합을 피할 수있는 (의미없는) 심리적 인 의지와 같이 의심스럽게 들립니다. git에는 fork 명령이 없습니다. 맞습니까?

나는 당신이 "포크"가 무엇을 의미하는지에 대해 재미있는 생각을 가지고 있다고 생각합니다. 개념이 아니며 특정 버전 제어 시스템에서 특별히 지원되는 명령이 아닙니다.

가장 간단한 종류의 분기는 분기와 동의어입니다. VCS에 상관없이 분기를 만들 때마다 "분기"했습니다. 이 포크는 대개 쉽게 병합하기가 쉽습니다.

별도의 파티가 코드의 완전한 복사본을 가져와 멀리 나간다는 이야기의 포크는 반드시 Subversion과 같은 중앙 집중식 시스템에서 VCS 외부에서 발생합니다. Git과 같은 분산 형 VCS는 전체 코드베이스를 포킹하고 새로운 프로젝트를 효과적으로 시작하는 데 더 나은 지원을합니다.

Git (GitHub 아님)은 다음과 같은 두 가지 방법으로 전체 Repo (즉, 복제)를 "포킹"합니다.

  • 복제 할 때 원격이라고하는 origin 가 생성됩니다.
  • 기본적으로 복제본의 모든 분기는 origin 해당 분기를 추적합니다
  • 출발 한 원래 프로젝트의 변경 사항 가져 오기 및 병합이 쉽습니다.

Git은 원래 프로젝트의 누군가에게 당신을 끌어 달라는 요청을하거나, 변경 사항을 직접 푸시 (write)하기 위해 쓰기 권한을 요청하는 것처럼 간단하게 포크 소스를 변경하는 데 기여합니다. 이것은 GitHub이 쉽게 만들고 표준화하는 부분입니다.

Github에 대한 불안은이 방향으로 자식을 연장합니까? 또는 기능을 흡수 자식의 모든 소문?

당신의 가정이 틀리기 때문에 걱정이 없습니다. GitHub는 멋진 GUI와 풀 요청을하는 표준화 된 방법으로 Git의 포크 기능을 "확장"하지만 Git에 기능을 추가 하지는 않습니다. full-repo-forking의 개념은 근본적인 수준에서 분산 버전 제어로 바로 구워집니다. 언제든지 GitHub을 포기할 수 있으며 여전히 "포크"한 프로젝트를 계속 밀거나 당길 수 있습니다.

Question

나는 사람들이 그들이 git에서 코드를 포크하고 있다고 들었다. Git "fork"는 git "clone"과 미래의 병합을 피할 수있는 (의미없는) 심리적 인 의지와 같이 의심스럽게 들립니다. git에는 fork 명령이 없습니다. 맞습니까?

Github는 포크를 조금 더 현실감있게 만듭니다. 즉, 포크 버튼을 누른 다음 나중에 풀 요청 버튼을 누르면 시스템이 소유자에게 이메일을 보내기에 충분히 똑똑합니다. 따라서 리포 소유권 및 사용 권한과 관련하여 약간의 춤을 추고 있습니다.

예 아니오? Github에 대한 불안은이 방향으로 자식을 연장합니까? 또는 기능을 흡수 자식의 모든 소문?




복제가 서버에서 시스템으로 진행되고 포크가 서버 자체에서 사본을 작성한다는 사실 외에도 중요한 차이점은 복제 할 때 실제로 모든 분기, 레이블 등을 얻습니다. 그러나 포크로 작업 할 때 실제로 master 브랜치에있는 현재 파일 만 가져오고 그 외의 것은 없습니다. 이것은 우리가 다른 지점 등을 얻지 못한다는 것을 의미합니다. 따라서 원래의 저장소로 병합해야하는 경우, 이는 상호 repo 병합이므로 반드시 높은 권한이 필요합니다.

포크는 git 명령이 아니며 Github이 구현 한 개념 일뿐입니다. Git은 모든 마스터 사본과 항목을 동기화 할 필요없이 피어 투 피어 환경에서 작동하도록 설계되었습니다. 서버는 또 다른 피어이지만 마스터 사본으로 보입니다.




이 컨텍스트에서 "포크"는 "내 수정 내용을 추가 할 수 있도록 코드의 복사본 만들기"를 의미합니다. 말할 게별로 없습니다. 모든 복제본은 본질적으로 포크이며 포크에서 변경 사항을 가져올 지 여부를 결정하는 것은 원래대로입니다.




포크는 다른 저장소의 사본이지만 계정을 수정 한 것 같습니다. 예를 들어 다른 저장소를 로컬에서 직접 복제하는 경우 원격 객체 출처는 여전히 복제 한 계정을 사용하고 있습니다. 코드를 커밋하고 기여할 수 없습니다. 그것은 단지 코드의 순수한 사본입니다. 그렇지 않으면 리포지토리를 포크하는 경우 github 계정의 계정 설정 업데이트로 리포를 복제합니다. 그리고 계정의 컨텍스트에서 Repo를 복제하면 코드를 커밋 할 수 있습니다.




Links