0

我基本上想将 SVN 导出作为脚本构建过程的一部分,但不必每次都从头开始获取整个 repo,这很慢而且会占用带宽......更不用说测试脚本会很痛苦如果每次我们调整某些内容或在脚本中发现错字时它都会这样做。

是否有一种明显的方法可以将导出到现有目录,因此只获取不同的文件,并删除非 repo 文件,基本上给出干净的导出但以智能方式完成?

Windows 是首选,但我猜 Cygwin 是一个选项。

4

4 回答 4

3

我认为完成此操作的唯一方法是签出工作副本,然后更新和还原它。更新 WC 只会获得更改。

svn export 不知道更改了哪些文件,要比较文件,您首先必须获取所有文件。此外,很难从“导出”目录中获取已删除或重命名的文件。

于 2010-10-06T07:54:02.513 回答
2

签出工作副本,然后从工作副本中导出。然后,工作副本上的 SVN 更新将快速且轻松。然后您可以从工作副本中删除原始导出并重新导出。

所有需要带宽的操作都得到了优化。繁重的删除和重新创建与以前一样,但现在都是本地的,所以应该快得多。

此外,您可以选择在导出的工作副本中进行更改,但您可能需要小心并考虑在 svn 更新期间发生冲突的影响。

于 2010-10-06T16:02:18.623 回答
0

我不确定我是否理解你的问题。改写它。我认为您希望定期更新 repo 本地副本。但是,您希望工作副本原始,以便生成的构建是干净的。考虑到这是您的问题,我建议您这样做。

据我所知,svn export 可能不是最好的选择。因为 svn export 的目的是获取 svn repo 的未版本化工作副本。由于它是无版本的,svn 客户端不会真正知道它必须从哪里开始更新。

我能想到的最好的选择就是这个。在某个位置签出 repo 的副本(本地副本,LC)。此 LC 应在构建过程中更新。在不同的位置制作 LC 的副本并将其用于执行构建。以下是您需要的命令

1. svn update <arbitrary path>(in the working copy)
2. copy <arbitrary path> <build path>
3. find <build path> -type 'd' -name '.svn' (if you would like to remove the .svn hidden files, but they are not going to really hurt the build process)

从构建过程时间中消除复制时间的一些选项

  1. 如果您想在构建过程中节省复制时间,您可以在每次构建之后执行此复制操作,并在构建之前更新副本(假设 .svn 文件夹被保留)。

  2. 在 linux 上,两个文件夹可以使用 rsync 保持同步。可以制作构建副本以反映原始副本中的更新。

  3. 在 Windows 中,有一些工具可以实现上面建议的同步。我没有使用它们,但我会为您提供链接以自己尝试。
    http://lifehacker.com/326199/synchronize-folders-with-synctoy-20 http://www.techsupportalert.com/best-free-folder-synchronization-utility.htm

于 2010-10-06T17:29:08.530 回答
0

Another option is to use checkout and revert / update but also use something like the SharpSvn library to make a script that will delete non-source controlled files. This way build artifacts like compiled code will be removed and the versioned files will be returned to base state by the revert / update.

If you have a lot of directories and files this scanning could be slow, but if you are confident about what directories will contain build artifacts would can just scan those.

于 2010-10-13T19:24:15.070 回答