git svn 讓git和svn協同工作

2022-07-29 05:27:11 字數 1688 閱讀 9328

svn作為乙個優秀原始碼版本的管理工具,可以適合絕大多數專案。但是因為它的採用中心化管理,不可避免的存在本地**的備份和版本管理問題。也就是說對於尚未或暫無法提交到subversion伺服器的本地**來說,存在著被誤刪除和版本更新無法回退兩大情形。

git作為乙個分布式版本管理工具,可以很好的解決這個問題。因為它的大多數操作是在本地進行的。這裡要說的是git是如何做到既可以管理好本地**又可以與已有的svn中心庫進行同步的。

支援去中心化,是git與生俱來的特性,它在本地保留了從中心伺服器clone出來的原始碼庫的全部資訊,這樣,你在本地修改完**後便可以直接提交到本地 的**版本庫中。本地**的備份和版本管理的問題就這樣被git輕而一舉的就解決了。而本地原始碼庫與svn中心原始碼庫的同步操作則是由git提供的 git-svn工具來完成的。

下面是乙個git-svn的一般使用流程:

1、git-svn clone svn_repository

2、修改本地**,使用git add/commit將修改提交到本地git庫

3、定期使用git-svn rebase獲取中心svn repository的更新

4、使用git-svn dcommit命令將本地git庫的修改同步到中心svn庫

可以通過git-svn clone命令完成這個操作: git-svn clone svn_repository_url

一般情況下git svn clone這個操作會從第乙個版本開始同步,如果版本號已經到了好幾萬(或更高?),這個操作會相當的費時。這時可以使用引數-r$revnumber:head檢出指定版本後的**。

因此,更好的步驟應該是這樣:

svn info svn_repository_url, 記錄最後的版本號,假設是260

假設要檢出最後5個版本,做個簡單的減法: 260 – 5 = 255

開始clone操作了:git-svn clone -r255:head svn_repository_url

這個操作可以通過」git-svn rebase」完成。注意這裡用的是rebase,而不是update。update命令對於通過git-svn檢出的svn repostory的git版本庫是不可用的。

使用」git-svn log」,加上-v選項,還可以提供每次commit操作涉及的相關檔案的詳細資訊。

完成這一操作需要通過」git-svn dcommit」命令。這個命令會將你在本地使用git commit提交到本地**庫的所有更改逐一提交到svn庫中。加上-n選項,則該命令不會真正執行commit到svn的操作,而是會顯示會有哪些本地 變動將被commit到svn伺服器。git-svn dcommit似乎不能單獨提交某個本地版本的修改,而是一次批量提交所有與svn中心版本庫的差異。

如果你正在提交的檔案在svn伺服器上已經被別人改過,就會發生提交衝突。通常解決方法如下:

首先使用git-svn rebase獲取svn伺服器上的最新衝突檔案,比如:conflict.c,這將導致與本地conflict.c衝突,不過此時svn版本資訊已經新增到本地git庫中(通過git log可以檢視),git-svn rebase提示你在解決conflict.c的衝突後,執行git rebase –continue完成rebase操作

開啟conflict.c,修改**,解決衝突

執行git add conflict.c,告知git已完成衝突解決

執行git-svn dcommit將conflict.c的改動同步到svn中心庫,到此算是完成一次衝突解決。

Git svn 用git管理svn倉庫

使用git svn clone svn url 命令即可完成從svn倉庫匯入本地,由於該命令會將svn倉庫中所有版本的更新都會同步到本地倉庫,如果專案更新次數過多會花費很長的時間,所以我們可以通過指定版本號以避免不必要的更新 如 git svn clone r5791 head svn url ne...

git svn 從SVN到git 的轉換

svn server ubuntu 10.10 svn,version 1.6.12 r955767 git server ubuntu 12.04.4 lts git version 1.8.5.2 local env ubuntu 12.04.5 lts git version 1.8.5.2 ...

SVN和Git的使用

架構圖 本地工作目錄 work directory 開發者進行開發的地方 版本倉庫 respository 儲存各個版本和維護更新 動態維護分支 功能分支再向主分支合併 checkout 第一次導下來,受到版本控制,svn import export 不受版本控制 delete revert upd...