顯示包含「VCS」標籤的文章。顯示所有文章
顯示包含「VCS」標籤的文章。顯示所有文章

2011年5月26日星期四

Bazaar的培訓教材

Bazaar是我最喜愛的分散式源碼管理系統,因為:
  • 入門的難度要求低 - 不會一開始便有相當之嚇人的概念、名詞要懂
  • 立即使用   -   只要能分享檔案就能進行團隊開發,不論你是用Samba、Windows的檔案分享,甚至是Dropbox也可以,服務器端不用安裝Bazaar便能立即開始新計劃。
  • 功能強大 - 雖然在這方面總是會被拿來跟git比較,可是Bazaar所提供的功能可說是已經符合絕大部份的開發過程所需的。
  • 便利的圖像介面 - 初學者容易掌握,也有為進階用戶而設的工具
  • 跨平台能力優秀 - 無論是Linux、Mac及Windows都有natvie的安裝程式,而且有統一的圖像介面(Bazaar Explorer),得到的經驗可以帶去其他平台上使用
比起以上提及的理由,還有一個更重要的原因 - 就是佈教容易,與其他工程相比,要教曉其他人的難度非常之低,只要有Subversion的底子便能很快熟識並使用。

畢竟軟體開發往往不祇是一個人的事,許多時還得為其他人著想……在香港,沒有使用或仍停留在CVS的源碼管理系統的工程師比想像中更要多……,過於複雜的系統只會拖垮他們的步伐,至於我個人也不想花太多在培訓及解決其他人各種的疑難……

即使Bazaar非常之容易掌握,可是許多人的概念仍停留在中央式的源碼管理系統上,對於分散式式系統的使用方法,以及帶來的Workflow轉變不堪了解,所以一些基本的入門培訓課程還是對初學者有幫忙的。

最近正好要辦相關的培訓,為了這個活動我特意準備一份教材,題目是:

Getting Started with Bazaar , How it change your workflow


教材以Creative Commons的CC BY-NC-SA 2.0形式授權,歡迎非商業的使用,不過所謂的商業僅是指用來贊錢而已,閣下要用來培訓員工自然是無任歡迎。

內容集中在Workflow中,列出不同的workflow,以及當中會用到的Bazaar的功能。為了照顧初學者的所需,也列出了許多非常之基本的指令,希望到你們有用。

2009年10月20日星期二

Bazaar explorer

在版本控制系統的領域上,指令介面可算是王道般的存在,絕大多數的VCS都是以指令介面為基礎(例外的例如有M?的垃圾V??),然後GUI是以延伸的方式做出來,故此很多時GUI的選擇會多於一種,就好像Subversion有RapidSVN及TortoiseSVN、Git有Giggle、git-cola等等。

作為我首選的Bazaar,最初只有bzr-gtk,要在Windows裏安裝需要一個很痛苦的安裝過程,後來出現了QBzr,當中有個相當之不錯的diff工具,並已經包括在正常的安裝程式裏,再加上TortoiseBzr,在Windows上使用Bazaar的方案可算是已經齊備

但Tortoise並不是每個人都喜歡,我個人亦認為缺乏了一個專案整合的工具,每次都要在File Explorer裏click click click才能抵達專案所在其實很煩,雖然說能用bookmark,但bookmark並不只放專案有關的,而且專案一多起來就會很混亂(對開源軟件開發者來說,一部機裏有20~30個專案是很平常的事),最好還是有一個本地專案的管理工具,這會輕鬆許多,而Bazaar所提供的方案就是Bazaar Explorer


Bazaar Explorer的定位是為casual users所設計的圖像介面,複雜的功能還是需要用者自己行指令完成,但基於有以下的功能,我覺得就算是專案級的用家亦適用:
  1. Bookmark - 可以記下以前開啟過的專案,然後快迅開啟。
  2. Terminal & File Explorer- 可以直接在專案開始Terminal / File Explorer並移至專案所在的目錄,方便輸入指令及其他管理(Linux、Mac、Windows適用)
  3. 提供大部份基礎指令的圖像介面
不過Bazaar explorer的主要目標是提供分歧管理,像是檔案、目錄的管理會弱一點,例如說沒有提供`bzr mv`的代替品,若有這個需要,便得開啟Terminal,又或者開File Explorer,用TortoiseBzr解決(Nautilus-bzr會令系統變慢,所以我不採用)。

安裝

