1

私は Web 開発者です。自分のマシンでローカル svn 作業コピーのファイルを編集します。開発サーバーは samba を介した共有ディスクであり、サーバーのルート ディレクトリも作業コピーです。開発者が何らかのコードをコミットするたびに、サーバー上の作業コピーを自動的に更新するためのクライアント側のsvn post -commit フック。2 つのバッチ ファイルがこれを適切に実行できることがわかりました。指図、しかし問題は両方のバッチファイルが変更されたファイル以外の作業コピー全体を更新することであり、これは非常に遅く、多くの場合1〜2分かかります。または、バッチファイルをサーバーに ssh して、samba 以外で直接更新する方がよいでしょうか?また、その方法は?

私の下手な英語で申し訳ありませんが、どんな支援も大歓迎です。

4

2 に答える 2

1

同様の問題が発生しましたが、SVNをホストしているLinuxサーバーに問題がありました。ここから手がかりを得て、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 velsvnuser@localhost /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に接続し、シェルスクリプトを実行するためのパスワードを提供するのを待たないようにします。2. POST-COMMITファイルとシェルファイルsh1およびsh2には、実行できるように+xmodが指定されています。

この投稿にコメントして、見栄えの良いソリューションを提供してください。私が今知っているのは、このソリューションが機能することだけです:)

于 2011-08-17T06:55:32.550 に答える
1

次の手順を実行できます。
1. svnlook コマンドを使用して、変更されたファイルを見つけます。

svnlook changed REPOSITORY NAME  
  1. コマンドの出力をファイルに取得します。
  2. このファイルを動的に読み取り、SVN Update Command にフェッチします。

Linux でこれを行う方法については説明できますが、バッチ ファイルについては明確ではありません。

于 2011-07-30T04:33:01.727 に答える