2012-04-01 5 views
1

저는 자유 시간에 작은 버그 수정을 제공하여 유명한 오픈 소스 프로젝트 (1 천만 라인 정도의 C++)에 기여하기 시작했습니다. 프로젝트는 Git으로 관리되며, 완전히 새로운 것입니다. 나는 그것을 사용하는 최선의 방법에 대한 정보를 찾으려고 노력했지만, 찾을 수있는 모든 정보는 git fetch 또는 git pull 중 어느 것을 사용할지 여부와 같은 퀴즈 이상의 복잡한 종교적 논증입니다. 누구나 다음과 같은 워크 플로우를 용이하게하기 위해 어떤 명령을 실행해야하는지 간단히 말해 줄 수 있습니까?큰 협업 프로젝트에 작은 변화를 기여하기위한 워크 플로우 워크 플로우?

  1. 전체 소스를 체크 아웃하십시오.
  2. 일부 기능 또는 버그 수정 작업 시작
  3. 계속 전체 소스를 체크 아웃하고 지금까지 변경 사항을 병합합니다.
  4. 내 나무와 원격 마스터 저장소 사이의 모든 차이 패치를 생성
  5. (필요한 경우) 내 지난 이후 다시 변경 사항 커밋 롤링
  6. 내 나무와 원격 사이에 다시 차이를 압연 (필요한 경우) 마스터 저장소
+3

답변이 책을 채울 수있는 것처럼 들립니다. 실제로, 그것은 이미 있습니다 : [Pro Git] (http://progit.org) –

+0

오 세상에! 나는 누군가가 내가 일어나서 빨리 달릴 수있는 대답을 줄 수 있기를 바랬다. 너무 복잡하다면 책을 읽으려고 사퇴 해야겠다. –

+2

정말 좋은 책이다. –

답변

1
1$ git clone <repository> <directory> 
2$ <edit as you please>  # suggest 'git checkout -b <new branch>' prior to edit 
3$ git pull origin master 
4$ git push origin master # you probably won't have permission for this, ask repo admins 
5$ git reset --hard 
6$ git checkout -b <new branch> origin/master # not a rollback, just leave your stuff and shift to a new branch. 
+0

감사! 4 번에 관해서는, "패치 생성"을 통해 저장소로 푸시한다는 것을 의미하지는 않습니다. 나는 메일 링리스트 나 버그 질라에 보낼 수있는 패치 파일을 생성해야했다. –

+1

'git diff'시도 (기본적으로 패치 생성) – GoZoner

+0

'근원'에서 최신 정보를 얻은 다음 '관련 정보 원본/마스터'를 확인하여 관련 정보를 생성하려면 'git pull'을 수행해야합니다 diff ' – GoZoner

4
  1. 체크 아웃 전체 소스.

    git clone git://url

  2. 하면 동시에 여러 가지 작업을하는 경우

    를 해결 일부 기능이나 버그 작업을 시작, 각 기능에 대해 별도의 지점을 만들기 위해 것이 좋습니다. 일반적으로 주제 분기라는 입니다.

    git checkout -b <branch name> <desired base commit>

  3. 매일 전체 소스를 체크 아웃 등 멀리 내 변경 내용을 병합 계속합니다.

    토픽 브랜치를 사용하는 경우 간단하게 git pull을 사용합니다. 대신 마스터에서 작업하는 경우 (2 단계를 건너 뛴 경우) 은 git pull --rebase을 사용하는 것이 좋습니다. 이 방법은 당신의 일은 원점에있는 마스터의 최신 팁에 기초하여 될 것입니다.

  4. 내 트리와 리모트 마스터 저장소 사이의 모든 차이 패치를 생성

    당신은 (버그 무료 기능을 작성했습니다 확신 (좋은 행운을!) 변경 사항을 병합 할 수 있습니다 일단 경우 토픽 브랜치를 사용했다) by git merge master, 모든 충돌을 해결하고 커밋. 그런 다음

    git format-patch <base commit for your feature>

  5. (필요한 경우)을 다시

    롤백 커밋 마지막 이후 변경 사항을 롤링하여 패치를 생성 할 수 있습니다, 당신은 git reset <options>를 사용할 수 있습니다. 옵션이 여러 개 있습니다. 차이점은 매우 미묘하기 때문에 man git-reset을 살펴 보시기 바랍니다. 을 완전히 없애고 싶다면 --hard 옵션은 트릭을 사용해야합니다. 반대로 커밋 된 변경 내용을 되돌리려는 경우 을 별도로 커밋하면 git revert <commit>이 당신의 친구입니다.

  6. (필요한 경우) 내 트리와 리모트 마스터 저장소 사이에 다시 차이 롤링

    확실하지 당신이 무슨 뜻인지,하지만 당신은 상류에서 최신 변경 사항으로 지역 REPO 를 업데이트하는 의미 경우, I (3) 그 주소를 믿습니다.