20060719

SVN 基本用法


















SVN 與 CVS 異同
功能SVNCVS
版本編號每次 commit 專案編號加一,版編=專案被 commit 的次數每個檔案一個編號,編號=這個檔案的commit 數
異動功能add delete copy moveadd delete
指定儲存庫標準 URL 語法,語法較自然類 URL

SVN 的版本編號



SVN 一次都是給整個專案都同一個 revision number,
而 CVS 是一個檔案一個 revision number。
這樣的好處是可以很簡單的找出穩定的版本。
因為穩定和整個專案有關,而非個別的檔案。
所以一個穩定的專案版在 SVN 可用一個 revision number 表示,
而在 CVS 需指定每個檔案的 revision number 比較麻煩。



安裝SVN


1.先下載 bin 檔案
2.解壓安裝
3.設定環境變數 lang=en_us 以去除中文亂碼

常用指令



以下指令以主機[192.168.0.188]及專案[RPMS]為範例:

察看目前儲存庫的目錄



svn list svn://192.168.0.188/

取得最新的工作烤貝



svn co svn://192.168.0.188/RPMS

更新工作烤貝



#進入工作目錄
cd RPMS
#更新
svn up

加檔入確認排程



#進入工作目錄
cd RPMS
svn add FILE

刪檔入確認排程



#進入工作目錄
cd RPMS
svn delete FILE

建立子目錄加入排程



#進入工作目錄
cd RPMS
svn mkdir DIR

確認上傳



#進入工作目錄
cd RPMS
svn ci

連接密碼控管的文件庫


若要連上有加上密碼控管的文件庫則在命令前加上使用者及密碼資訊如下:
svn co --username ggyy --password ggyy svn://gyboy.blogspot.org/fhope

20060704

ANT 簡介

ANT 的角色是作為一個 跨平台 的批次檔或 shell script。 shell script 是幫助自動化發展應用程式的非核心工作, 像是檔案管理、源碼管理、程式庫 dependency 分析、 程式師合作的溝通。 讓程式師專注於解決他的問題, 基本上除了寫程式的事外,ANT 都能幫你作好, 她能為妳處理下面這些事。
  • 檔案管理- copy, move, mkdir, rename等
  • ANT 能從不同來源取得檔案的方法,像是 ftp, cvs, svn, http get 等
  • 也能用 ftp 來幫妳佈署檔案到遠端主機
  • 壓縮檔案
  • 支援 zip, unzip, jar, war, 幫妳生成包裝檔案
  • 利用 JDBC 設定資料庫
  • 利用 Telnet 幫妳設定遠端的 Server,ex.重開 weblogic
  • 支援 CVS, SVN 幫妳作版本控管
  • 利用 JUnit 自動幫妳作測試,並產生測試報告
  • XSLT 幫妳轉換 XML 的文件
  • XDOCLET 幫妳自動生成程式碼
  • 把 JSP 轉成 JAVA 可指定 tomcat 或 weblogic
  • 幫妳從檔案取代字串,通常用在 html sign 上最後修改日期的自動化
重點是上面這些工作妳可以全部在一個檔案定義, 然後用 ANT 去呼叫特定的工作, 把寫程式以外卻又必要的雜事集中控管, 又可以輕易的呼叫出來 功能強大,又跨平台, 不用 Linux 寫 sh,Windows 又要寫 bat。 所有的語法已被 XML 統一了, 所以 ftp telnet bat sh perl xslt copy find svn cvs 等奇怪的語法, 全部都可用 xml 表示,像是指定一組檔案, 在所有的命令都是用 來表示, 不用再去參考某命令的文件,再去找他指定一組檔案的語法

例:把 JSP 上傳測試機

  • 傳統上我們得用 ftp GUI client 貼上去,但每次改一段要測試就得重覆這個動作,在程式間跳來跳去,相當不方便。
  • 聰明一點的,會把利用 ftp 的 command 指令寫成巨集執行這個重覆的動作ftp 命令檔如下:
#deploy.ftp
root
rootpassword
cd /deploy/webapp
put /local/file1.jsp
put /local/file2.jsp
cd /deploy/classes
put /local/file1.class
put /local/file2.class
然後要上傳時輸入
ftp -s deploy.ftp
批次執行上述的 ftp 命令
看看 ANT 怎麼作?
         description="deploy files to pcstest machine" >

remotedir="${pcstest.operation.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">





可以把 元素看成個別的 dos bat 檔 ,要執行只要輸入
ant deploy.pcstest
就可以執行 所定義的工作了。 再看看 ANT 的 copy 指令
         description="create a temp dir for make ncqmda release file" >












再看看 ANT 的 ZIP 指令
         description="create a nckmqa release zip" >





有沒有發現指定檔案集的方式都是用 。 若沒用 ANT,ftp 命令有一種指定檔案的語法, dos bat 又一種,unix 還有語法超級特殊的 find 指令, 每次用都要 man find 復習一下, 在 ANT 指定一組檔案就一種方法。

ANT 可統一設定所有的資源,包括 SQL, Telnet, CVS, http GET, mail

可遠端操作 Telnet 不用在使用其它的 cliet 去作這件事, 以下看看如何重開 weblogic。
  
