2010年5月31日 星期一

git 與 git-svn 簡單教學

git 是個很棒的版本控制工具,不需要建置 Server 就可以達到版本控制的目的,其他的好處就不多說。
雖然它是發展出來控制程式碼的版本,但是對於一般文件的也是可以達到版本控制的目的,另外一種說法就是可以幫你備份。簡單來說,如果你正在寫論文,請好好學習一下 git 的用法,它對你備份論文與實驗是很有幫助的。

下面說明如何透過 git-svn 與 svn server 溝通並取得 source code

安裝 git-core git-svn
# sudo apt-get install git-core  git-svn
取得 svn source code
# git svn clone http://url/svn/trunk/ test
完全可以離線作業的 log
# git log
想 用 svn format來看,沒問題
# git svn log
# git svn log -v
想知道source code從那邊下來的
# git svn  info 

開個自己工作用的 local branch,並追蹤 remotes/origin/git-svn 的變化
# git checkout -b test-trunk --track git-svn
確 認工作的 branch
# git branch -a
    master
  * test-trunk
    remotes/git-svn
切換到遠端的 branch (其實都在本機端)
# git checkout  git-svn
切換到 local branch
# git checkout  test-trunk
Previous HEAD position was cf9b8a4... create test.c form svn.
Switched to branch 'test-trunk'
Your branch is behind 'git-svn' by 1 commit, and can be fast-forwarded.
取得遠端更新 (svn update),順便 merge code 進 local branch
# git pull 
From .
 * remote branch     git-svn    -> FETCH_HEAD
Updating 99c1a6f..cf9b8a4
Fast-forward
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.c
也可先取得遠端更新,但是不merge code 到自己的 local branch,不過實際狀況其實是更新到你的電腦中的 remotes/git-svn branch
# git svn fetch
Note: checking out 'git-svn'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at cf9b8a4... create test.c form svn.

與上面的有同樣功能,但是差別在於,會直接將你現在的工作的 branch 直接 merge 成 svn 上面的 code。
# git svn rebase
如果你對於 merge code 有恐懼,建議流程如下,
# git svn fetch
# git checkout git-svn 
看看 code 的狀況,或只需要merge哪部份
# git checkout work-trunk
如果在開branch 有加上 --track 的選項,就可以直接下 pull
# git pull
如果沒有,請下
# git pull origin git-svn 
已經取得 svn server 上的 source code,要如何 commit code 到 svn?
請確認你已經將修改的檔案 commit 到 local branch,然後再透過下面指令
# git svn dcommit 
如果已經在 local branch commit 了五次 code , git svn dcommit 會一次送出所有 commit。

整理的流程如下
git svn clone URL LOCAL #  取得程式碼
git checkout -b BRANCH #  開個自己用的branch
#  修改你的程式碼或文件
git add MODIFY-FILE #  將修改的程式碼加入要 commit 的範圍
git status #  確認你要 commit 的東西是否正確
git commit  #  送出 commit
git log #  看一下 log 是否程式碼已經成功 commit
git svn rebase #  將同步遠端伺服器程式碼
#  如果有衝突的話,請修正
git svn dcommit #  將程式碼送出到 svn server
git svn log  # 確認一下 svn server 程式碼是否正確。
 

參考連結:

沒有留言: