<-> 准備工作:
先了解一下什么是git庫了,和svn有很大用法的不同, svn是下載副本,更新副本,該本地更改提交到中心服務器的方式,git是各自先clone別人(或者中心服務器的)整個git庫(或者svn的庫,如本文說講的東西就是),clone完了之后你就和他有相同的整個git庫了,克隆之意真是太准確了,之后自己再更改代碼就只是提交到自己的本地庫里面去了,如果必要再push到git中心服務器上(或者本文提到的svn的庫里面)
git的本地庫只能在linux下建立的,在公司里面一般是在大家共享的服務器上面(如果服務器上沒有或叫管理員裝上git)
另外還有裝上git-svn這個軟件包,他是給遠程svn的倉庫,生產本地git庫,把本地庫上的更改提交到svn上的工具
如果你自己在家里或公司,有linux的桌面機子那一切都是你自己的工作了
如果系統是Linux Ubuntu,按照命令是:
sudo apt-get install git git-core
sudo apt-get install git-svn
<二>
針對A 情形:
就是使用者在svn服務器只有一個工作分支叫trunk或者其他什么名字名字, 這也是幾個人同時工作在一個小的項目,
提交代碼到svn服務器的情況了。
1. $mkdir TestGit
$cd TestGit
$git svn clone svn://your_ip_address:10000/TestGit/abc
在當前目錄下就有Trunk目錄,這個目錄下會有個.git目錄表示他是git的倉庫實體目錄,外面的可見目錄都是這個git倉庫被checkout出來的當前分支。
2. $git branch -a
* master ------ 對應本地git master
remotes/git-svn ----- 對應到遠程的svn的svn://your_ip_address:10000/TestGit/abc
(*表示這個是當前分支)
3. $git svn rebase 把svn上的其他人的更新拉進來
針對B情形:
就是svn服務器上有很多分鍾情況,現在稍微大一點的項目和不止一種產品也都有這個情況了,比如量產的產品都有分支出去,保持穩定
如果svn服務器使用的是標准的目錄結構,例如 trunk,tags,branches
git svn clone -s svn://localhost:10000/TestGit
如果不是那么不是標准的目錄結構,你就得自己指明主干分支和標簽的位置了
git-svn clone https://omap3emu.googlecode.com/svn -T your_trunk -b your_branches -t your_tags
其中your_trunk yours_branches your_tags 分別是你的自己定義的主干,分支和標簽目錄。
1. $git svn clone -s svn://localhost:10000/TestGit
$cd TestGit
$git branch -a
* master
remotes/AAA
remotes/BBB
remotes/tags/tag20120713
remotes/trunk
你可以看到在本地庫里面包括了很多和svn服務器上的分支和標簽對應的本地branch, 其中master還是和上面意思一樣本地的工作分支。
2. 切換分支
git checkout -b local/forBBB BBB 新建本地分支forBBB 並讓它和遠程分支BBB對應
自然master分支是和遠程的trunk對應
<三>常用命令
這是目前我自己在使用過程中遇到的需要命令:
1. git svn info 查詢當前分支和svn的那個目錄分支節點關聯,這和原來在svn副本里面 svn info 里面相同
2. git svn branch -a 查詢當前目錄下的git庫有多少分支,理論上它是純git的命令,但是本地庫是由git svn clone 生成,所以我們有必要在clone后看看是否和遠程的倉庫的分支標簽都對應上了!
3. git svn rebase 把svn上的其他人的更新拉進來, 和原來的svn update相同(rebase這個用詞用在這里有點怪異,至少和git rebase的意思有很大的出入)
4. git svn dcommit 把當前分支的改動提交到svn的服務器上,事先先在這個命令的后面加個參數-n(--dry-run)看看是否能順利提交。
5. git svn dcommit -n 也經常用來核對當前處於對應哪給遠程svn分支。
<四> 補充:下面是在你的具體需要時候使用的,如果不知道無所謂的
1. -r250:HEAD : 在上面clone 倉庫的時候加上這個參數會讓你從svn的250版本開始記錄版本更改信息(默認是全部的更改版本-r1:HEAD)
