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

星期五, 12月 21, 2012

Upgrade Subversion to 1.7 in CentOS5

也忘了是從什麼時候開始,在更新時,就一直遇到 subversion-perl 無法升級的問題,說需要 subversion 1.7,可是 CentOS 裡包的是 subversion 1.6,而這個 subversion-perl 是 rpmforge 提供的。
拖了好久,在更新時都以 --skip-broken 避開,可是日子久了,總是會覺得這樣很麻煩,決定還是設法把 subversion 升級到 1.7。當然自己編譯當然是可以,但上上策當然還是有人打包最好,所以上網搜索了一下,就發現有人問,而答案是利用 WANdisco 提供的 yum repository。WANdisco 比較麻煩的是,如果你要下載,網站會要求你輸入資料,然後才寄給你 .repo 檔案。收到 .repo 檔案,就放在 /etc/yum.repos.d ,接著執行 sudo yum update 就可以了。

星期五, 9月 09, 2011

git support in Visual Studio 2010

因為用 git 管理源碼,在切換 Visual Studio 跟 Command Prompt 之間,頗為麻煩,就想說,應該是有人寫了 Visual Studio 的 git 擴充套件了吧~

進 [Tools][Extension Manager] 一找,果然已經有人寫了,主要有兩個:Git source control provider 跟 Git Extensions。Git source control provider 主要是一個給 Visual studio 用的介面,你可以設定實際上以哪個軟體去作 git,例如:msysgit、git extension、tortoise git...等等,所以容量不大,小小的。試用結果還算可以,唯一的缺點就是更動較多檔案時,會導致 Visual studio 重啟動。

Git extensions 我就沒安裝了,因為我已經裝了 msysgit。目前是以 Git source control provider 跟 Command prompt 交互使用中。

星期三, 7月 14, 2010

ChangeLog and svn2cl

目前大部分的開放原始碼專案都是遵從 GNU 的Changelog 格式,基本上寫起來不難,只是有點煩。

所以有的開發工具,例如 monodevelop (Version Control Screencast),甚至把你 commit 的格式也固定下來,讓你省掉許多功夫。

好吧,其實只是我今天突然想到以前有用過 cvs2log 這個 perl script,還不錯用,可以直接把 cvs 裡的 log 轉出來成 Changelog,所以,就想到 svn 應該有類似的工具,之前好像有用過,但我忘了。於是我就用 svn2log 去找,嘿,當然有這工具,可是這工具的網站已經連不上了。我只好退而求其次,用 apt-cache 找找,但也沒找到,只是有 subversion-tools 這個 package。裝起來試試看吧,裏面有不少東西,有一個小程式叫作 svn2cl,試了一下,果然這就是我要的東西。

要使用 svn2cl 來產生 Changelog 的話,在你 commit 時,log 就不需要加什麼格式了,就儘可能地在一行之內把 log 寫完,然後不要一次修改很多檔案,這樣產生出來的 Changelog 就會很不錯了。svn2cl 有相當多選項,甚至可以產生 html、只產生某段期間的 log...等,有時間再來研究看看。

星期五, 1月 08, 2010

viewvc 出現 ImportError: DLL load failed

環境:
  • Apache 2.0.x
  • mod_python 3.3.1
  • python 2.5.4
  • Subversion 1.5.6
  • svn-python 1.5.6
  • viewvc 1.0.7


查了好久,原本以為是 PATH 問題,手動在 viewvc 的 mod_python.py 裡加上 sys.path.append( r"c:\program files\subversion\bin" ) 也沒有用。

後來才爬到這篇文:#6739 (trac svn-python mismatch with apache 2.2 under windows),說是要把 subversion 的 dll 複製到 Apache 的執行目錄下。
查了 Apache 的執行路徑,發現真的有重複的 dll:
  • libapr.dll
  • libapriconv.dll
  • libaprutil.dll
  • libeay32.dll
  • ssleay32.dll
,於是備份之後,再把 subversion 下的這些 dll 複製過來,重新啟動 Apache 就解決了。

星期四, 12月 03, 2009

svndiff

想不到 svn 要用 --diff-cmd 才能指定用哪個 diff,因為不想每次打 svn diff --diff-cmd 這麼長的指令,就寫成了 script。既然要寫成 script,那乾脆再簡化,如果不帶參數,就自動帶出所有有更動/衝突的檔案,讓我來挑選哪些要比對。


#!/bin/sh
# Dependencies: zentiy subversion awk meld
if [ -z $1 ]; then
FILES=`svn status | awk '/^[MC]/{print $2;}' | zenity --list --width=600 --height=400 --separator=\ --checklist --title "The files which modified/conflict" --text 'Please select files' --column '' --column 'Files'`
else
FILES=$@
fi
for FILE in $FILES; do
svn diff --diff-cmd /usr/bin/meld $FILE
done
exit 0

星期二, 9月 08, 2009

quilt

今天終於試用了 quilt,這是一個可以管理 patch 的工具,最早由 Andrew Morton 的一些 script 而來。

專案本來就有寫一些 script 來作 apply 的工作,只是,在想要倒回去或向前的時候,會變得非常麻煩!用 quilt 的話,可以方便的向前或向後。

因為已經有 patch 了,所以施作的方法很簡單,先 import,再 push。


quilt import patch01
quilt push
quilt import patch02
quilt push


之後就可以用 pop 往回推,或用 push 繼續往前了。

小記:坦白說,本來想放棄直接用 git 來作的...因為剛好在看 ProGit,覺得 git 或許會更適用也不一定,不過只是想簡單地往前或往後測試 patch,用 quilt 應該就夠了。

參考資料:

星期二, 7月 28, 2009

在 Ubuntu 9.04 使用 svk 出現 Can't locate Time/Progress.pm

