顯示具有 SVN 標籤的文章。 顯示所有文章
顯示具有 SVN 標籤的文章。 顯示所有文章
2008/05/12

[+/-] : 利用 網路 分享 Mercurial

2 comments
上一篇文章介紹了分散式的版本控制系統 我選擇了 Mercurial 作為目前使用的方案
接下來就是要建立Server來讓專案可以多人協同作業
Mercurial(HG)提供了多種不同方式例如藉由SSH, HTTP server或是他本身內建的Server來運作

最簡單快速的方式就是使用HG內建的Server
只要在工作路徑所在的命令列輸入
hg serve
或是使用 TortoiseHg 在工作目錄上按右鍵選擇Web Server再按下Start
就可以開始使用http的分享服務
如果要修改port或是listen address可以使用-p或-a參數修改
如果有不只一個工作目錄 可以使用參數--webdir-conf加上設定檔案來控制路徑
設定檔有兩種方式 如果工作目錄都在同一個目錄下 使用
[collections]
/prefix/to/strip/off = /root/of/tree/full/of/repos

如果都不在同一個目錄下 分在在各處的話使用
[paths]
virtual/path = /real/path
virtual/path = /real/path

其他參數可以參考這裡 或是下指令
hg -v help serve
使用內建Server的最大問題是還不提供使用者管理的機制
只能選擇開放或關閉push指令 (設定在hgrc中 在最後介紹)
然後也不提供SSL的通道 雖然參數已經有了 不過目前還沒實做完成 等下一改版吧

接下來是使用SSH來分享 這部份比較簡單 直接使用系統中的SSH Server如OpenSSH
只要登入的使用者對工作目錄有存取權限即可 其設定方式就請參考網路上的SSH設定方式
在Client端連接的路徑就是
ssh://user@host:port/path
要注意路徑中的path如果要使用絕對路徑 必須為兩個//
例如工作路徑在/var/hgroot/proj1 而登入代碼則為
ssh://josh@host:port//var/hgroot/proj1/
而使用相對路徑的話則是會跟使用者的家目錄相關
例如使用josh登入 home路徑在 /home/josh 而工作路徑 /home/hg 連結路徑就要打
ssh://josh@host:port/../hg
如果要使用非對稱金鑰認證來取代密碼 可以使用putty ageant之類的代理
或是修改Mercurial.ini設定檔中的ssh項目加入-i參數 如
ssh = "C:\path\TortoisePlink.exe" -ssh -2 -i "D:\path\key"

最後一種是使用現有的http server來實做 以下我會針對使用apachelighttpd來介紹
會分成兩種是因為實驗室的Server兩種平台 不過設定起來都很簡單
首先要確定已經安裝好Server 以及 都可以執行cgi及python的script
接下來只要利用hg所提共的hgwebdir.cgi依照以下步驟即可
在Apache的設定檔中加入以下設定 (我是放在<VirtualHost *:443>之中 只允許安全通道)
ScriptAliasMatch ^/mercurial(.*) /path/to/web/hgwebdir.cgi$1
<Location /mercurial>
Allow from all
Options ExecCGI
AuthType Digest
AuthName "Mercurial Repository"
AuthUserFile /path/to/web/passwd
Require valid-user
</Location>

在lighttpd的設定檔中加入以下設定
(一樣只允許SSL 所以我放在$SERVER["socket"] == "0.0.0.0:443"之中)
alias.url += ( "/mercurial" => "/path/to/web/hgwebdir.cgi" )
$HTTP["url"] =~ "/mercurial" {
cgi.assign = ( ".cgi" => "/usr/bin/python" )
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/path/to/web/passwd"
auth.require = ("/mercurial" => (
"method" => "digest",
"realm" => "Mercurial Repository",
"require" => "valid-user"
))
}

然後利用htdigest建立帳號密碼放到/path/to/web/passwd
最後在hgwebdir.cgi的目錄下建立檔案hgweb.config
設定工作目錄的所在(跟最上方使用內建server一樣的設定檔)
以上是不允許匿名pull 僅允許登入使用者pull
如果要開放匿名pull 可以將 Require valid-user用 <Limit GET POST PUT>包住

現在基本上完成了 接下來是針對每一個檔案庫做設定
設定檔通常為 .hg/hgrc 或是Mercurial.ini等
跟分享服務有關的欄位為 [web] 一般會放置以下內容
style = gitweb //更改顯示的style
allow_archive = bz2 gz zip //提共下載的格式
contact = Josh //聯絡人資訊
push_ssl = true //是否使用SSL
description = Josh's Shadow Research Project
allow_push = josh //允許push的使用者 (如要開放所有人請使用 *)
hidden = false 是否在網頁中列表中隱形

設定完到這裡就大功告成啦
最後在Client端執行
hg clone path
或是在瀏覽器中輸入 https://host/mercurial
來測試結果啦

目前使用Mercurial上最大的問題 還是在TortoiseHg
對中文環境的支援度很差 如果新增檔案的檔名有非英文字母
需要先Add再Commit,不能像只有英文字母的檔案只要Commit自動幫你Add
在Commit視窗中 所有中文檔案一律變成亂碼(這也是不能自動新增的原因吧)
另外註解不能打中文 否則只能在本機端上看到 在網頁上就都會變成"?"
還有Mercurial不支援目錄的版本控制 因此不能新增一個空目錄上去
這點相當不好用

再來就是使用上的習慣問題 修改檔案前都要先執行Sync中的Pull檢查是否有新版
在寫程式當中 記得到一段段落就要Commit一次
在程式寫完一個部份之後 還要執行Sync中的Push到Server上
不像TortoiseSVN一樣 只要Update然後Commit就做完所有事項
多了很多步驟 用起來麻煩很多很多....

不過使用Mercurial有我上一篇提到的一個不錯的優點 他完全支援P2P的運作
只要每一個Client都有分享目錄出去 不需要有真正的中央Server來控管
可以完全在自己的Client端中來運作

參考資料
Collaborating with other people
Publishing Repositories with hgwebdir.cgi
PublishingRepositories
Setting up the Hg http interface
hg(1) hgrc(5)
Apache Docs
Lighttpd Docs Alias
2008/05/11

[+/-] : 分散式版本控制系統 DVCS

comments

最近使用Subversion(SVN)的專案越來越多,我實驗室的專案也全面使用,不過,這種Client-Server式的架構有一個嚴重的問題,就是在網路斷掉時,就沒有版本控制的能力了,也因此有另一種形式的版本控制系統的出現。

Distributed Version Control System (DVCS),分散式版本控制系統是現在越來越紅的一種版本控制系統的方式,有別於一般Client-Server的架構,分散式其實就是在每一個Client端都有自己的檔案庫存在,自己開發的文件檔案就直接Commit到Local端的檔案庫中,而檔案庫再跟主要的檔案庫Server或是其他Client端的檔案庫做同步化的動作,稱作 Pull 跟 Push ,因此在網路不通時,可以完全的獨立作業,又同時享有版本控制的好處,而網路連線時再跟其他檔案庫來交換內容,甚至可以打破傳統階層式的架構,採用Peer-to-peer(P2P)的方式來運作,每一個Client同時也是Server(依據不同的版本控制統而定),這裡有一些DVCS的運作圖可以連上去看一下(BitKeeper的產品介紹)

看了一下Wiki上的比較列表,比較紅或是比較成熟的大概是Git, Mercurial, Bazaar 以及SVK吧,在Choosing a Distributed Version Control System這一篇文章中有列出一些選擇的項目及他們的優缺點可以作為參考,如果是原Subversion的使用者,或許可以考慮使用SVK,因為SVK原本就是建立再SVN的環境上在做擴充,可以參考架構圖,不過在多方比較後,Mercurial(水銀的 所以又叫做Hg XD)看起來還是比較好的選擇,尤其是使用介面上有TortoiseHg可以使用(Git有git-cheetah Bazaar有TortoiseBzr 不過看起來都還在早期開發階段),作為初學者,入門的難度比較低,而其功能性及擴充性並不會因此而打折扣,依然是相當強悍的軟體,在加上最近終於進入的1.0的階段,其成熟度應該是可以受到肯定,目前簡單的試用,除了介面還是很醜(這大概要怪GTK+),其他用起來並沒有太多的障礙,目前把我的研究開發目錄從SVNf遷移到Hg上試試看。

