我疯狂地在谷歌上搜索,试图找到解决方案 - 但没有太多运气!
我在本地 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也可能有效