Svn状态通过ftp输出到远程服务器?

Svn状态通过ftp输出到远程服务器?,svn,ftp,perl,Svn,Ftp,Perl,这是问题的定义; 我的工作副本中有一些本地更改。我可以通过svnst命令列出它们。示例输出 M admin/controller/common/forgotten.php M admin/controller/sale/contact.php A + admin/model/tool/mail.php D catalog/view/theme/default/template/mail/order.tpl D catalog/view/th

这是问题的定义; 我的工作副本中有一些本地更改。我可以通过svnst命令列出它们。示例输出

M       admin/controller/common/forgotten.php
M       admin/controller/sale/contact.php
A  +    admin/model/tool/mail.php
D       catalog/view/theme/default/template/mail/order.tpl
D       catalog/view/theme/default/template/mail/recommend.tpl
A  +    mail_template
我有一个远程服务器,我想通过ftp将这些更改推送到远程服务器进行测试。如果可以的话,我会把它们交给trunk

现在,我通过在ftp客户端中逐个选择这些文件来查找和上传这些文件。但有时这非常耗时,尤其是当更改的文件要多得多时


所以我希望这个动作可以通过脚本或工具自动完成。有什么建议吗?或者我应该为这个问题编写一个小应用程序吗?

这里有一些可以使用的东西。如果您不喜欢perl,它至少可以让您知道在自己的脚本中应该做什么。我试着把它写得可读

使用此调用启动脚本
svn status | perl scriptname.pl

脚本逐行读取svn状态的输出。它检查这些行是否描述了添加、修改/替换或删除的元素,并将该元素的路径添加到相应的列表中。然后它尝试连接到FTP服务器并更改那里的元素

FTP部分完全未经测试

我还没有测试SVN在添加包含子元素的文件夹时的功能。也许您必须自己将所有子元素添加到
@filesAdded

#/usr/bin/perl
使用Net::FTP;
严格使用;
使用警告;
我的$username=“username”;
我的$password=“password”;
my$host=“example.com”;
我的$port=20;
my$path=“/some/path/”;
我的@files加上;
修改了我的@files;
删除我的@files;
while(){
咀嚼;
如果(/[A]……(.+)/){
推送@filesAdded$1;
}elsif(/[MR]……(.+)/){
推送@filesModified,$1;
}elsif(/[D]……(.+)/){
推送@filesdelected,$1;
}
}
打印“===========================================================================================\n”;
打印“filesAdded[”(标量@filesModified)。“]=”(连接“,”,@filesModified)。“\n”;
打印“filesModified[”(标量@filesModified)。“]=”(连接“,”,@filesModified)。“\n”;
打印“filesDeleted[”(标量@filesDeleted)。“]=”(加入“,”,@filesDeleted)。“\n”;
打印“==============================================================================================\n”;
{
my$ftp=Net::ftp->new(主机=>$Host,端口=>$Port)或die“无法连接到$Host:$@”;
$ftp->login($username,$password)或死“无法登录”、$ftp->message;
$ftp->cwd($path)或die“无法更改工作目录”,$ftp->消息;
对于我的$fileAdded(@filesAdded){
如果(-f$fileAdded){
$ftp->put($fileAdded);
}elsif(-d$fileAdded){
$ftp->mkdir($fileAdded,1);
}
}
对于我的$fileModified(@fileModified){
$ftp->put($fileModified,$fileModified);
}
对于我的$fileDeleted(@fileDeleted){
如果(-f$fileDeleted){
$ftp->delete($fileDeleted);
}elsif(-d$fileDeleted){
$ftp->rmdir($fileDeleted,1);
}
}
$ftp->退出;
}
打印“===========================================================================================\n”;

您能否澄清为什么要提交后钩子?因为需求是只有在远程服务器上测试了所有更改后,才提交svn中的本地更改。