在Windows裏安裝Bazaar explorer是超簡單的,只要在網頁下載安裝程式便可,至於Linux就反而麻煩一點,因為未有套件,所以只能經代碼安裝,方法如下:

mkdir -p ~/.bazaar/plugins
cd ~/.bazaar/plugins
bzr branch lp:bzr-explorer explorer

若要在Gnome的應用程式選單中加入Bazaar explorer,則需要再多一個指令:
cd ~/.bazaar/plugins/explorer
cp bzr-explorer.desktop ~/.local/share/applications/

2009-11-28  補充: Ubuntu套 件已經可以在launchpad裹下載得到:

2009年2月5日星期四

Bazaar的圖像介面程式已經齊備

以前寫過二篇關於在Windows裏安裝Bazaar圖像介面的文章,最初那篇介紹用bzr-gtk,安裝過程複雜得嚇人,後來轉用QBzr就簡單了,但要裝的程式都要有二個,而且只是把指令圖像化,結果還是要以指令介面推動圖像介面,並不完善。

隨著時代的變化,大家大可把這二篇文章忘掉,因為QBzr已經包在一般Bazaar的安裝程式裏了,不用分二次安裝,而且另外一個叫做TortoiseBZR的程式亦已自1.6版本開始捆綁到安裝程式裏。

熟識Tortoise SVN的人仕大概已經明白到那是個怎樣的程式了,Tortoise BZR的作用Tortoise SVN一樣,提供File Explorer的整合,讓使用者可以在File Explorer裏執行有關的指令而不用打開Command Prompt,使得操作更為簡單方便。

Checkout , Branch的選單

其他常用功能的選單

使用上要留意一點,TortoiseBZR預設不干預Network drive之類非本地的drive,在那裏的Bazaar的repository並不會有圖示,亦不能進行任何操作,要先到Setting裏有關Icon overlays的選單中,增加支援的Drive Type才可以進行操作。

在Linux上對應TortoiseBZR的程式是Nautilus Bzr,已經是bzr-gtk的一部份,不過我沒用就是了,以前的版本會令到Nautilus的速度變得很緩慢,就算換成是0.94,速度快了點,但有時會炒。

可能因為這個原因,Nautilus Bzr並沒有預設為使用狀態,啟動要人手把有關的檔案抄去Nautilus的設定目錄裏:

$ cp /usr/share/pyshared/bzrlib/plugins/gtk/nautilus-bzr.py ~/.nautilus/python-extensions/

與此同時,Git的Windows安裝程式亦已經出爐,叫做msysgit,安裝也不複雜,圖像介面的功能也很齊備,比TortoiseBZR更好,不過因為用上了Tcl/TK,不太美觀就是了。

2008年10月24日星期五

Ditz Commander

Ditz是一套分散式的Issue tracker系統,關於它的特點及概念,建議參考Jserv所撰的<<從 Ditz 談針對分散式版本控制的 Issue Tracker>>一文,這裏只會講個人使用Ditz的緣由,及介紹我為Ditz所寫的圖像介面軟件 - Ditz Commander

為什麼連Issue Tracker都要分散式?

無論是開源免費或商業收費的Issue Tracker都有不少,開源軟件中最為人所認識的有Bugzilla、Trac之類,而項目管理網站如Google Code及Launchpad等均有自己的Issue Tracker,雖然未必能提供非常強大的功能,然而經歷過多個項目的實踐,證明了它們相當之有用。

相比起來,Ditz還是處於起步階段,雖然能造出HTML文件,但連Web介面乜欠奉,只有指令介面的輸入,實在很難與Trac之類的軟件比較。

但憑著分散式系統的優點,Ditz亦有吸引使用者的本錢。

理由1 - 沒有伺服器的負擔

分散式系統其中一個最大的好處就是無需架設伺服器,不用維護,不用特別搞什麼備份系統,每個人手上的都是一份完整的拷貝。

這並非是為了省錢不架伺服器,如果沒人專責管理伺服器的話,我認為從一開始就不要去做。

沒人管理、沒人負責備份的機械當遇上事故如硬件故障等情況,裏面的資料很可能就此救不回來。

而更糟的情況是讓沒人管理的伺服器成為「觀光聖地」,任「遊客」予以取求,反而惹麻煩上身。

理由2 - 用作個人的Issue Tracker

為什麼個人本身都要做Issue Tracking呢?

跟據Getting Things Done一書所提及,一個項目/project,是由數個及更多的工作所組成,至於怎樣安排及完成這些工作,該書有一套方法,不少軟件會按該書所提及的方法去管理工作,但一點是經常遺忘的,就是工作是可能有「手尾跟」,會有「鑊氣」(廣東話)的。