補充資料

Distributed Version Control Systems - Why and How(PDF)
Git - User's Manual - GitWiki - Wikipedia
Mercurial - Distributed revision control with Mercurial (PDF) - WikiPedia
Bazaar - Workflows - User Reference - Wikipedia
Free Host - Git - Mercurial
The Risks of Distributed Version Control
Chris' DVCS wishlist

最後要介紹一下assembla這一個網站,他是一個專案管理的整合型線上環境,除了提共Wiki, Chat, Blog, Milestones, Scrum, Tickets等線上專案管理常見的功能外,在這裡介紹他最大的原因就是,他還提供了SVN, Mercurial, Git等檔案庫的支援以及Trac的線上環境供使用及HTTPS的加密通道,免費的有500MB的空間(沒有說明流量限制),並且可以付費升級,跟其他的FreeHost不太一樣的是他就算免費一樣可以選擇完全的Private,對於一般的專案管理應該是非常夠用了,而且他有商業模式在,應該比較不容易倒吧XD

2008/03/13

[+/-] : 在Linux上裝SVN + Backup Script

comments
因為Lab的Server搬新家 加上網管使用Ubuntu來做OS 所以SVN也跟著要搬到新的機器上
不過就在搬家前 發生了一些小插曲 相當不幸的小插曲
舊的Server上所有硬碟一次壞光 大概是Power壞了還是主機晶片啥壞了的 anyway
雖然在NAS上有備份 不過不是同步(同步的備份跟著一起壞了) 跟最新版有著一天的差距
還是要想辦法把壞的的資料弄出來 因此花了幾天的時間來掃描磁碟 救資料等...很累

另外 還有一台QNAP的 TS-209 雖然速度不快 不過空間倒是很大 拿來放著還蠻可惜
所以就當作主Server 的同步備份Server 才不會發生一次硬碟全壞光就資料統統消失了= =
因此有兩台主機(一台Ubuntu 另一台NAS也是Linux)做SVN Service
那還要一台電腦做非同步的資料備份 定期壓縮傳上去

首先 在Ubuntu上安裝很簡單 在Package Manager上找到SVN 等他裝完就OK
接下來測試一下有沒有裝好 隨便建立一個新的檔案庫
svnadmin create /SVNRoot
svnserve -d --listen-host=0.0.0.0 --listen-port=<請輸入> -r /SVNRoot

這裡 /SVNRoot是新檔案庫的位置 請依照需求建立
像我已經有舊的檔案庫 所以只要把舊的檔案庫cp過去就好
然後就在Client端測試一下連線是不是OK 方法就請參考這一篇

最後就是要設定開機自動啟動 Ubuntu可以在 /etc/init.d/下 建立shell script如下
vim /etc/init.d/svn

//進入編輯畫面之後按i再輸入下方script (此Script感謝龍頭大大教導)
#!/bin/sh
# description: Svnserve auto start-stop script. by bignose
# chkconfig: - 20 80
#
SVN_HOME=/usr/bin
SVN_OWNER=root
if [ ! -f "$SVN_HOME/svnserve" ]
then
echo "svnserver startup: cannot start"
exit
fi
case "$1" in
'start')
su - $SVN_OWNER -c "$SVN_HOME/svnserve -d --listen-host=0.0.0.0 --listen-port=X -r /SVNRoot -T"
;;
'stop')
su - $SVN_OWNER -c "$SVN_HOME/killall svnserve"
;;
'restart')
su - $SVN_OWNER -c "$SVN_HOME/killall svnserve"
su - $SVN_OWNER -c "$SVN_HOME/svnserve -d --listen-host=0.0.0.0 --listen-port=X -r /SVNRoot -T"
;;
esac

