git svn 與svn同步
當前分支: git svn rebase
獲取新分支: git svn fetch svn
盡管你可以從網上找到成千上萬篇關於Git和git-svn,?0?2 但是本文主要介紹如何在一個以svn作為版本管理軟件的項目里使用git。(假如你已經有了git-svn工具, 那我們就開始用git吧!)
先介紹些背景知識, Git 是 Linus Torvalds 為Linux內核開發的一套版本控制軟件。他對版本控制有些特殊的要求,但是沒有一個能滿足他的要求。Git 有兩個最大的優點分布式和執行速度快,它的設計不僅有操作簡單的分支(branch)還有功能強大的合並(merge).
聲明:這並非是唯一“正確”的方式來使用git + svn, 只是我這樣用的, 讓我們開始吧。
首先: 假設我們有個subversion倉庫(repository)在 http://example.com/svn/my_proj. 你需要創建一個git倉庫(repo), 從subversion倉庫中下載(pull).
git svn init -s http://example.com/svn/my_proj
這個命令是初始化git倉庫從遠程的svn上下載。 -s 參數表示 svn 倉庫具有標准布局(trunk、branches、tags)。
git svn fetch
這個命令是從subversion取得所有的版本信息,在第一次運行的時候等待的時間比較長。當然你可以通過一些參數來控制只取得某些版本信息,但是我喜歡取得所以的歷史版本信息。
現在你已經有了trunk所有版本信息,但是其他的分支的信息都在svn服務器上,你可以通過下面的命令查看所有的分支信息
git branch -a
顯示了所有的分支信息,也包括遠程的分支信息。
現在在你的本地已經有了完整的subversion歷史信息,對你的倉庫進行打包就顯的非常重要。因為每一個版本就是一個單獨的文件,下面的命令就是把這些信息打包到一個大的"pack"文件里面。這樣你的倉庫就會小很多,但是還是會有些小文件。
git repack -d
下一步就是在倉庫里面做我們的工作,這里不推薦直接使用主干(master)分支來進行操作,因此我們要創建一個單獨的分支new feature.
git checkout -b new_feature
-b 參數創建一個新的分支並切換到這個分支(chackout). 在你有了新的分支后,就可以在這個分支里進行修改或增加文件。如果你增加了文件需要通過下面的命令告訴git,git將自動跟蹤這些新文件。
git add path/to/new_file
現在你可以在你的新分支(new feature)里面工作,並且提交到Git. 你的修改並不會自動提交,如果你想提交上面你增加的文件,你有兩個選擇: 一個是提交所有修改過的文件,另一個是只提交你想提交(部分)的文件。如果你不想比較所有你修改過的文件可以通過下面的命令完成:
git add path/to/edited_file
git add another/edited/file
git commit -m "commit message"
如果你想提交你所有的操作, 並且已經通過git add增加了所有的新文件。可以通過下面的命令實現:
git commit -a -m "commit message"
-a 參數是提交所以的變更.
現在你已經提交到git里面,但是還沒有提交到subversion服務器上。應該把你的內容提交到master分支上。你需要先取得master倉庫,然后與你創建的分支(new feaure)合並
git checkout master
git merge new_feature
這次合並沒有任何沖突(conflicts), 如果有沖突的話,你應該先修正沖突然后在提交。
一旦你提交到master倉庫中,就需要讓master分支與svn 倉庫同步,並且不能有沖突(如果有沖突就必須修正)
git svn rebase
master 分支與subversion 的trunk同步后,就應該把master提交到subversion倉庫。
git svn dcommit
上面簡單的介紹了從初始化到提交的整個過程。在接下來的幾周里,我將研究一下不同的git命令是怎么工作的。下面的是簡單的計划:
git reset
git rebase
git log
git stash
git merge
git mergetool
如果我忘記了一些重要的東西? 請讓我知道你是怎么使用git svn 的。
公司是用svn的,並且沒辦法改變了,但git好處那么多,就兩個一起用。
和公司代碼庫的交換還是用svn, git用於本地和同事之間的代碼提交
先svn checkout 代碼
然后在代碼目錄git init創建代碼倉庫
編寫.gitingore或.git/info/exclude將不需要加入代碼庫的文件加進去
然后git add .
再 git commit -m "blablabla....."
這就ok了。
一般開發會新建一個分支,如:git branch dev
然后git checkout dev轉到這個分支進行開發
在需要提交代碼到svn時,先切到某個分支,然后提交,再切回來,工作就可以又繼續了,哈哈,不錯吧
git在合並代碼等時候好處真是太多了,分支消耗也少,不像svn得branch就是把整個目錄拷貝一次,太慢了。
然后在ubuntu下,我得git是沒有配色的,看起來傻傻得,用下面命名給git加點顏色,呵呵
git config --global color.status auto
git config --global color.branch auto
git config --global color.diff auto
git config --global color.grep auto
git config --global color.interactive auto
git config --global color.ui auto
這些都是默認顏色,不過對我來說基本已經夠用了。
ps. 顯示git提交tree的命令是:
git log --graph --oneline --all
or:
export LESS="-R"
git log --graph --pretty=oneline --abbrev-commit