2011-06-14 22 views
1

我是web developer.I編輯本地svn工作副本中的文件在我自己的機器上,我們的開發服務器是一個通過samba共享的磁盤,服務器的根目錄也是一個工作副本,我想要做的是使用客戶端svn post-commit掛鉤在開發人員提交一些代碼時自動更新服務器上的工作副本。我發現有兩個批處理文件可以正確地做到這一點,一個是使用subversion command,另一個是使用Tortoise SVN command,但問題是批處理文件更新整個工作副本而非更改的文件,這是非常緩慢的,往往需要一兩分鐘。所以我認爲它可能會更快,如果我只能更新更改的文件。或者,mybe是更好的批處理文件ssh到服務器,而不是通過桑巴直接更新?以及如何做到這一點?如何寫一個批處理文件來更新已經在服務器上提交的文件

對不起,我的英語不好,任何援助將不勝感激。

回答

1

您可以執行以下步驟:
1.使用是svnlook命令找出哪個被改變

svnlook changed REPOSITORY NAME 
  1. 獲取命令的輸出到一個文件中的文件。
  2. 動態讀取此文件並將其提取到SVN更新命令中。

我可以告訴你如何在Linux中做到這一點,但不能清除批處理文件。

1

我有一個類似的問題,但與Linux服務器託管SVN。也許你可以從這裏得到一些線索,並將其更改爲與Windows系統相匹配。

POST_COMMIT

#!/bin/sh 
wget http://localhost/update_svn.php 

update_svn.php

<?php 
$output = shell_exec('/media/disk3/velsvn/projects/hooks/svn_update_step1.sh'); 
echo "<pre>$output</pre>"; 
?> 

svn_update_step1.sh

ssh -i /media/d/mykey/id_rsa [email protected] /media/disk3/velsvn/projects/hooks/svn_update_step2.sh 

    svn_update_step2.sh 

#!/bin/sh 
cd /media/disk3/velsvn/projects/hooks 
rm -f filelist 
rm -f log 
whoami >> log 

    svnlook dirs-changed /media/disk3/velsvn/projects/ | sed "s/^..//" | awk '{ print substr($0, 9) }' >> /media/disk3/velsvn/projects/hooks/filelist; sed -i -e 's#^#/media/disk2/www/htdocs#' filelist; cat /media/disk3/velsvn/projects/hooks/filelist | xargs /usr/bin/svn up -N >> /media/disk3/velsvn/projects/hooks/log 

注意: 1./media/d/mykey/id_rsa是爲SSH訪問生成的密鑰。這確保系統不會等待用戶提供密碼以連接到SVN以及執行shell腳本。 2. POST-COMMIT文件和shell文件sh1和sh2被賦予+ x mod,以便它們可以被執行。

請隨時評論這篇文章,並提供一個更好看的解決方案。我現在所知道的是,這個解決方案有效:)

相關問題