在公司正想用 svk 把 monodevelop source code 拉回來時,發現有 Can't locate Time/Progress.pm 訊息,然後就停止運行了。
Launchpad 找了一下,發現已經有人回報了:Bug #317487 in svk (Ubuntu): “2.2.1 needs Time::Progress”,後續的回覆裡,也提供了好幾個 workaround,我選擇直接修改 Notify.pm,因為以後 apt-get upgrade 時,新檔案會把舊檔案覆蓋掉。

星期四, 6月 18, 2009

[Note]cvs diff with meld

公司還在用 CVS,Windows 下有 wincvs 這個方便的軟體,Linux 下,我還是習慣用 console 介面,console 介面下,很多事情就要自己來了。

wincvs 可以選用自訂的軟體來比對。但在 console 下,只能用 cvs diff,cvs diff 的話,只會列出 diff 的結果,沒辦法以視覺化的方式呈現比對結果。

所以只好刻一個,簡單的說就是利用 cvs update -p -r(revision) 將結果輸出到暫存檔,再用 meld 來比對這暫存檔與目前檔案:

#!/bin/bash
# author: elleryq
# version: 0.1
# distro: ubuntu
# dependency: cvsnt

if [ ! -e $1 ]; then
echo "$1 is not existed, run 'cvs update $1' first!"
exit -1
fi

[ -z $DIFF ] && DIFF=meld

function usage() {
prog=`basename $0`
echo "Usage:"
echo " $prog filename revision"
exit 0
}

[ -z $1 ] && usage
if [ -z $2 ]; then
revision=`cvs log $1 | grep head | awk '{print $2;}'`
else
revision=$2
fi

tmpfile=/tmp/$1.$revision
cvs update -r $revision -p $1 > $tmpfile
$DIFF $tmpfile $1
rm -f $tmpfile

exit 0


你可以自訂 diff 軟體,只要設置好 DIFF 這個環境變數即可,預設是 meld

星期五, 11月 14, 2008

[scm]svk mirror 錯誤

如果你在 svk mirror 時,出現類似 "xxx is not a mirrored path." 或 "xxx 不是一個映射路徑。" 的錯誤時,請使用 svk propedit svm:mirror // 指令進行編輯,將有問題的路徑移除之後,就不會有問題了。

解法參考自:

星期二, 3月 18, 2008

[Note]VisualSVN Server

想到可以來介紹一下這個:VisualSVN Server
讓我想想~記得應該是去年年底的時候,不知在哪兒逛到的~
原本以為會不會跟VisualSVN一樣,是個商業化的產品,後來看過以後,才知道並不是。

言歸正傳,VisualSVN Server骨子裡其實就是Apache HTTP Server+Subversion,另外再加上VisualSVN製作的一個簡單管理介面。
如果你覺得自己手動安裝 Apache HTTP Server+Subversion很麻煩而你剛好又不想用 Linux 的話,不妨試試看這個,我自己試過了,如果你沒有要綁什麼特別的認證機制(如 SSPI)的話,這個軟體可說是相當地方便。

p.s. VisualSVN是一個給 Visual Studio 用的 plugin,讓 Visual Studio 也能直接以Subversion來作代碼管理。

星期三, 1月 31, 2007

[Note]cvs2svn 實戰

我主要是參考這篇:HOWTO: smooth CVS to SVN migration (and back again)
基本上步驟還真的是...很簡單。

目前我先在Ubuntu上試驗,想說先搞定之後,再到 Windows server 上試試看。
首先得安裝cvs2svn
#sudo apt-get install cvs2svn

又,因為 Windows 上用的是CVSNT,我再安裝了CVSNT(是的,Ubuntu有包進去):
#sudo apt-get install cvsnt


接著把 Windows 上的 CVS Repository (除專案目錄之外,CVSROOT目錄也要!這是我踩到的第一個雷,如果你是整個搬,就不會有這困擾。)複製到 Linux 機上的 /work/cvs 放著,然後切換到該目錄下之後,輸入:
#cvs2svn -v -s /svn/my_new_project my_project

  • -v 表示 verbose
  • -s 指定 svn repository 位置,這邊不需要特別先執行 svnadmin create 去建立,cvs2svn會自動建,如果你已經有一份建好的,那麼你得加上 --existing-svnrepos
  • 最後是 cvs repository 位置


cvs2svn就開始跑啦~
過沒多久,cvs2svn告訴我:

ERROR: The command '['co', '-q', '-x,v', '-p1.1', '-kk', 'my_project/aaa/bbb/si_template,v']' failed with exit status: 1
and the following output:
co: my_project/aaa/bbb/si_template,v:28: unknown character `_'
co aborted


這個問題卡了我很久,我找不到原因。後來找到這篇討論串:error encountered with co: unknown character '_',最後解法是使用 --use-cvs,也就是不要用 rcs 指令去處理 CVS repository,改用 cvs 指令去處理。

用了這參數以後,原本以為這下就都搞定了,但天不從人願,cvs2svn告訴我另外一個噩耗:
ERROR: The command '['cvs', '-q', '-R', 'co', '-r1.1', '-p', '-kk', 'my_project/my_project.mak']' failed with exit status: 1
and the following output:
cvs [checkout aborted]: Cannot check out files into the repository itself


這問題又再次卡了我很久,我甚至去 trace cvs2svn 的 code...後來發現這完全是因為我的愚蠢所造成...反覆閱讀CVS--Concurrent Versions System - Troubleshooting之後,我終於知道原因,原來我不可以在 /work/cvs 下執行cvs2svn
於是我切到 /work,然後再執行一次就行了。最後指令如下:
cvs2svn --use-cvs -v -s /svn/my_new_project /work/cvs/my_project


參考資料:
後來整個弄完以後又發現的另外一份參考資料~冏: