顯示具有 Subversion 標籤的文章。 顯示所有文章
顯示具有 Subversion 標籤的文章。 顯示所有文章

2011/07/23

Can't remove 'db/transactions/1-1.txn'

老闆交辦一個新的案子,按慣例,先匯入 Subversion 好讓組員可以協同開發。原廠給的 SDK 接近 3G,很好奇要花多少時間才可以完成匯入? 半小時後還在進行... 卻猛然想起,svn import 時忘了加 --no-ignore,這會讓 svn 跳過 .a 和 .o 之類的檔案。只好按 ^C 煞車重來。

第二次重作忘了量時間,但一兩個小時跑不掉。看起來似乎 import 成功,但卻有一個錯誤訊息:
Can't remove 'db/transactions/1-1.txn'
svnadmin lstxns 去看,確實有一個 outstanding transaction,而且用 svnadmin rmtxns 也砍不掉。只好手動去砍掉 db/transactions/1-1.txn 這個目錄。

這樣做似乎不影響 Subversion 的使用,但連結的 Trac 好像受到影響而不能使用。解決方法是用以下指令重新同步 Trac 的 repository 資料 (也要等很久):
trac-admin $YOUR_TRAC_ENV repository resync ""



2009/12/24

Colorsvn 讓 SVN 一目了然

就像 colordiff 一樣,小小顏色卻能大大提高 diff 檔的可讀性。習慣用命令列 svn 指令的人應該會喜歡 colorsvn (http://colorsvn.tigris.org):


Ubuntu 的正式套件目前還沒有收錄 colorsvn,可用以下方法安裝:
  1. 到以下位置下載 .rpm 檔:
    http://www.console-colors.de/index.php?n=ConsColors.Downloads
  2. 利用 alien 來安裝 .rpm 檔:
    sudo alien -i colorsvn-0.3.2-1.noarch.rpm
  3. 在 .bashrc 增加 alias svn='colorsvn'
PS 1: 若你安裝完之後看不到顏色,請檢查是否有 `/etc/colorsvnrc` 或 `~/.colorsvnrc`。若沒有,可以下載 colorsvn 的 tarball,裡面有個 colorsvnrc-original,可以拿這個檔案出來用。

PS 2: 裝了 colorsvn 之後,svn diff 一樣沒有顏色,需要搭配 colordiff

2009/11/18

Subversion 的 Log

使用 Subversion 之類的 version control system 時,commit log 是非常重要的一項資訊。在你追查歷史時,可以幫助你回復記憶或幫助別人迅速理解 changeset 的目的。

但人吃五穀雜糧長大,打字難免會錯。因此,就有修改 commit log 的需求產生。Subversion 安裝預設是無法修改 commit log 的。以下是開放此項功能的方法 ($REPOS 代表 repository 的目錄):
cd $REPOS/hooks
mv pre-revprop-change.tmpl pre-revprop-change
chmod +x pre-revprop-change
若設定正確,就可以用以下指令來修改任一版本的 log:
svn pe -r 1234 --revprop svn:log $REPOS

svn ps -r 1234 --revprop svn:log "New commit log" $REPOS
若你恰好跟我一樣,也用 Trac 搭配 Subversion 時,正確的 log 更重要。因為 log 可用來搜尋 changeset。不過 Trac 上的 log 是你 commit 時,Trac 偷偷複製的。你改了 Subversion 的 log,Trac 並不知道,所以 Trac 上的 log 還是舊的。

解決方法是要求 Trac 重新校正 log:
# Trac 0.12 以前
trac-admin $PROJENV resync 1234
# Trac 0.12 及以後
trac-admin $PROJENV repository resync "" 1234
其中 $PROJENV 是 Trac 的 environment 位置;1234 是 revision number,若你改了很多 log,省略這個參數就可以全部一起校正。

每次手動校正 log 很麻煩,管理也不方便。所以可以將上述指令寫在另外一個 Subversion 的 hook script -- post-revprop-change:
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"
TRAC_ENV="..."

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then
PYTHON_EGG_CACHE=/tmp trac-admin $TRAC_ENV repository resync "" $2
# 若你的 Trac 比 0.12 版舊,請改用以下這一行
# PYTHON_EGG_CACHE=/tmp trac-admin $TRAC_ENV resync $2
exit 0;
fi
注意!上面的 TRAC_ENV 要設定到對應此 repository 的 Trac environment。