這並非軟件開發的獨有問題,但凡涉及數人、漫長時間的項目都一樣,計劃往往跟不上變化,記錄工作、發生的事情、解決的方法,正好是Issue Tracker所善長的的工作。

引述Jserv的說話:

「包含我在內,不少人將 [trac] 也裝於自己的電腦 (laptop) 中,搭配 svk 一類的分散式版本控制系統,就可隨時隨地追蹤專案進度 (internal / external)、作基本的個人知識管理 (KM),或者查核待作事項等等。」

故此一套Issue Tracker是可以有效地幫助你去管理項目,而一套不需安裝WWW伺服器的個人的Issue tracker,可以進一步節省安裝及維護的時間。

Ditz Commander

Ditz正好能解決以上提到的問題,但……一套指令介面的Issue tracker,是連我這樣的Geek也覺得難用的。故此我為它寫了一個簡單的圖像介面 - Ditz Commander

功能:
  1. HTML瀏覽器與Terminal整合,一邊使用Ditz的指令介面改寫Issue,另一邊在瀏覽器上觀看結果。
  2. 提供基本Ditz指令的short cut key
  3. 自動提供Issue ID參數,例如在觀看某個Issue時,想寫下感想,一般需要在從瀏覽器 c&p issue ID,然後貼在Terminal裏。在Ditz Commander裏可以省點這個步驟,只要按下"Comment"按扭便會自動填寫Issue ID。
  4. 記錄已開啟Ditz項目
專案網頁:http://code.google.com/p/ditz-commander/

Ditz及Ditz Commander的Debian套件:http://www.cgarbs.de/stuff/deb-repository.html#1

相關閱讀
  1. 安裝Trac
  2. Ditz Commander v0.3

2008年1月24日星期四

在Windows安裝Bazaar版本控制工具

註:以下方法已經過時,請參考其他二篇文章:

要在Bazaar安裝Windows可以很簡單,也可以很複雜,視乎需要什麼功能。

在官方網頁裏會找到二種安裝程式,第一種是standalone模式,就像一般Windows安裝程式般簡單易用,不過功能有限,也沒有圖像界面。對習慣指令界面的人來說應該問題不大--但那並不包括我在內。

在Windows環境沒有圖像介面是一件很麻煩的事,因為指令環境的功能差太遠了,Windows的用起來綁手綁腳,最好是裝上其他類型的指令界面 環境,例如Total Commander、Cygwin之類,不過前者我沒用過,也找不到開源的代替品,後者在Notebook裏是太佔硬碟了,故此我決定採用另一種安裝程式 - Python installer。

這一種模式需要系統先裝上Python及其他模組,優點是能用到Bazaar的所有功能,包括圖像介面,缺點是模組的數目不少,又沒有像apt-get那樣的介面,要裝起來是挺麻煩的。

準備工作:

若只有XP預設的Command Prompt(cmd.exe),我會建議修改以下幾個設定,建立一個較適舒的操作環境。因為安裝過程及日後操作都會用到指令界面:

首先執行cmd.exe,然後在Properties內設定以下項目:

Quick Edit Mode - 打開這個選項,Mouse就能夠自動選取Command Prompt的內容

Buffer Size - 增加這項數值,使得能記錄較多的指令輸出。

與此同時,如果每次都要用cd這個指令移到工作目錄也實在太麻煩了,最理想是能在Explorer裏直接打開Command prompt並移到所在的目錄上。這個功能已經加入在Vista裏,Windows XP及2000用戶請參考:

How can I add a Command Prompt option to the default Explorer right click context menu?
http://www.petri.co.il/add_command_prompt_here_shortcut_to_windows_explorer.htm

安裝:

詳細的步驟請參考: http://bazaar-vcs.org/WindowsInstall

視乎所需的功能,下載文件內所指示的模組,如果打算安裝圖像介面的話,差不多要下載所有東西。

一個小提示予Firefox用戶,只要highlight內文,然後按滑鼠右鍵,有一個”Open Links in New Tabs”的選項,選那個就可以一次過下載所有檔案,當然會有點無用的東西,請自行挑選。

設定:

當把所有套件安裝後,在Program Files裏能找到一個叫Bazaar的文件夾,入面有個叫”Start bzr”的選擇,會跑出一個Command Prompt並已設置好PATH。但有一個問題,就是要靠自己打cd移轉到其他目錄,如前文所言般很不方便,所以最好是把bzr的所在地加入PATH內, 然後經Explorer直接打開Command Prompt。

