====== Git 더듬더듬 시작해보기 =====
[[lifemotif:start|LifeMotif: GMail-based Private Diary System]]을 만들면서 버전 관리로 [[http://www.git-scm.com|git]]을 도입해 보게 되었는데, 사용방법과 컨셉 등이 무척 혼란스러워 사용하기 어렵다. 그러므로 이렇게 별도의 페이지를 마련하여 git를 더듬더듬 사용해 보기 시작하자.
간단한 명령어로 일단 LifeMotif의 commit, push 정도만 되도록 내용을 작성하고, 추후:
* 다른 SCM과 무엇이 다른지, 어떤 점들이 있는지 자세히 알아보도록하고,
* 각각에서 말하는 단어의 개념을 잡을 수 있도록 상세하게 조사한다.
* 다른 유용한 슬라이드, 문서, 도서 등을 참조한다.
* 몇몇 경험담 등을 적어서 차후 발생할 수 있는 일에 대해 기록을 하도록 하자.
===== 사례: 구글 코드에서 LifeMotif-Desktop의 코드 유지하기 =====
cs.ChwNam@gmail.com의 계정으로 http://code.google.com/p/lifemotif-desktop/ 에 저장소를 하나 마련하였다. 프로젝트가 4096MB를 제공하므로, 코드 보관을 위해서는 넉넉한 용량으로 생각한다.
원격 저장소가 잘 마련되었으므로, 이 저장소를 잘 활용할 수 있도록 준비를 하자. 우선 아무나 소스를 헤집어 놓을 수 없도록 소스는 누구나 받을 수 있되, 허가받은 사람만이 이 곳에 소스를 올릴 수가 있다. 내가 이 곳을 만들었으니 당연히 나는 모든 권한을 가지고 있다.
==== 권한 설정 ====
일단 권한은 패스워드를 입력하는 것으로 인증되는데, 이 패스워드는 내 계정의 패스워드가 아니다. https://code.google.com/hosting/settings 에서 별도의 패스워드를 지정한다.
홈 디렉토리에 ''.netrc'' 파일을 생성하고 다음 코드를 입력한다.
machine code.google.com login cs.ChwNam@gmail.com password [패스워드]
이렇게 하면 구글 코드에서 패스워드는 자동으로 입력뇐다.
==== 저장소 시작하기 ====
[[http://rogerdudler.github.io/git-guide/index.ko.html|git - 간편 안내서 - 어렵지 않아요!]] 안 어렵긴 개뿔! 페이지를 보고 더듬더듬 시작하였다.
새로운 저장소를 마련하려면
git init
명령어를 사용하지만, 우리는 원격 서버의 저장소를 사용한다. 그러므로,
git clone user@host:/remote/server/path
를 이용하게 된다. 그러나 구글의 경우는 서버의 주소가 조금 다르다.
git clone https://cs.ChwNam@code.google.com/p/lifemotif-desktop/
위 주소에는 내 이메일이 포함되어 있다. 배부받은 패스워드를 입력하든지 아니면,
git clone https://code.google.com/p/lifemotif-desktop/
위 명령어를 사용하되, 홈 디렉토리에 .netrc 파일을 만들어 (~/.netrc)
machine code.google.com login cs.ChwNam@gmail.com password [generated googlecode.com password]
이 줄을 추가한다. 이렇게 로컬 저장소를 시작한다.
==== 파일/디렉토리 추가하기 ====
몇몇 소스 파일들을 추가하게 되었다.
git add [files...]
이 때 빈 디렉토리는 추가되지 않는다. 이것은 git이 [[https://git.wiki.kernel.org/index.php/GitFaq#Can_I_add_empty_directories.3F|FAQ]] 를 참고하면 원래 그러도록 되어 있기 때문이라고. [[http://stackoverflow.com/a/5305908|README]]와 같은 더미 파일을 추가함으로써 디렉토리를 추가하는 방법도 있다. FAQ는 ''.gitignore''라는 파일을 만들어서 추가하는 방법도 있다고 하지만, 정말 텅 빈 디렉토리를 무작정 들이미는 것 보다는 README 파일을 넣어 왜 이런 빈 디렉토리를 추가했는지에 대해 인지시켜 주는 후자의 방법이 좋다고 생각한다.
그리고 이 변경점을 커밋하려면
git commit -m "이번 커밋에 대한 메모"
==== 발행 (push) 하기 ====
구글 코드에 코드를 보관하려면,
git push origin master
===== 원격 저장소에서 새로운 프로젝트 만들기 =====
MiniServer는 git의 remote repository 역할도 한다. 새로운 프로젝트를 만든다고 한다. 모든 소스의 저장소 루트가 ''/opt/git''이라고 하면 (이 디렉토리 아래 여러 원격 리포지토리가 존재한다.)
cd /opt/git
mkdir myproject.git # git 디렉토리는 관례상 .git로 끝난다.
cd myproject.git
git init --bare
이걸로 끝. 원격 유저는 ''/opt/git/myproject.git''쪽에 적절한 권한만 있으면 된다.
===== 서브모듈 추가 =====
git submodule add [name]
e.g. git submodule add git://github.com/chneukirchen/rack.git rack
===== 다른 개인키로 푸쉬하기 =====
GIT_SSH_COMMAND='ssh -i ~/.ssh/<개인키> -F /dev/null' git push
===== 참고 =====
* [[http://www.slideshare.net/einsub/svn-git-17386752|svn 능력자를 위한 git 개념 가이드]]
* [[http://qt-project.org/doc/qtcreator-2.8/creator-version-control.html|QT Cretor Version Control]]
* [[http://code.google.com/p/support/wiki/GitFAQ|Git FAQ]]
* [[http://git-scm.com/book/ko/v1/Git-%EC%84%9C%EB%B2%84-%EC%84%9C%EB%B2%84%EC%97%90-Git-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0| Git 서버 - 서버에 Git 설치하기]]
* [[http://git-scm.com/book/ko/v1/Git-%EB%8F%84%EA%B5%AC-%EC%84%9C%EB%B8%8C%EB%AA%A8%EB%93%88|Git 도구 - 서브모듈]]