http://stackoverflow.com/questions/5256021/send-a-pull-request-on-github-for-only-latest-commit

http://kurogo.org/guide/github.html


git checkout -b upstream upstream/master


git cherry-pick sha1


git push origin upstream



원본 repository를 브랜치로 따고..
cherry-pick으로원하는 커밋만 merge 후
그걸 push해서 pull request로 보내는 개념인듯하다..

---- 위 내용대로 해보니 잘 안되는 부분도 있고... 설명이 부족한듯 해서...
step by step으로 직접 해보면서 정리.. ----

실제 후배의 repository를 fork하여 이를 가지고 테스트..

* 원본 repository : https://github.com/skywingzz/skywingDev.git (후배의 원본 repository)
* forked repository : https://github.com/need4spd/skywingDev.git (내쪽으로 fork해온 repository)

## 로컬에 Setting ##
1. 로컬에 git directory 생성
 - mkdir test_git_repo
 - cd test_git_repo
 - git init

2. set upstream / origin remote
: origin은 내가 fork해온 repository, upstream은 원본 repository
 - git remote add upstream https://github.com/skywingzz/skywingDev.git
 - git remote add origin https://github.com/need4spd/skywingDev.git

3. fork해온 repository의 내용을 복사
: fork해온 repository의 내용이 로컬로 들어온다.
 - git pull origin master

4. upstream remote에 대한 셋팅
: 원본 repository의 최신 수정된 내용이 upstream/master branch로 들어온다.
: 이후 원본 repository의 최신 commit 내용을 로컬로 반영 할 때도 git fetch upstream만 실행해주면 그 내용이 upstream/master 브랜치로 들어온다.
: 이걸 master로 merge 해주면, master branch (혹은 내가 작업하고 있는 branch)에도 내용을 반영 할 수 있다. 이를 활용 한 것이 http://devyongsik.tistory.com/534
 - git fetch upstream


## 수정 및 commit ##
1. 작업을 할 branch를 생성
 - git checkout -b work1 master

2. work1 branch에서 내용을 수정하고 commit을 한다. 여기서는 테스트를 위해서 3번의 commit을 커멘트 11,12,13으로 진행
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ vi kk.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git add .
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git commit -m "11"
[work1 9d53b24] 11
 0 files changed
 create mode 100644 kk.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ vi ss.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git add .
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git commit -m "12"
[work1 fcdc08b] 12
 0 files changed
 create mode 100644 ss.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ vi tt.text
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git add .
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git commit -m "13"
[work1 2ce02b2] 13
 0 files changed
 create mode 100644 tt.text

- 여기서 13 커멘트를 가진 2ce02b2 commit만 pull request하고 싶은 상태

3. 해당 commit의 commit name을 확인
 - git log
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git log -4
  commit 2ce02b27285a623d6cbdd0764e279caac137e10f
  Author: need4spd <need4spd@naver.com>
  Date:   Tue Dec 4 13:59:15 2012 +0900

    13

4. upstream/master를 최신으로 만든다.
 - git fetch upstream

5. 원본 repository의 최신 내용이 반영되어있는 upstream/master branch로부터 upstream2라는 이름의 branch를 생성
 - git checkout -b upstream2 upstream/master

6. upstream2 branch에 있는지 확인
 - git branch
[need4spd@need4spdui-MacBook-Air test_git_repo ]$ git branch
  master
* upstream2
  work1

7. 원하는 commit만 merge
 - git cherry-pick 2ce02b27285a623d6cbdd0764e279caac137e10f
  [upstream2 b73c988] 13
   0 files changed
   create mode 100644 tt.text

8. upstream2 branch의 커밋내용을 origin (fork한 repository)로 push
 - git push origin upstream2

9. github에 접속하여 fork한 repository로 이동하여, upstream2 branch를 선택


10. push한 13번 커멘트의 commit을 pull request




좀 더 간단하게 정리하면..


1. 작업할 branch 생성

2. 작업 후 commit , pull request 할 commit을 선택

 - 여기서 commit을 합치거나, 없앨수도 있겠다.

3. upstream/master를 up to date 상태로 만들고, 이것을 base로 branch를 추가한다. (이게 위 예에서 upstream2)

4. 3번에서 만든 branch에 cherry-pick 명령어로 commit을 선택하여 merge

5. origin (fork해온 repository) 에 push 후 pull request 가 되는듯..


이것 말고도.. 여러가지 방법들이 있는 것 같다. rebase를 사용한다거나...

아 어렵네..~ ㅎㅎ







저작자 표시 비영리 변경 금지
신고
Posted by 용식

테스트하기..

항상 별도의 스크립트 태그를 사용했는데

gist를 사용하면 굉장히 쉽고 편리하게 소스코드를 블로그에 붙일 수 있네요.


참고 : http://koesnoom.tistory.com/86