假設Python安裝了在C:\Python25,那麼PATH應該加入:

C:\Python25\scripts

常用的Bazaar圖像介面指令:

bzr viz - 顯示版本記錄及分枝狀況
bzr gdiff - 以圖像介面顯示’diff’的內容,參數與`bzr diff`指令一樣
bzr gci - 遞交修改
bzr gannotate

bzr viz

其他模組

TortoiseBzr可以讓Explorer直接顯示bzr的版本資訊及執行bzr指令,應該是相當有用的模組,但暫時仍在開發之中,功能不太齊備:

http://bazaar-vcs.org/TortoiseBzr

以上文章供Winodws的Bazaar使用者參考,如有不足之處歡迎提出。

2007年3月31日星期六

Getting Started with CVS

許久以前在「昨天教了一堂CVS」一文內提過弄了份CVS的教材,當初完成的時候有計劃過要公開出來,反正內容都是東湊西拼出來的,不過呢,因為太忙的關係將件事完全遺忘了……

說實話以現今的狀況應當推介SVN、Bazaar而放棄CVS,免得害人浪費時間,算是過時得很的教材。

但現實始終是現實,還有許多地方仍使用CVS,更改VCS可不是每個機構都有那個決心實現,新人要接手總得重新學習。

那麼這份教材「應該」會有用得著的地方吧。

我希望……

又或者可以拿來改做成Subversion、Bazaar的教材?

Getting Started with CVS (odp,pdf)

此文件採用 Creative Commons 授權條款



2007年1月8日星期一

想寫點關於Bazaar的文章

之前我提過仍有不少公司及OSS仍使用CVS作版本控制,故在Subverison正逐步取代CVS的一天,那不算什麼落伍的事,但若非為節省將CVS轉移的時間,或拍擋不願學習其他的版本控制系統,實在沒必要學習CVS,不過Subverison又真的是必然的選擇嗎?

在05年五月左右聽到Linus Torvalds決定為Kernel的開發制作一套新的版本控制系統籍以取代Bitkeeper,自那時起開始關注那套叫做Git的軟件,期望能幫忙解決以往進行Kernel移植所遇到的困難。

個人單打獨鬥還好,與人合作的代碼管理就問題重重。代碼太多,而且要經常加入不同類型的patch,不標名來源,以及那些屬於自己的修改,很快就會 亂套,問題出來時往往無法分辦誰是誰非。想以CVS管理Kernel只會是場惡夢,要留心注意的地方太多,分枝的困難令patch的管理難以達到,而且進 行更新代碼的命令的速度也慢得可怕。

為了代碼的質素,不得不做版本控制,最低限度會知道所收到的代碼有多恐怖,如何應變有個想法。後來又想了不同的方法管理,沒一個行得通。模仿Kernel的開發是最理想的,但提議公司買Bitkeeper的成功機會渺茫……

故此對Git投放了不少的時間,那是我第二次接觸分散式的版本控制系統(第一次是Bitkeeper),因為跟CVS的概念不一樣,而且仍在開發中,說明文件並不齊備,礙障是挺多的。不過結論是值得的,作為分散式的版本控制系統的Git,確有集中式管理不能比擬的優點。

首先它不用依懶固定的伺服器,用家亦能離線操作。方便那些沒自己的伺服器,卻又想軟件代碼在自家不同的電腦上同步的開發者。雖然我有自己的伺服器,但有些私人及公司有關的東西要盡量避免放在這些機械上,而且搬家及炒機的經驗太過豐富了,總是有點不太放心……

另外簡單的分枝管理及代碼合拼,讓協助開源軟件的開發,如提供patch等工作較易管理。除此以外,遇上要為私人的目的修改開源軟件,同時要保持與最新代碼同步的情況時,這項功能亦能有所幫忙。

舉一個較易明白的例子,Wordpress內的頁面佈局全寫死在PHP代碼裏,即使想改變的只是個別欄位的位置,也非修改代碼不可。問題來了,若要 進行更新,自己所修改的代碼不就會被覆蓋掉嗎?修改一二句還可以在其他地方記錄下來,大量修改的話就唯有與原來的代碼跑一次diff,甚至有人提出要有放 棄更新的想法。

