本系列目前有四篇文章,建議依照以下順序閱讀:
wcfind - avoid find(1) into subversion meta directories
use grep(1) accompany with my wcfind via xargs(1)
Setting svn:keywords in many files simultaneously
再探 wcfind — 用 find2perl 實作
由於 CVS、Subversion 這類的 version control systems,通常會在 working copy 目錄下,建立如 CVS/、.svn/ 的 meta directories,使得一些 command-line 工具會水土不服。例如,grep 會連 .svn/ 目錄下的檔案都去尋找,不僅拖慢速度,更讓結果雜亂,難以使用。因此,很久以前,我參照了 Ben Reser 的作法,弄了一個 wcfind 給自己用。
可是,之前的 wcfind 是使用 Bourne Shell 實作,並依賴於 FreeBSD 下的 find [...]
很久以前就想要好好地重整一下我的 blog 了,剛好趁著搬家重灌系統的機會,好好地整理一番。那時的目標有
真正的版本控制
資料庫瘦身
升級後台編輯用的 FCKeditor
與 Sidebar Widget 相容
IE 下的畫面極為慘烈
其中,「升級後台編輯用的 FCKeditor」已經在《Wordpress 編輯器升級到 FCKeditor 2.5.x》時搞定,theme 的問題暫時先不解決,所以剩下「真正的版本控制」與「資料庫瘦身」兩個目標。
真正的版本控制
以前的作法是,用 Subversion 管理我的 Wordpress 目錄,不過只是簡單的直接 checkout 出 Wordpress 程式。雖然升級或更換版本很方便,svn update 或 svn switch 一下即可,不過自己在 local 端,因應自己的喜好而做的更改,就沒辦法有好的版本控制機制,加以管理了。
也就是說,我希望在能夠隨時將 Wordpress 主網站的更新同步回來之外,還能夠保有自己因喜好而產生的一些小改變。如果 Wordpress 主程式和我自己的改變,是存放在同一個 subversion repository 裡,那這一切就可以做到。
簡單講就是,如上圖,我希望能夠隨時 incrementally 從 Wordpress 主 subversion repository 將最新的修正,mirror 到自己電腦上的 subversion repository 裡,成為一條 mirror branch。然後,又能夠有自己的一條 local branch,儲存自己的喜好,同時又能夠隨時視需要,將 mirror branch 裡的東西,merge 進我的 local [...]
首先先介紹一下 Subversion 是什麼 (節錄自《Subversion Book 中譯版》):
Subversion 是一個自由/開放源碼的版本控制系統,也就是說 Subversion 管理著隨時間改變的檔案。這些檔案放置在一個中央檔案庫 (repository) 中。這個檔案庫很像一個尋常的檔案伺服器,不過它會記住每一次檔案的變動。這樣你就可以把檔案回復到舊的版本,或是瀏覽檔案的變動歷程。許多人會把版本控制系統想像成某種「時光機器」。
某些版本控制系統也是 Software Configuration Management (SCM) 系統。這些系統是特別設計來管理大量程式碼的,而且具有許多功能,專門用在軟體發展之用:像是可完全了解程式語言,或是提供編譯軟體的工作。不過 Subversion 並不是這樣的系統;它是一個泛用系統,可用來管理任何類型的檔案,其中包括了程式源碼。
一般我們會簡稱 Subversion 為 SVN,簡單講,如果您用過 CVS 或 Visual SourceSafe 的話,SVN 就是那樣的一個東西,而且功能更為強大,設計更為合理,使用更為簡便。就我個人的看法是,SVN 再搭配另外幾個 open source 的軟體,其功能就可以比得上百萬等級的 SCM 軟體;當然,前提是我們有時間搞懂它。
所以,為了節省大家的時間,也為了節省我自己的時間[1],以下整理 SVN 的相關資源。
Subversion 與相關工具之官方網站
Subversion 官方網站:http://subversion.tigris.org/
官方網站 hosting 在由 CollabNet 架設的 tigris.org,CollabNet 提供了 Karl Fogel 全職的工作,專職發展 CVS 的替代程式:Subversion。
Subversion Book (英):http://svnbook.red-bean.com/
最新、最完整、最標準的 Subversion 參考文件。
Subversion Book (中):http://svn.stu.edu.tw/svnbook/
由 Plasma [...]
差不多在幾個月前開始,用 TortoiseSVN 時,若程式裡有放 expansion keywords 的話,$Date$ 會被改成用 zh_TW.UTF-8 顯示。由於 C/C++ standard 規定,程式碼裡只應該使用 ASCII 碼,所以使用中文顯示 $Date$,會違反 C/C++ standard 規定。果不其然,上禮拜我就碰到了。為了要把程式移轉過去,測一測 Visual Studio .Net 2005,結果一編譯,洋洋灑灑跑出三百多個 warning,仔細一看,通通都是一樣的 warning:
warning C4819: The file contains a character that cannot be represented in the current code page (950). Save the file in Unicode format to prevent data loss j:\wc\libmmi2\src\mmi2\mmi2.assert.cpp 1
這可真是天大的麻煩啊,一個檔案就跑一個 warning 出來,project 一大,還真累人。所以我只好乖乖地去 [...]
本系列目前有四篇文章,建議依照以下順序閱讀:
wcfind - avoid find(1) into subversion meta directories
use grep(1) accompany with my wcfind via xargs(1)
Setting svn:keywords in many files simultaneously
再探 wcfind — 用 find2perl 實作
Sorry, the comment system do not allow me to use rich-format styles. So I reply Laurent's comment of "wcfind - avoid find(1) into subversion meta directories" here.
Hi, Laurent, There are [...]
在愛德華日誌看到這篇《Subversion 最佳實務》,愛德華應該一樣是在台灣工作吧?看到有台灣的公司這麼先進,實在高興。我們部門現在用的是非常鳥的 Visual SourceSafe (VSS),根本一點都不 safe。我只好偷偷自己用 Subversion,有需要的時候,再來和 VSS 做 sychronization。苦啊!
Issue tracker 建議使用 Trac,這是我見過目前與 Subversion 整合的最好的 issue tracker。剛也寫了一篇關於 Subversion 與 Trac 的升級心得,歡迎指教。Trac 最可惜的就是直到 1.0 版大概都還不會有真的 multi-project support,我只好另外寫簡單的 Trac Aggregator 來湊合著用。很希望能多和大家交流版本管理系統的使用心得。:-)
就在前幾天,Subversion version 1.2.0 終於 release 了,於是我就在等 Ports,兩天後,devel/subversion 總算升到 1.2.0 了,趁著今天空閒,我做了升級。畢竟,我需要的 Issue 2065、2099 和 2134 都是修正於 1.2 版,要升上去才能用。
升級之後,一切順利,唯一要注意的是,svnadmin create 的 --fs-type 的預設值從原先的 bdb 改為 fsfs。我比較喜歡 bdbfs,至少因為 bdbfs 在 Subversion 裡的歷史比較悠久,應該會比較保險一些。所以我一併把我的 svn-newrepo.sh 修改了一下,強制預設使用 bdbfs,只要我都是用 svn-newrepo.sh 建立 repository,便不會因為忘記這個預設值改變的事情,而設錯了 --fs-type。
不過,我還是發現了另外一個問題。也就是新的 Subversion 1.2.0 和 Trac 0.8 並不相容,進 Timeline 區時,便會顯示如下的錯誤:
Traceback (most recent call last):
File "/usr/bin/trac-admin", line 34, in [...]