1. 程式人生 > >git -svn 在ubuntu下的安裝與應用

git -svn 在ubuntu下的安裝與應用

Git是一款分散式版本管理工具,由linux的締造者Linus Torvalds設計並實現,具體關於Git的介紹和使用方法可參見其官方站。
這裡要說的是Git是如何做到既可以管理好原生代碼又可以與已有的SVN中心庫進行同步的。

1、安裝
git-svn預設包含在Git的安裝包中,不過在Ubuntu中,git-svn是作為一個獨立的Package需要額外安裝的
sudo apt-get install git-svn
環境變數配置:
將/usr/lib/git-core配置到你的PATH環境變數中

2、檢出
git-svn clone命令完成這個操作
git-svn clone http://192.168.18.80/Mar/trunk

檢出分步操作:功能與上面步驟相同
建立本地目錄, 比如假定是myproj
$mkdir myproj
$cd myproj

初始化並獲取某個版本
$git svn init  http://192.168.18.80/Mar/trunk
$git svn fetch -r xxxxx       
獲取某個版本,假如不指定版本,它就會根據svn記錄一級一級獲取

3、更新
git-svn rebase 注意這裡用的是rebase,而不是update。

4、檢視日誌
git-svn log
加上-v選項,還可以提供每次commit操作涉及的相關檔案的詳細資訊。

5、提交
將原生代碼同步到Svn伺服器。如果要同步到git伺服器,用git命令
git-svn dcommit
這個命令會將你在本地使用git commit提交到原生代碼庫的所有更改逐一提交到svn庫中。
加上-n選項,則該命令不會真正執行commit到svn的操作,而是會顯示會有哪些本地變動將被commit到svn伺服器。

git-svn dcommit似乎不能單獨提交某個本地版本的修改,而是一次批量提交所有與svn中心版本庫的差異。

6、解決衝突
例如衝突檔案為foo.c
使用git-svn rebase獲取svn伺服器上的最新檔案,導致衝突,
不過此時svn版本資訊已經新增到本地git庫中(通過git log可以檢視)
開啟foo.c,修改程式碼,解決衝突;
執行git rebase --continue,git提示我:
    You must edit all merge conflicts and then
    mark them as resolved using git add
執行git add foo.c,告知git已完成衝突解決;
再次執行git rebase --continue,提示"Applying: git v1",此時"git v1"版本又一次成功加入本地版本庫,你可通過git log檢視;
執行git-svn dcommit將foo.c的改動同步到svn中心庫,到此算是完成一次衝突解決。

git比較智慧,會提示你解決問題的方法,所以遇到問題時注意看提示文件。

7、設定忽略檔案

要忽略某些檔案, 需要首先執行如下命令:

git config --global core.excludesfile ~/.gitignore

然後編輯 vi ~/.gitignore.

例如: 需要忽略vim的臨時檔案,就寫:

.*.swp

參考文件

http://techbase.kde.org/Development/Tutorials/Git/git-svn
http://flavio.castelli.name/howto_use_git_with_svn