我的解決之道是先把原來的代碼用Git管理,開一條分枝存放自己的網頁,當要更新時,就拿最新代碼再開一條分枝,然後與自己的分枝合拼,若沒有發生衝突,如大家均沒修改同一行代碼,Git一般都能順利地融合二邊的修改。

大部份由我所管理的網頁都已經轉用Git管理,其他的就等有空時轉過去,但有一類項目是難以用Git管理,就是支援Windows的跨平台軟件項目,因為Git在Windows執行的問題太多了……

windows problems summary

Linux項目就算了,但跨平台的就不得找其他方案了,在試驗了好幾個不同分散式版本控制軟件後,最後選擇了Bazaar作取代方案。

Bazaar與git的設計的理念十分接近,最顯注的分歧在於commit的表示方法,不像git或monotone般採用hash code,而用回revno,對初學而言會簡單一點,可是有git用者認為這個做法不好。其中一個影響是commit的revno可以因為 pull/push而改變,在bug tracking上會造成不便,個人也不太欣賞這點,不過開發人員已經正視這個問題,在想方法解決。

在圖像介面方面,我一般是用qgit配合git使用,所能提供的主要功能是顯示分枝圖。

對於一個分散式的版本控制系統而言,這項功能猶其重要。可惜其他的功能卻較為陽春,大部份工作都要靠自行定義指令解決,更沒有檔案管理員。

Bazaar的圖像介面程式有bzr-gtk及olive二個選擇,前者是插件,加入visualise及annotate二個指令,分個用來顯示 分枝圖、及顯示個別檔中每行每句由何人何時修改。olive則是一個獨立的軟件,現在已經整合到bzr-gtk中,功能是像WinCVS般提供檔案管理, 可是還未完成,比qgit還是差了段距離。

雖然有不足的地方,但個人來說是頗看好bzr的前景,雖然與git的龐大號召力相比顯得不足,但勝在有Windows的跨平台支援,或許能吸引許多像我般的原git用戶,或認為中央管理式的版本控制已無法滿足,正尋求新方法的開發者們。

(在2007-1-9加入)

在mailing list上有個討論是關於做Bazaar T-Shirt的設計,其中有人(Aaron Bentley)提議:

CVS: Atomic commit? What do you mean?

Subversion: Branches? What do you mean?

Git: User friendly? What do you mean?

Bazaar: You mean this, don’t you?

XDD

對前幾者可算是一針見血,不過Bazaar是否就是最佳方案,還要點時間呢。

2006年2月3日星期五

昨天教了一堂CVS

別奇怪,閣下沒看錯,標題也沒打錯,真的是教了一堂CVS,而非Subversion。

論功能,SVN沒較CVS遜色之理,不是更值得教授嗎?可…可是……大家總不能忽視了現今還有許多項目及公司仍在使用CVS吧,一提及這件事,友人們的反應就好像視之為十分落伍似的……

而且,就我常用熟識的版本控制工具只有CVS--及git二樣,要在短短幾天的時間內為一班未有概念的學生設計課程,讓他們掌握一套SCM工具以至基本操作,在摸熟SVN之餘更要提供教材,太強人所難了。難道把git拿出來才不過時嗎?這樣也未免走得太前、太過深奧了。

要是說有什麼感到慚愧的話,大概是用以作為教授的軟件是WinCVS吧!跟據過往經驗,很快會有報應降臨。 :P

這堂課總共有七位學生參加,其中只有一位曾學過CVS,不過當初因熬不過枯澀又沉長的理論敘述部份而放棄,這不是第一次聽到類似的理由,許多教學文 章都有相若的通病,要避免並不容易,學習SCM本身或多或少都意味著要依從一套methodology所行事,當然會因此而感到煩厭及沉悶。

故在考慮課堂的設計時把理論部份縮短,加入較多的實作,只花較大的篇幅在repository概念及那個”copy-modify-merge”的合作模式上,最終還是花了近半小時的時間論述,之後各自半小時的演示及實習,個半小時的課程就此過去。

為加深學員的印像,特別為他們起了一台伺服器及測試用的帳戶,讓他們嘗試加入、修改、刪除各個檔案,查看他人的工作以及如何把檔案狀況回潮等……看 來成效不錯,大家都表示對這套軟件感到興趣,甚至有人因未能在FYP前期時使用而感到可惜。雖然這幾小時的課程並沒有人工,可是能聽到這些話,我就覺得十 分值得。

Creative Commons License
本網誌Ben Lau製作,以共享創意署名-非商業性-相同方式共享 3.0 香港 授權條款釋出。