//記得輸入想要的port之後 按ESC跟:wq存檔離開
//最後給他執行權限
chmod 755 /etc/init.d/svn

最後重開機看看是不是還能連線囉...

接下來設定另一台電腦 QNAP的 TS-209 由於是ARM的CPU
本身也沒有提供套件安裝的功能 稍微麻煩一點 不過要達成也很簡單
官網的討論群當中已經有很詳細的介紹
首先 要安裝ipkg來方便我們安裝各種軟體 詳細設定請參考此討論串
cd /share/Public
wget ftp://csdread:[email protected]/NAS/Optware-Ipkg/optware-tsx09.tar.gz
tar zxvf optware-tsx09.tar.gz

//安裝
./optware-bootstrap-qnap-tsx09.sh optware_chroot.tar.gz

//反安裝
./optware-bootstrap-qnap-tsx09.sh uninstall

//如果有遇到某西軟體不能跑 需要再加上
chroot /share/HDA_DATA/optware /bin/bash

等他下載完所有套件 安裝完之後 以後要在這台機器上安裝軟體就方便啦
要知道所有ipkg的套件有哪些可以 可以輸入
ipkg list | more


接下來要安裝 SVN 只需要輸入
ipkg install svn

接下來跟上面一下 建立一個檔案庫 並且設定自動啟動
不過TS-209有一些保護的功能 東西不能隨便放 這裡選擇在/share/Public下
想知道更詳細去爬爬討論區的文吧
svnadmin create /share/Public/Repository/
svnserve -d --listen-host=0.0.0.0 --listen-port=X -r /share/Public/Repository/

最後 就是加到自動啟動的shell script中

mount /dev/mtdblock5 -t ext2 /tmp/config
cd /tmp/config
cat "svnserve -d --listen-host=0.0.0.0 --listen-port=X -r /share/Public/Repository/" >> autorun.sh
cd /
umount /tmp/config

重開機測試看看吧

安裝完SVN 加下來就是設定同步備份的部份 這已經介紹過了
所有詳細的步驟 可以參考 "SVN檔案庫備份與同步"來進行設定
基本上大同小異 頂多是從Windows的batch語法 換成Linux的shell
另外要記得 要給shell script的檔案加上 執行的權限

最後是非同步備份的部份 我寫了一個shell script來實做
最後把他加到crontab裡面讓他自動執行...
那原理跟之前提到的備份SVN的文章一樣
先把需要的部份hotcopy出來 使用hotcopy來取代dump的原因是
hotcopy才能保留一些檔案庫的設定檔 比dump的資訊更完整
接下來把所有東西壓縮起來 我使用的是7z 如果不想用他可以用基本的tar跟gz,biz2等等
最後用lftp把他傳到另一台電腦上保存

完整的 script file可以在這裡下載
解開後修改上方一些基本的參數之後就可以執行
除非你想更換7z到tar,gz... 更換lftp到ncftp等

那要傳進去的參數 目前就是到底要備份哪些東西
如果傳進一個目錄 會去遞迴搜尋哪些是檔案庫
如果傳進一個檔案 就會依照檔案每一行所指定的檔案庫來做
所以我在crontab內的作法 就會依照檔案庫的更新頻率的不同 來指定備份頻率 例如

00 06 1,7,13,19,25 * * root /root/Backup.sh /root/freqlist
00 05 4,16,28 * * root /root/Backup.sh /root/list
00 04 10,22 * * root /root/Backup.sh /SVNRoot

最後重新啟動cron或是重開機就ok啦

Script的部份 有空會在改改 把所有要設定的東西都寫成參數傳進去
就不用在修改Script本身 讓他更有彈性 不過目前可以用就好

希望這次設定可以稱久一點 讓我畢業之後還可以繼續用下去XD
這是我第一次在Linux的系統上架Server 也是第一次寫Shell Script
如果有任何錯誤或是不妥的 歡迎馬上告知
2007/06/14

[+/-] : SVN 檔案庫備份及同步

comments
以下是有關SVN備份及同步的工作記事 有關SVN的架設及使用請看這一篇


SVN Server端檔案庫備份


svnadmin hotcopy 原始檔案庫路徑 要備份目標路徑

例如

svnadmin hotcopy D:\SVNRoot\Proj1 E:\SVNBack\Proj1

另外 備份目標必須為空目錄
所以備份前需要先刪除舊有資料 或是建立新資料夾
可以使用windows所提供的批此檔及排程來自動備份
批次檔內容例如下方

@echo off

set SVN_BackUp=E:\SVNBackup
set SVN_ROOT=D:\SVNRoot
set SVN_BackUp_Dir=%SVN_BackUp%\%date:~0,4%%date:~5,2%%date:~8,2%

if not exist %SVN_BackUp% mkdir %SVN_BackUp%
if exist %SVN_BackUp_Dir% goto ALREADY_EXIST_DATE
mkdir %SVN_BackUp_Dir%
for /r %SVN_ROOT% %%D in (.) do @if exist "%%D\conf\svnserve.conf" svnadmin hotcopy %%~fD %SVN_BackUp_Dir%\%%~nD
goto END

:ALREADY_EXIST_DATE
echo 目錄%SVN_BackUp_Dir%已存在

:END

將上方內容存檔到D:\SVNRoot\BackUp.bat
並利用Windows排程 每天晚上10點備份

at 22:00 /every:s,m,t,w,th,f,sa "D:\SVNRoot\BackUp.bat"


不過這一個功能僅能本機端使用
可以注意到svnadmin後面的參數給的都是本機端的路徑
所以處理檔案也都不需要經過SVNService


SNV 檔案庫同步

在新版的SVN提供了SVNSYNC的程式 可以達成兩個檔案庫之間的同步
和上方備份不同的是 他可以經由遠端來運作 因此可以備份到不同電腦上
另外在備份之前不需要刪除舊有資料 因為他是同步
Subversion的官網上雖然有文章介紹如何使用
不過是針對Linux的環境下的說明...
那在Windows雖然很類似 不過要作一些修改

首先 要建立同步目標的檔案庫

svnadmin create DestRepository

然後設定DestRepository的Conf檔跟建立一個新的帳號 (例如"SvnSync")
並在來源檔案庫新增一筆一樣的帳號密碼
並且在hooks的目錄下建立一個新的檔案叫
"pre-revprop-change.bat"
檔案內容使用空白即可運作
不過這一個目標檔案庫有一個限制 他不應該被一般使用者Commit資料上去
也就是說應該只有svnsync可以對他作寫入的動作
應此建議將檔案內容修改為下列所述

@echo off

set repos=%1
set rev=%2
set user=%3
set propname=%4
set action=%5

if not '%user%'=='SvnSync' goto ERROR_USERNAME
exit 0
:ERROR_USERNAME
echo Only allow user SvnSync. >&2
exit 1

此動作是檢查使用者帳號是否為SvnSync (大小寫有分)
如果要不分大小寫 請將此行改為

if /I not '%user%'=='SvnSync' goto ERROR_USERNAME


接下來要對此檔案庫做初始化的動作 讓他知道要跟哪個來源作同步

svnsync init --username SvnSync --password XXX 目標檔案庫位址 來源檔案庫位址

這一個命令的目標跟來來源都是使用位址 因此可以使用本地端或是遠端路徑
例如

svnsync init --username SvnSync --password XXX file:///E:/SVNBackup/DestRepository svn://SVNServer/SourceRepository

注意 本地端位置中斜線的方向跟數量

最後就是同步的動作

svnsync sync --username SvnSync --password XXX 目標檔案庫位址

同樣的 我們可以寫一些批次檔來達成自動化的目的
方式是在來源檔案庫的hooks的目錄下 建立一個新檔案叫做
"post-commit.bat"
他會在來源檔案庫接受每一次的Commit之後啟動 內容為下

@echo off
svnsync sync --non-interactive --username SvnSync --password XXX svn://SVNServer2/DestRepository

