2010-10-06 101 views
0

我基本上希望将SVN导出作为脚本构建过程的一部分,更不用说每次我们调整一些东西或在脚本中发现一个错字时,如果它能做到这一点,就会让测试脚本在背后感到痛苦。使SVN工作文件夹与存储库版本相同

是否有一种显而易见的方式来执行导出到一个现有的目录,因此只有不同的文件被提取,非回购文件被删除,基本上给出了一个干净的导出,但以一种聪明的方式完成?

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

回答

3

我认为完成这件事的唯一方法是结帐工作副本,并更新&恢复。更新WC只会获得更改。

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

2

签出工作副本,然后从工作副本中导出。 工作副本上的SVN更新将很快并且带切换指示灯。 然后您可以删除原始导出并从工作副本中重新导出。

所有带宽饥饿操作都进行了优化。重度删除和重新创建与以前相同,但现在全部是本地的,所以应该快得多。

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

+0

从本地WC出口只会考虑SVN文件,或者WC中是否还有其他东西会被复制? – 2010-10-06 19:22:12

+0

export命令只会查看svn控制下的文件,忽略其他所有文件。 – 2010-10-15 16:17:26

0

我不确定我是否理解你的问题。改写它。我想你会希望定期更新本地仓库的副本。然而,你会希望工作副本原始,使得生成的构建是一个干净的。考虑到这是你的问题,我会建议。

据我所知,svn export可能不是最好的选择。因为svn导出的目的是获取svn repo的未版本化的工作副本。由于未版本控制,svn客户端并不知道从何处开始更新。

我能想到的最好的选择是这个。在一个位置签出回购(本地副本,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

0

另一种选择是使用校验和恢复/更新,但也使用类似SharpSvn库制作一个将删除非源代码受控文件的脚本。通过这种方式,编译代码等构建工件将被删除,版本化文件将通过还原/更新返回到基本状态。

如果你有很多目录和文件,这个扫描可能会很慢,但是如果你对什么目录将包含构建工件有信心,可以只扫描那些。

相关问题