gist라니.. 다른곳에도 유용하게 사용될 수 있는 기능인 것 같습니다.


왠지 gist에서 소스 수정하면 그 수정된 소스가 자동으로

여기에도 반영될듯...

저작자 표시 비영리 변경 금지
신고
Posted by 용식
TAG GIST, git, github

crescent에서 luceneKoreanAnalyzer.jar를 사용하는데

별도의 프로젝트로 나누어져있다. 처음에 이것을 그냥 이대로둘지.. maven을 사용해서 모듈로 합칠지..

고민을 하다가... 별도 프로젝트로 두면서 crescent에 의존성 설정을 해주면 crescent 빌드 할 때마다 자동으로

luceneKoreanAnalyzer를 다운받아 사용 할 수 있겠다 싶은 생각이 들었다.


그렇다면 이제 필요한것이 maven repository인데..


혹시 github이라면.. 뭔가 되지 않을까 싶어서 찾아봤더니 아래와 같은 글이 있었다.


http://cemerick.com/2010/08/24/hosting-maven-repos-on-github/


오옷..!


그래서 한번 따라해보았다. crescent와 luceneKoreanAnalyzer는 이미 maven 프로젝트로 만들어져있다고 가정한다.


1. github 사이트에 maven-repository로 사용 할 새로운 repository를 생성한다.


2. local pc에서 위 repository를 clone 할 디렉토리를 하나 생성한다.

[need4spd $] mkdir need4spd-maven-repo)


3. git repository로 만든다

[need4spd need4spd-maven-repo $] git init


4. origin으로 remote repository를 alias 걸어주고 pull 실행

[need4spd need4spd-maven-repo $] git remote add origin https://github.com/need4spd/need4spd-maven-repo.git


[need4spd need4spd-maven-repo $] git pull origin master


5. need4spd-maven-repo의 하위 디렉토리로 snapshots, releases 디렉토리를 생성한다.

[need4spd need4spd-maven-repo $] mkdir snapshots releases


6. luceneKoreanAnalyzer의 pom.xml에 아래의 설정을 추가한다. deploy 페이즈를 실행하기 위해서는 필요하다.

<distributionManagement>

    <repository>

        <id>repo</id>

        <url>https://github.com/need4spd/need4spd-maven-repo/raw/master/releases</url>

    </repository>

    <snapshotRepository>

        <id>snapshot-repo</id>

        <url>https://github.com/need4spd/need4spd-maven-repo/raw/master/snapshots</url>

    </snapshotRepository>

</distributionManagement>


7. luceneKoreanAnalyzer에서 deploy 페이즈를 실행한다. 단, 위 설정 그대로 실행하면 github으로 바로 deploy를 시도하는데.. 당연히 그건 안된다.. 그래서 일단 로컬에 만들었던 need4spd-maven-repo 디렉토리로 deploy가 되도록 실행한다.

[need4spd luceneKoreanAnalyzer $] mvn -DaltDeploymentRepository=snapshot-repo::default::file:../need4spd-maven-repo/snapshots clean deploy


8. 성공했다면, local need4spd-maven-repo에 deploy가 되었을 것이다. 그렇다면 이제 이것을 remote repository로 push하자.

[need4spd need4spd-maven-repo $] git push origin master


9. 이제 crescent에서 받을 수 있는 준비가 되었다. crescent의 pom.xml에 다음을 추가하자.

<repository>

   <id>need4spd-snapshot</id>

   <url>https://github.com/need4spd/need4spd-maven-repo/raw/master/snapshots</url>

</repository>

<repository>

   <id>need4spd-releases</id>

   <url>https://github.com/need4spd/need4spd-maven-repo/raw/master/releases</url>

</repository>

...

<dependency>

   <groupId>com.tistory.devyongsik</groupId>

   <artifactId>luceneKoreanAnalyzer</artifactId>

   <version>1.0-SNAPSHOT</version>

 </dependency>


10. crescent에서 빌드 실행

[need4spd crescnet $] mvn clean package



일단 local에 deploy후에 별도로 push를 해줘야하긴 하지만 개인 용도로 사용하기엔 큰 무리가 없어보인다..

근데 왠지 github에 아이디 패스워드 설정해서 바로 deploy 할 수 있는 플러그인이 있을 것 같다. --ㅋ


이거같다..

https://github.com/JakeWharton/github-deploy-maven-plugin

저작자 표시 비영리 변경 금지
신고
Posted by 용식

http://chriscase.cc/2011/02/syncing-a-forked-git-repository-with-a-master-repositorys-changes/


https://help.github.com/articles/syncing-a-fork

저작자 표시 비영리 변경 금지
신고
Posted by 용식
TAG git, github
이래저래 공부도 해볼 겸
aboutLucene의 예제 소스를

https://github.com/need4spd/aboutLucene

으로 repository를 변경하였습니다.

저작자 표시 비영리 변경 금지
신고
Posted by 용식