http://stackoverflow.com/questions/7120199/github-merge-branch-master



remote repository에 push를 할 때 커밋 히스토리에

Merge branch 'master' of http://....  가 생기는 경우에 대한 내용.



요약하면..


A와 B가 동일 commit 히스토리를 유지한 상태에서..


A가 commit - push를 하고


B가 remote repository sync없이 다른 작업을 commit - push하는 경우 reject가 나고..


이때 pull을 받는 과정에서 remote의 commit이 merge가 되는데 이에 대한 commit history임..

Posted by 용식
TAG git


http://gitref.org/inspect/


주요 명령어가 예제와 같이 나와있어서 참고하기가 좋음.



pro-git 번역 사이트

http://git-scm.com/book/ko


github repository를 이용해 많은 언어로 번역 작업이 진행되고 있는 중.. 그 repository를 web으로 연결하여

위와 같이 보여주고 있는듯.

Posted by 용식
TAG git

git push head:/{branch_name}

git push tags:/{branch_name}

Posted by 용식


stash 명령어는 워킹 디렉토리에서 수정한 파일들만 저장이 된다. 수정내용을 잠시 스택에 저장해둔다고 생각하면 간단하다.


git repository에서 이미 커밋되어있던 3개의 파일을 수정하여 작업을 하고있다.


1. vi a.txt

2. vi b.txt

3. vi c.txt


a.txt는 스테이지모드로 변경


4. git add a.txt


git status 확인

$ git status

# On branch master

#

# Initial commit

#

# Changes to be committed:

#   (use "git rm --cached <file>..." to unstage)

#

#       new file:   a.txt

#

# Untracked files:

#   (use "git add <file>..." to include in what will be committed)

#

#       b.txt

#       c.txt


이 상태에서 급한 수정 요청이 들어온다. 하지만, 지금까지 작업했던 내용을 커밋하기는 좀 껄끄럽다.. 아직 완료가 된 상황은 아니라서.. 어딘가에 이 작업한 내용을 잠시 저장해두었다가 급한 수정을 처리하고 다시 작업을 이어 할 수 없을까?


5. git stash

$ git stash


6. git status
$ git status
# On branch master
nothing to commit, working directory clean

이제 들어온 작업을하자. 그리고 작업이 끝나고 다시 아까 작업하던 것을 불러오고 싶다.

7. git stash list
$ git stash list
stash@{0}: WIP on master: 2860425 t
stash@{1}: WIP on master: be232f7 init

stash의 리스트가 조회된다. 위에 있는 것이 가장 최근에 저장한 stash이다. 이걸 다시 적용해보자.

8. git stash apply
$ git stash apply
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   a.txt
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   b.txt
#       modified:   c.txt
#

progit 책에는 apply만 실행하면 staged 상태의 파일이었던 것들은 자동으로 staged상태로 만들어주지 않는다고 되어있는데.. 테스트한 1.8.X 버전에서는 자동으로 만들어주는것 같다. 그리고 단순히 git stash apply를 실행하면 가장 최근의 stash가 적용이 되며, 다른 stash를 적용하고 싶을때는 stash 이름을 입력하면 가능하다.


아무래도 많이 사용하게 될것 같아서... 잠깐 정리를..

Posted by 용식
TAG git, stash

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 용식

http://www.slideshare.net/dhrim/git-12030742?fb_action_ids=435888533133034%2C435599853161902&fb_action_types=slideshare%3Aview&fb_source=other_multiline&action_object_map=%7B%22435888533133034%22%3A398757386545%2C%22435599853161902%22%3A10150683464818815%7D&action_type_map=%7B%22435888533133034%22%3A%22slideshare%3Aview%22%2C%22435599853161902%22%3A%22slideshare%3Aview%22%7D&action_ref_map=%5B%5D&code=AQDoDfq16sW0ZqRMc-jllq2xd7Ibjp-T3x7RI5pDgJMSLDntPhLHuAPxlKlGMOC5-xY8HBX0dhtqURkAGKuoPBoBzj5I0FfGgBubgrqERwlGoW8ul-r7xtH0fQAD5dSgmmcDkab6SPLgw0golWieO4EYrLXeL57HtLVWQGUwthVg5jMymOJSsHi9HgTyCy1QCWCdfT5aM7BnCK4J4M15IOe4#_=_

Posted by 용식
TAG git

테스트하기..

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

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


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


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


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

여기에도 반영될듯...

Posted by 용식
TAG GIST, git, github

http://stackoverflow.com/questions/1856654/git-how-to-add-commit-removals-made-via-vanilla-rm


Without spaces in filenames:

$ git rm `git ls-files -d`

More robust:

$ git ls-files -z -d | xargs -0 git rm

Posted by 용식
TAG git, git rm

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

3년전에 만들어진 macrodef들이 있었음..

https://github.com/newtriks/Ant-Funk/tree/master/tests


소스 관리를 git으로 하다보니

CI까지는 아니더라도 그냥 주기적으로 소스 내려받고

deploy해주는 shell이 하나 필요했는데.. build-deploy이야 ant의 주무기라쳐도

git하고 연결을 어케해야 하나 싶었는데..

위 예제에 거의 다 되어있어서.. 쉽게(는 아니고.. 좀 헤매다가..) 설정함..


일단 당장 필요한 것은 git pull이라서

아래와 같이 설정.. path는 빠져야 되네..



<macrodef name="git">

                <attribute name = "command" />

                <attribute name = "dir" default = "" />

                <element name = "args" optional = "true" />

                <sequential>

                        <echo file="GIT_COMMAND_LOG" message="git @{command} &#xa;"

                                append="yes" />

                        <exec executable = "git" dir = "@{dir}">

                                <arg value = "@{command}" />

                                <args/>

                        </exec>

                </sequential>

        </macrodef>


        <macrodef name = "git-pull">

                <attribute name = "path" />

                <attribute name = "branch" />

                <attribute name = "head" />

                <sequential>

                        <git command = "pull" >

                                <args>

                                        <arg value = "@{branch}" />

                                        <arg value = "@{head}" />

                                </args>

                        </git>

                </sequential>

        </macrodef>


 <target name="gitpull">

                <git-pull branch="origin" head="+master" />

  </target>


git으로 매크로 설정하고.. 매개변수를 받을 수 있도록 한 후 이걸 이용해서 task까지 만들어내는 예제..

ant gitpull 로 실행해보니 잘 내려받는다.


Posted by 용식
TAG Ant, git