如何自动更新Subversion工作副本?

49

有人知道如何自动运行 svn update 吗?如果有人有脚本或类似的东西,能否给我展示一个例子?


你所说的“自动”是什么意思?更新命令应该在何时自动运行? - Fredrik Mörk
你将使用哪个操作系统来进行更新(Windows、Linux、MacOS等)? - Elijah
7
我不太建议使用自动更新。当你的修改与他人的修改发生冲突时,会出现一些奇怪的情况,但你的本地文件还是会被更新。请注意保持翻译内容的原意不变,同时使其更通俗易懂。 - B.E.
5个回答

109
我正在使用TortoiseSVN。在生产服务器上,我有一个定期运行以下批处理文件的计划任务。
CD C:\Program Files\TortoiseSVN\bin\
START TortoiseProc.exe /command:update /path:"C:\www\MyRepo\" /closeonend:0

希望这个能为其他人节省一些时间!


4
非常好的答案,谢谢。只是想给未来可能想要同时更新多个目录的读者一个提示,请查看我的问题(和回答):http://superuser.com/a/689155/264136 - sab669
2
好的,现在已经过去了4年,它为我节省了一些时间。谢谢! :) - alex
3
四年后再加一岁啦 :) - thclpr
2
+1 这太完美了。我只需要更新我的生产服务器。只要工作副本是干净的,我就不用担心冲突(因为我不在服务器上开发)。谢谢! - Milne
2
+1,对于一个新手来管理 Windows 生产服务器,这非常有帮助。 - will

32

我使用位于系统托盘中的SVN Notifier来通知我每次存储库更改时。我强烈推荐它。这意味着只有在需要更新时才进行更新!

或者你可以设置一个定时任务/定时作业,在适当的目录中每个小时/每天/每隔一段时间运行svn update


编辑:好的,请看一下这篇Microsoft文章,了解如何设置定时任务。

你需要一个名为svnUpdate.bat或类似的批处理文件,其内容如下:

cd C:/path/to/your/working/copy
svn update

安排定期任务,使其以您喜欢的频率运行(每小时运行一次似乎很合理)。

确保您安装了svn的命令行版本(我使用 SlikSvn),并且在PATH中可用(在命令窗口中键入svn并确保它显示'Type svn help...'或类似)。


2
批处理脚本将是最佳解决方案。 - Marko
1
你能否编写完整的更新脚本,因为我不知道要运行什么,也没有在我的安装文件夹中看到任何类似于更新的内容。 - Marko
命令“svn update”运行svn程序并告诉它进行更新。没有单独的“update”程序。在命令提示符中尝试键入svn update以检查它是否正常工作。 - Mark Pim
我使用这个批处理脚本来更新我的工作副本,每5秒钟执行一次。因为计划任务和cron只能每分钟运行一次脚本。\n:begin\nsvn update C:\data\localweb\development\ntimeout 5\ngoto begin\n其中\n表示换行。 - Lars Gyrup Brink Nielsen
你也可以这样写(而不是切换目录):svn update %path% - skofgar

16
@echo off

cls
echo == Initiating system instance variables...
echo. -- Setting the variables...

:: Here you need to make some changes to suit your system.
set SOURCE=C:\sauce\CURRENT
set SVN=C:\Program Files\TortoiseSVN\bin

:: Unless you want to modify the script, this is enough.

echo. %SOURCE%
echo. %SVN%
echo. ++ Done setting variables.
echo.
echo == Updating source from SVN
echo. -- Running update...
"%SVN%\TortoiseProc.exe" /command:update /path:"%SOURCE%" /closeonend:2
echo. ++ Done.

echo. -- Cleaning up...
set SOURCE=
set SVN=
echo. ++ Done.

如果你正在使用TortoiseSVN,那么上面的批处理脚本将很适合。否则,你可以修改它使用当前正在使用的任何SVN客户端。只需将其放入一个.bat文件中,根据需要运行即可。


这是我编写的一个更大的“构建、销毁和部署”脚本的相关部分,因此可能会有一些注释或回显需要修剪。 - varl
我应该将这个脚本复制到存储库文件夹中吗? - Marko
这很好,但我需要在我的项目中更新更改(而不是 SVN 版本)。 - Marko
2
你可以把这个批处理文件放到桌面上。将 SOURCE 变量(我使用的是 C:\sauce\CURRENT)修改为你检出主干的目录。SVN 变量我设置为 TortoiseSVN(一个 SVN 客户端)所在的安装目录。然后脚本会使用一些参数来告诉 Tortoise 运行 SVN 更新的目录,从而运行 TortoiseSVN 可执行文件。这样会用 SVN 仓库中最新的文件更新你的项目,而不是应用程序本身。 - varl
您可以轻松修改此脚本,以从您当前正在使用的任何SVN客户端运行更新命令。 - varl

6

2
注意:一旦我知道您的操作系统,我就能给您更详细的答复。
通用指导:
1. 永远不要更改本地存储库中的任何内容。 2. 阅读这个 AT 使用教程以了解如何在 Windows 命令行中安排计划。 3. 使用 AT 命令安排以下命令(假设您已经安装了命令行版本的 svn): svn update reporsitory_directory 4. 利润!

我需要一种方法,通过双击一个文件来运行更新。 - Marko
然后,您可以创建一个Windows快捷方式,执行svn update repository_directory。 - Elijah
看,我在我的存储库目录中没有可以运行更新的 .exe 文件。我可以给您我的存储库文件夹中所有文件的列表。 - Marko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接