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 跑空版本庫會出問題?