這邊是備份到跟來源檔案庫不同的Server上
可以依據每個人不同的需求作更動...

結論是 新的1.4版中的svnsync實在很好用
上半段文章看看就好 使用hotcopy的方式實在是太浪費磁碟空間了
不過前提示 要先把伺服器換成1.4版或以後的版本
並且 目標檔案庫必須是使用1.4版以後的svnadmin所建立的

另外可以發現 寫一些批次檔放進hooks目錄中
可以達成蠻多功能的 有興趣可以網路上搜尋一下文章看看

希望此文章對有使用SVN並架設在Windows上的人有一些幫助

update
如有遇到同步失敗, 或是不同Thread同時要進行同步造成鎖定而錯誤
可使用下列指令解決鎖定

svn propdel svn:sync-lock --revprop -r 0 目標檔案庫位址
2006/12/30

[+/-] : 簡單 SVN (Subversion , TortoiseSVN)應用及設定

7 comments
SVN (Subversion) 是一套非常好用的 檔案 版本控制(Revision control) 系統
除了可以很方便的追蹤,交換,合併,比對檔案外,
更能保護檔案不會受到一些意外而讓心血的結晶損毀,
也可以讓團隊合作時,更加有效率。

以下簡單介紹 Subversion (Server端) 及TortoiseSVN (Client端)
在單人工作,及多人工作時的一些設定及用法,希望能幫助更多人上手

1.
在完全個人的環境下,在沒有多人共用及網路的需求下
其實不需要Subversion 去架設Server ,僅僅使用 TortoiseSVN 即可
可以在自己電腦上進行檔案版本的控制,
不過建議至少要兩顆以上硬碟,並將檔案庫及工作目錄分開放置
假設工作目錄為 C:\MyDocuments ,檔案庫目錄為 D:\SVN
首先先到 TortoiseSVN 的官方網站下載最新版軟體 並且安裝
建立好目錄後,在檔案總管 D:\SVN 當中 按下滑鼠右鍵
選擇 TortoiseSVN ->在此建立檔案庫 選擇原生檔案系統 按下確定
再來到 C:\MyDocuments 按下滑鼠右鍵選擇 SVN取出 (SVN Check Out)
在檔案庫URL中輸入 "file:///D:/SVN" (或是點擊 "..."按鈕直接選取)
按下確定完成第一次的Check Out
之後就可以在 C:\MyDocuments 目錄下進行工作
另外 記得 D:\SVN目錄要備份定時備份

2.
在多人工作或是在公司內、實驗室內做檔案管理時
架一台Server就是必要的工作了
以Windows為例 要架設Server實在是非常簡單
首先先下載 Subversion 並且安裝他 (預設路徑 C:\Program Files\Subversion)
在命令列環境下 下達命令
sc create "svnservice" binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service --listen-port 5678 --listen-host 0.0.0.0 -r D:\SVN" displayname= "SVN Service" depend= Tcpip
可以將 SVN 設為 Windows 的 Service 讓他每次開機自動執行
並且指定 D:\SVN 為預設的檔案路徑
以及指定 5678 為網路連線的Port (請自行更換)
到 控制台 -> 系統管理工具 ->服務 當中 找到"SVN Service"
把他設為自動 並且啟動之後 就可以開始使用 (請確定防火牆是否開啟)
如果 D:\SVN 還沒建立檔案庫 請使用 (1) 的方式
或是在命令列鍵入以下指令來建立檔案庫
svnadmin create D:\SVN --fs-type fsfs
而Client端的設定一樣 要先下載 TortoiseSVN 並安裝後
在你所選擇的工作目錄中 按下滑鼠右鍵選擇 SVN取出 (SVN Check Out)
並在檔案庫URL中輸入 svn://ServerIp:5678/
其中 ServerIP 為 你所架設SVN Server的IP (或是Domain Name)