userid="${pcstest.telnet.userid}"
password="${pcstest.telnet.password}">

cd ${pcstest.nckmdomain.dir}

stopWebLogic.sh

nohup startWebLogic.sh &



當然透過 JDBC 也可用 SQL 設定資料庫
  
driver="${db.pcs.driver}"
url="${db.pcs.url}"
userid="${db.pcs.userid}"
password="${db.pcs.password}">
CREATE TABLE oproom_material_record_detail2
(
oprmrd2_hospital_no char(1),
oprmrd2_operation_date char(8),
oprmrd2_room_no char(2),
oprmrd2_seq_no int,
oprmrd2_material_date char(8),
oprmrd2_material_time char(9),
oprmrd2_r1 char(4),
oprmrd2_r2 char(4),
oprmrd2_r3 char(4),
oprmrd2_material_no char(9),
v1f char(1),
v2f char(2),
v3f char(3),
r1f char(1),
r2f char(2),
r3f char(3)
);


cvs 或 svn 也通用,用來作版控。
  




自動寄 e-mail。




The ${buildname} nightly build has completed




從 http 抓檔案
     dest="statement.html"
username="1214";
password="secret"/>

ANT 能自動比較檔案的新舊,來作動作

ANT 能從不同來源取得檔案的方法, 像是 ftp, unzip, copy, cvs 等, 其中一個重點是當目的檔案比來源檔案舊時, 應該不可覆蓋來源檔案,相關的屬性如下
[v1|v2] 第一個表預設值
ftp.depends=[no|yes] yes 表不覆蓋
ftp.newer=[no|yes] yes 表不覆蓋
unzip.overwrite=[true|false] false 表不覆蓋
copy.overwrite=[false|true]false 表不覆蓋

直接看我的範例檔吧!


operation









location="${build.test.dir}/report"/>






value="jdbc:mysql://localhost/pss?useUnicode=true&characterEncoding=big5"/>




value="jdbc:informix-sqli://192.168.11.112:1526/pcs:authority:INFORMIXSERVER=nckmdb_tcp"/>










value="${pcstest.nckmdomain.dir}/applications/hospitalization"/>
value="${pcstest.ap.dir}/DefaultWebApp"/>
value="${pcstest.web.dir}/hospitalization3/operation"/>
value="${pcstest.web.dir}/WEB-INF/classes/"/>

location="d:\nckm\DefaultWebApp\hospitalization3"/>

value=":pserver:nckmcvs:nckmcvs@ftp-proxy.syscom.com.tw:/cvshome/nckm"/>
value="nckm_s"/>
description="setup a environment for this project" >


























description="put file to test machine" >
debug="on"
source="1.4"
target="1.4">





description="unit test" >






name="edu.ncku.hosp.OPRMaterialRecordTXTest"/>


description="deploy files to pcstest machine" >

remotedir="${pcstest.operation.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">




remotedir="${pcstest.web.classes.dir}"
userid="${pcstest.ftp.userid}"
password="${pcstest.ftp.password}" depends="yes" binary="no">






remotedir="${test.server.operation}"
userid="root" password="wyj0806" depends="no" binary="no">





description="backup" >
value="${backup}/${ant.project.name}_${DSTAMP}${TSTAMP}.zip"/>




description="create a temp dir for make ncqmda release file" >












description="create a nckmqa release zip" >





description="clear release dir">


description="put release into nckmqa" >
remotedir="nckmqa"
userid="root"
password="wyj0806"
depends="yes"
binary="no">







description="restore src to initialize state" >








message="import procject files: ${scm}"/>




test.server.operation.dir=${test.server.operation}






userid="${pcstest.telnet.userid}"
password="${pcstest.telnet.password}">

cd ${pcstest.nckmdomain.dir}

stopWebLogic.sh

nohup startWebLogic.sh &




driver="${db.pcs.driver}"
url="${db.pcs.url}"
userid="${db.pcs.userid}"
password="${db.pcs.password}">
CREATE TABLE oproom_material_record_detail2
(
oprmrd2_hospital_no char(1),
oprmrd2_operation_date char(8),
oprmrd2_room_no char(2),
oprmrd2_seq_no int,
oprmrd2_material_date char(8),
oprmrd2_material_time char(9),
oprmrd2_r1 char(4),
oprmrd2_r2 char(4),
oprmrd2_r3 char(4),
oprmrd2_material_no char(9),
v1f char(1),
v2f char(2),
v3f char(3),
r1f char(1),
r2f char(2),
r3f char(3)
);




無廢話ANT 安裝

  1. 下載ANT
  2. 解壓縮至 c:\ant
  3. 設定環境變數 JAVA_HOME=C:\jdk
  4. 設定環境變數 ANT_HOME=C:\ant
  5. 設定環境變數 PATH=%ANT%\bin

使用 FTP task

安裝以下的庫至 %ant_home%/lib 下
  • jakarta-oro-2.0.8.jar
  • commons-net-1.4.0.jar
在 build.xml 第一行補上:
classname="org.apache.tools.ant.taskdefs.optional.net.FTP"/>

Ant vs Maven

Maven 是 ANT 的主要對手,其差異如下: Ant 有三個階層,project target task,但彼此互不關聯 Maven 在 project 層則隱涵target。