边注

边注

我疯狂地在谷歌上搜索,试图找到解决方案 - 但没有太多运气!

我在本地 Windows XP 机器上运行 TortoiseSVN 和 Subversion。我对我的网站进行了更改并在本地提交了这些更改。然后我想将这些更改推送到实时网站。该网站托管在我们的专用服务器(Windows 2008 Server)上。

我已经与托管公司进行了交流,他们确认他们不支持 SVN,而且由于它是 Windows 机器,所以没有 SSH - 所以这不是一个选择。

是否有任何软件或方法可用于将我提交的更改推送回远程服务器?或者我必须使用 FTP 手动上传更改(我现在这样做,这很麻烦!)

谢谢任何信息!

答案1

边注

窗户盒有 SSH

提示

必须阅读并理解 SVN 书籍无论如何,如果你想使用 Subversion。第 5.3.2 章“实施存储库挂钩”告诉我们有关存储库(服务器端)钩子(你可以在你的仓库中使用钩子),后来,在“存储库钩子”讨论得更深入。您将在任务的提交后钩子中看到

由于您使用 TortoiseSVN,您还可以使用TortoiseSVN 客户端钩子(他们处理较小的事件集,因为与工作副本,不是存储库),也可以是 post-commit

无论如何,对于 deploy-hook,您必须编写非交互式(最好)脚本(普通的 bat 文件、PowerShell、exe......),它将/某些文件集/从您传输到最终目的地并在实时站点方面执行其他管理。

在规划阶段,你必须定义你想要(并且能够)遵循的部署策略

  • WC 状态与站点完全同步(逻辑更复杂,部署时间更长,因此停机时间也更长)
  • 仅对已更改文件进行哑副本(停机时间更少、部署前进行更多预处理、某些历史文物未清理且站点可能不是 WC 的完整镜像)

根据所选的策略,准备传输文件集的命令会有所不同,站点上的一组操作也会有所不同。

简短的摘要

TSVN Hook(比服务器更容易实现)

  • 完全同步
    • 创建 ExportDir
    • 将 WC 导出至 ExportDir
    • 连接到站点主机(FTP、SCP 等)
    • 禁用站点(?)
    • 删除站点树中的所有版本化文件(非本地数据)
    • 从 ExportDir 上传新的站点树
    • 启用站点(?)
    • 断开连接
    • 删除导出目录
  • 复制更新
    • 创建 ExportDir
    • svn log -q -v --limit 1使用(+一些获取完整本地路径的技巧)或>svn diff --summarize -r PREV:COMMITTED(+从列表 D /已删除/文件中排除)获取上次修订(现在提交)中受影响的文件列表
    • 将 fileleset 复制到 ExportDir
    • 连接到站点主机
    • 复制文件,覆盖旧文件
    • 断开
    • 删除导出目录

添加在

失物招领故事

我还没有准备好使用“在 Windows 中仅上传更改的内容”的方法(我很懒,只在需要时上传完整导出的 WC),但是有一些想法。

在这些例子中,我使用了我的 repo 的(部分)http://mayorat.ursinecorner.ru:8088/svn/Hello/trunk/,并将其检出到本地目录中z:\Hello\,任务是“尽可能使用纯 Windows 工具将上次提交的文件中更改的内容上传到 FTP”

  • 上次提交的文件

    z:\Hello>svn log -v -q -l 1

    r33 | lazybadger | 2012-02-28 16:10:41 +0600 (星期二,2012 年 2 月 28 日) 更改的路径:M /trunk/Hello.en.txt

  • 提取受影响文件的列表 - TBD(grep 作为最后的手段)

    /trunk/Hello.en.txt

  • 将文件名转换为本地路径 - TBD

我们svn info感兴趣的是两个字符串

URL: http://mayorat.ursinecorner.ru:8088/svn/Hello/trunk
Repository Root: http://mayorat.ursinecorner.ru:8088/svn/Hello

URL - 存储库根目录 = /trunk

我们将在其中添加 / 并从开头的文件名 /trunk/Hello.en.txt 中删除此子字符串,Hello.en.txt 是位于 z:\Hello 根目录中的文件

  • 将文件复制到 ExportDir(显而易见)
  • Cd 导出目录
  • 构建脚本,该脚本将在命令中使用 Windows FTP 客户端ftp(阅读 ftp 的 -s 参数)ftp -s:uploader -i -n ftp-host,例如

user user pass

cd /our/path

mput *.*

bye

  • 用户命令可以更改为使用 _netrc 技巧

  • mput,如果不递归工作,将被替换为 put、cd、lcd、mkdir 的集合

答案2

我一定不要重新发明轮子!

  • Perl 脚本(抱歉,Perl)Svn Ftp 部署可以为您完成部署工作

  • 进行最少的修改(以消除期望要求)svn2web也可能有效

相关内容