3.
對於檔案庫 可以對他進行權限的控管
首先打開檔案庫中 conf目錄下的 svnserve.conf檔案
拿掉命令前的 # 結果為以下所視
[general]
anon-access = none #表示匿名者存取不能 若改為read表示可讀不可寫入
auth-access = write #表示登入者可以存取
password-db = passwd #存放帳號密碼的檔案
authz-db = authz #可對使用者分群組 以及對檔案庫中的目錄進行控管(非必要)


再開啟 檔案 passwd
並且依照 "帳號" = "密碼" 的原則輸入即可
請注意 這裡的密碼是明文 (和Apache的不一樣)

如要分群組 如要分群組請再打開 檔案 authz
以類似以下的方式進行設定 (請不要使用中文 XD)
[groups]
群組 = 使用者
群組1 = 使用者1,使用者2
群組2 = 使用者1,使用者3
群組3 = 使用者3,使用者4

[/]
@群組 = rw #群組擁有整個資料庫的存取權限
* = #其他人不能存取

[/目錄]
@群組1 = rw
使用者3 =
使用者4 = rw
* = r


4.
以上介紹的是所謂的單一檔案庫的方式
其實也可以共存多個檔案庫
例如 將 D:\SVN設為SVN Server的跟目錄 不過不在這裡建立檔案庫
在 他的子目錄建立檔案庫 例如 D:\SVN\Proj1
在客戶端存取時一樣只要加上路徑Proj1即可
建立多個檔案庫的優點是可以分散風險 避免當檔案庫損毀的危險
另外也可以使的檔案版本編號成長的慢一些 ^^
缺點就是 設定跟權限都要各自維護

5.
這是我使用SVN幾年來的一點點心得
不要將一些不該存的檔案放到檔案庫中
以程式設計為例 不要將*.o *.obj *.dll *.exe *.tmp等檔案上傳
這些除了有些是暫存檔外 有些可以利用其他檔案 經由簡單步驟所產生(編譯)
但是 相對的 *.sln *.vcproj (Visual Studio的專案檔)或是其他專案檔 就一定要保留
才能讓其他人也利用檔案庫中有的檔案 快速的產生結果
另外 也不需要將檔案壓縮起來之後 在放入檔案庫
檔案庫會自動幫你做檔案的壓縮
壓縮起來反而不利做版本之間的比對

要大幅度修改文件內容 或是要將原文件修改到另外一個用途
不需要先將原文件複製到另一個文件夾或是加一個.bak做區隔
反而浪費容量 也不易管理
直接使用SVN提供的 分支(branch) 或是 標記(tag) 功能即可

如果有一個文件會有多人要修改 尤其是 Word , Excel 這種文件
(存成二進位檔 非明文 的文件)
在開始修改前 要先將他鎖定 等修改完之後在解除
因為這類檔案 不像程式碼 或是一般txt 存成明文的文件
可以簡易的進行比對 分析差異 當你在修改時 有其他人已經修改並上傳
就會非常麻煩....

修改前最好先進行 更新 (Update)的動作 讓自己要修改的版本是最新的
修改完成後(測試後)也要馬上進行 上傳修改(Commit)的動作


6.
SVN本身還可以搭配Apache使用http / https 的協定
或是搭配 SSH 軟體 使用安全的加密通道來存取
不過這屬進階設定 就不在這裡討論
Subversion官方網站 http://subversion.tigris.org/
TortoiseSVN官方網站 http://tortoisesvn.tigris.org/
SVN Book(英文) http://svnbook.red-bean.com/nightly/en/index.html
SVN Book(中譯) http://svn.stu.edu.tw/svnbook/book.html

jedi.org 旅行必備、居家良伴、送禮自用兩相宜的「版本控制系統」http://jedi.org/blog/archives/004784.html
Jserv's blog 淺談版本控制系統 http://blog.linux.org.tw/~jserv/archives/001148.html
Seety 利用 SVN 進行版本控制 http://www.seety.org/technote/programming/svn_intro

7.
以上文章歡迎轉載 請保留文章完整並註明出處 JoStudio
有任何錯誤歡迎指正 感謝
 
Back to Top
This Site Power by JoStudio. Some Rights Reserved.