Thursday, July 23, 2009

Git|大步向前走: [Linux][軟體] Git-svn 使用簡單介紹

大步向前走: [Linux][軟體] Git-svn 使用簡單介紹

[Linux][軟體] Git-svn 使用簡單介紹

這個 git 版本控管軟體出來一段時間了,不過因為作者是 Linus Torvalds,所以一來說,他寫 code 的功力很好,所以軟體品質不錯,二來也是因為他的名氣的關係,所以這個軟體在 Linux 上面的支援很多(??) (Win32 的 git support 很少,不過可以參考一下)

這邊要來介紹的是 git 在 svn 上面的一個過渡應用(git-svn),以及在 git 和 svn 之間的比較:
首先說明,這個應用方式的好處在於:
1. 保留 svn 的優點, svn 有一堆 properties 給我用的很高興,像 keywords 、很簡單就可以設定好的 ignore list 、 executable 、 permission、 ownership -> 所以 repo 用的是 svn 。
2. 比 svk 快。 (svk transaction 式的通訊方式,做到一半掛點會從頭再來過,如果這個 commit 一次是上 Giga 的量,掛點時,我想你會很想哭,因為記憶體也吃很多, performance 還是一樣的爛。 Git 就好多了。)
3. 分散式的 repo ,所以你可以在 local commit 了,測試完成,才 "merge" 到 server 上面。(merge 是用 svk/svn 的用詞)

用法介紹:

在開始動作之前,我們先來搞個小動作,寫一些東西到 $HOME/.gitconfig
[user]
name = Anton Yu
email = xxxx@gmail.com
[color]
diff = auto
status = auto
branch = auto
[alias]
st = status
rb = svn rebase
ci = commit -a
co = checkout

這些東西包括了 alias, 個人的 email 還有 git 的 colordiff 等等設定。

$ mkdir gtalkbot 先找個地方來放 code
再找出 svn url 來,像是
https://gtalkbot.googlecode.com/svn/trunk/ 
執行:
$ git-svn init https://gtalkbot.googlecode.com/svn/trunk/ gtalkbot/
$ git-svn fetch


做完你就會發現你已經有一個 .git 的目錄在這裡了,不過跟 svn 不一樣的是,它並沒有每個子目錄都放 .git ,只有這個 root dir 放了一個 .git 而已,所以你可以很輕鬆的做到 (export) 的動作,而不需要特別的指令。

更新時,請下 git rb (就會自動執行 git svn rebase)
刪除檔案,請下 git-rm $file
新增檔案,請下 git-add $file
commit ,請下 git-svn ci
commit 到 svn 底下,請下 git-svn dcommit

不過 props 在 git 底下連 "svn:executable" 都失效。 所以不建議 svn 的使用者在沒有考慮周祥之前就轉移過來這個 SCM 管理平台。畢竟它的軟體生命才剛開始而已。

No comments: