2009-09-05 5 views
32

Github에서 호스팅되는 상당히 작은 오픈 소스 프로젝트에 기여하고 있습니다. 다른 사람들이 제 작품을 활용할 수 있도록 저는 Github에 자신 만의 포크를 만들었습니다. 기스 투 (Github)의 용어 선택에도 불구하고, 나는 주요 프로젝트와 완전히 다른 것을 원하지 않는다. 그러나 필자는 모든 작업이 기본 저장소에 허용 될 것으로 기대하거나 원하지 않습니다. 그러나이 중 일부는 이미 주 저장소에 병합되었으며 계속 진행될 것으로 예상됩니다. 내가 겪고있는 문제는 두 나무를 쉽게 공유 할 수있는 상태에 두 나무를 유지하는 것이 가장 좋습니다. 나는이 있거나 발생합니다오픈 소스 프로젝트의 git 저장소에 대한 모범 사례

상황은 다음과 같습니다

  • 나중에 메인 저장소에 을 받아 들여 코드를 커밋합니다. 앞으로이 저장소에서 을 가져 오면 내 커밋은 내 저장소에 복제됩니다.
  • 나는 주 저장소에 절대 받아 들여지지 않는 코드를 커밋한다. 앞으로이 저장소에서 끌어 올 때, 두 나무가 갈라져서 고치기가 어렵습니다.
  • 다른 사람이 함께 와서 자신의 작업을 내 저장소에 둔다. 따라서 가능한 경우 git rebase를 사용하여 예를 들어 밀어 넣은 커밋을 변경하지 않아야합니다.
  • 코드를 마스터 리포지토리에 제출하고 싶습니다. 이상적으로는 필자의 변경 사항을 마스터 저장소에 직접적이고 깔끔하게 적용 할 수있는 패치 (이상적으로 git 형식 - 패치 사용)로 쉽게 변환 할 수 있어야합니다.

지금까지 두 가지, 또는 특히 잘 작동 어느 것도이 문제를 처리 할 가능성이 세 가지 방법, 거기에 내가 말할 수 :

  • 자주 머리의 기반으로 내 변경 사항을 유지하기 위해 리베이스 자식을 실행을 업스트림 저장소. 이 방법으로 중복 커밋을 제거 할 수 있지만 종종 내 작업을 파생시켜야하는 사람들에게 문제를 일으키는 역사를 다시 작성해야합니다.
  • 업스트림 저장소 변경 사항을 자주 병합합니다. 이 내 최종 확인을 작동하지만 업스트림 저장소에 내 코드를 쉽게 제출할 수 있도록 보이지 않습니다.
  • 이들을 조합하여 git cherry-pick을 사용하여 순서대로 정렬하십시오.

이 상황에서 다른 사람들이 뭘 했습니까? 필자의 상황은 다양한 커널 제공자와 Linus의 주요 저장소 사이의 관계와 유사하므로 잘 처리 할 수있는 좋은 방법이 있습니다. 나는 상당히 새로운 자식이지만, 모든 뉘앙스를 마스터하지 않았습니다. 마지막으로, 특히 기스 투 (Github) 덕분에 제 용어가 완전히 일관 적이거나 정확하지 않을 수 있습니다. 저를 시정 해주십시오.

+0

리베이스 된 변경 사항을 사용자가 (강제로) 푸시더라도 다른 사람도 쉽게 리베이스를 사용하여 업데이트하여 업데이트 할 수 있습니다. 역사가 계속해서 다시 쓰여지는 또 하나의 워크샵 일뿐입니다. 그 위에는 모든 것을 쓸어 낼 수있는 강제 밀기 때문에 더 조심해야합니다. – rubenvb

답변

17

내가 비슷한 상황에서 배운 몇 가지 팁 :

  • 는 원 개발자의 작업에 대한 원격 추적 지점을 가지고.
  • 추적 분기에서 마스터 분기로 변경 사항을 자주 가져옵니다.
  • 작업중인 각 주제에 대해 새 분기를 만듭니다. 이 지점은 일반적으로 지역 전용이어야합니다. 업스트림에서 마스터로 변경 사항을 가져 오면 이러한 변경 사항을 반영하여 주제 분기를 리베이스하십시오.
  • 주제 작업이 끝나면 마스터에 병합하십시오.이렇게하면 재 작업이 현지 지사 지점에서 발생했기 때문에 사용자의 작업을 파생시키는 사람들은 재 작성된 작업 기록을 너무 많이 볼 수 없습니다.
  • 변경 사항 제출 : 마스터 분기는 기본적으로 일련의 커밋이되며 일부는 업스트림과 동일하며 나머지는 커밋입니다. 원하는 경우 후자를 패치로 보낼 수 있습니다.

물론 지점 이름과 리모컨은 사용자가 직접 선택할 수 있습니다. 나는 이것들이 시나리오에 철저하다는 것을 확신하지 못하지만, 그들은 나의 장애물의 대부분을 덮는다.

+0

이 질문을 한 이래로 나는 Git에 대한 더 많은 경험을 얻었으며이 문제에 대해 거의 정착했습니다. 최고의 답으로 로컬 커밋이있을 때만 변경 사항을 유지하는 것이 핵심입니다. 확실히 좋은 팁. 감사. – orangejulius

+0

둘 이상의 컴퓨터에서 토픽 브랜치를 사용해 본 적이 있습니까? 그렇다면 무엇을 했습니까? –

+1

아니요, 전 컴퓨터에서 토픽 브랜치를 다루지는 않았지만 어려운 "컴퓨터 간"부분은 아닙니다. 그것이 바로 "사람들을 통해"입니다. 토픽 브랜치를 서버로 쉽게 푸시 할 수 있으므로 작업 할 수 있습니다. – sykora

관련 문제