我的脚本是否必须更新svn服务器?

我的脚本是否必须更新svn服务器?,svn,Svn,我正在尝试使用脚本自动化从现有项目创建新项目的过程。我最初的想法是应该有两个脚本: 1:从svn存储库中签出一个现有项目,然后对其进行重命名(即从所有文件中的ExistingProjectName=>NewProjectName进行搜索和替换,然后“svn重命名”包含字符串ExistingProjectName的所有文件和目录) 2:用户检查编译等后,在存储库上创建新项目(例如,使用“svn switch”命令) 其想法是,在用户有机会进行检查之前,不应更改存储库 然而,有人向我指出了一个潜在的

我正在尝试使用脚本自动化从现有项目创建新项目的过程。我最初的想法是应该有两个脚本:

1:从svn存储库中签出一个现有项目,然后对其进行重命名(即从所有文件中的ExistingProjectName=>NewProjectName进行搜索和替换,然后“svn重命名”包含字符串ExistingProjectName的所有文件和目录)

2:用户检查编译等后,在存储库上创建新项目(例如,使用“svn switch”命令)

其想法是,在用户有机会进行检查之前,不应更改存储库

然而,有人向我指出了一个潜在的风险。运行#1后,本地工作副本仍与现有项目关联。在这个阶段不小心做出承诺的人会把现有的项目搞砸

有人能想出一些svn技巧来阻止用户在#1之后提交吗?即使看了文档,我也想不出什么

多谢各位

安迪


(如果无法停止提交,那么我们需要使用两个缺点中较小的一个,并编写脚本,以便在用户有机会检查之前更新存储库。)

可能的话,您可以向更改的文件写入一个特殊值,以指示状态。然后,使用svn提交钩子检查是否有人试图提交到错误的存储库…

您可能需要执行svn导出。

停止提交的技巧是在第一步中使用
svn export

然后,当更改准备就绪时,使用svn import

在svn中创建一个新分支,您可以使用svn copy命令。完成后,存储库中有2个项目,您可以随意修改其中任何一个

因此,如果您打算对项目进行svn重命名,为什么不进行分支,然后重命名文件(并更新内容)。工作完成了

另一种方法是签出现有项目,重命名并编辑它,然后将工作副本添加到svn。这将是“原子的”,并将阻止重命名显示在日志中


添加一个全新的分支与复制一样好,只是您没有从svn的“廉价副本”中获益,但是,当您进行重大编辑(和重命名!)时,这不是一个更好的方法吗?

不幸的是,如果您使用svn导出,您将无法获得项目的所有历史记录。当您提交时,svn将有效地将其视为一个全新的项目(关于旧项目中所有更改的信息将不存在)。不幸的是,如果您使用svn导出,您将无法获得项目的所有历史记录。当您提交时,svn将有效地将其视为一个全新的项目(关于旧项目中所有更改的信息将不存在)。如果脚本在编译失败时(即签出并重命名后)删除您的工作副本,则只能将其描述为“原子”脚本。如果工作副本仍然存在,那么用户仍然可以提交并打乱项目。另一方面,用户可能希望调试,因此删除工作副本将不受欢迎!从存储库中的一个副本开始,创建两个项目,这也是我们要解决的问题。我越想它,就越确信它是所有魔鬼中最小的。如果进程失败,就从服务器上删除分支。不必删除工作副本,因为由于分支不再存在,尝试签入该副本将失败。