/ gitsvnLinuxmacOS

SVN 好難,我還是只會 git 怎麼辦?

好,一小時前老師教我們用 SVN 當版控。一直以來都知道 git 流行以前有個東西叫 subversion,好像還是有一些專案在用 SVN,所以其實也想學學看,但是實作發現很不習慣 Orz,打篇文章記錄一下,畢竟這幾個禮拜都還會用到。

這邊用的是 command line 版的 svn,可以考慮用 brew-install svn 來安裝。
畢竟 TortoiseSVN 什麼的,在 command line 上操作才是工程師的浪漫啊

SVN 操作簡介

首先來一點 git 和 svn 常見指令的比較:

git svn
git add svn add
git commit svn commit
git log svn log
git status svn status
git diff svn diff
git clone svn co

其實除了 clone,常見指令都蠻像的。

遠端做好 svnadmin create repository1 以後,就有遠端的 repository 了。接著以下都是本機操作,不打算回伺服器碰 svn 了。

基本操作是這樣,首先先把專案 clone 回來:

svn co svn+ssh://noob@yourdomain.com/path/foo/repository1

然後新增完檔案,做完修改,最後再 commit:

svn add file.txt
svn commit -m "initial commit"

然後就推到遠端了。

因為 svn 沒有本地/遠端的概念,所以你每次 commit 都會丟到遠端。

git-svn:用你習慣的方式作版控

OK,接下來要介紹的 git-svn 才是救星!如果你已經 git 習慣的話,相信你用這方法會很開心。

如果你打 git svn 報錯,可能需要 brew install git-svn 之類的方式安裝。

首先 clone 回來:

git svn clone svn+ssh://noob@yourdomain.com/path/foo/repository1

然後用你習慣的方式新增、commit 檔案:

git add file.txt
git commit -am "edit file.txt"

由於 git 不會自動推回遠端,所以要用這個方法再推回去:

git svn dcommit

還是報錯?

你很有可能在 clone 之後就沒辦法 dcommit(push)回去,而且一直看到 Unable to determine upstream SVN information from working tree history人品問題,老實說我也不知道為什麼。

但是我試過先用 svn co 下來然後 commit 一次之後,git svn 就不會再爆炸了,也許是 git svn 跑空版本庫會出問題?