乌龟SVN隐藏的_svn文件夹

13

当我需要上传一个网页解决方案到服务器时,它们特别令人讨厌。

有没有一种方法可以配置SVN,使_svn文件夹在我的工作目录之外? 如果没有,那么在只需要复制代码时如何处理它们是最好的方式?

更新:使用“svn export”命令存在问题,因为有些文件不在源代码控制下,但很重要,例如.dll文件、xml数据文件或数据库文件,这些文件不会被导出。因此,每次都需要从工作副本手动将它们复制到不同的子目录中。


1
因此,您可能需要考虑您的服务器环境设置;如果您具有shell访问权限,则可以通过svn up'ing并将_svn文件夹简单地htaccess'ing为非公共方式来处理事情,这可能是更容易的方法。 - Edward Z. Yang
为什么你有一些不在源代码控制下的文件?也许你应该创建一个项目标签,并将这些文件添加到标签中。然后导出标签。 - Rahul
先将项目导出,然后从导出的版本进行构建和部署。 - Brad Wilson
有一些文件不在源代码控制下。 我不明白。如果这些文件没有被源代码控制,它们就不会在Subversion中。如果它们不在Subversion中,当然也不会被导出。我错过了什么? - Berserk
@Bersek:它们被排除在源代码控制之外,因为我不想追踪它们的更改,例如数据库文件,但它们需要在受源代码控制的目录下。 - Santiago Corredoira
9个回答

26

目前无法配置SVN(或TortoiseSVN)使其在工作副本之外创建 .svn (或 _svn )目录。我相信 SVN1.6 路线图包括重新审视工作副本库。将管理目录放置在其他地方的能力可能会从这项工作中出现,但我只是在猜测。

您应该使用 “svn export” 命令来创建“干净”的工作副本副本(即不包含 _svn 目录)。此命令可从命令行客户端执行。

如果您使用的是TortoiseSVN,则可以右键单击工作副本,然后选择“导出…”。这将要求您选择导出文件的文件夹。或者,您可以右键拖动工作副本到一个文件夹(不是工作副本),然后 TortoiseSVN 将弹出上下文菜单;其中选项包括“SVN导出到此处”和“SVN全部导出到此处”,后者还会导出未受版本控制的文件


2
它现在已经在Subversion 1.7路线图上了;看起来会有一个主要的.svn。不确定它是否可以在1.7中配置为WC之外。 - Sander Rijken

17

使用 "svn export" 命令创建一个干净的目录结构。


“导出”在TortoiseSVN上下文菜单中,我相信当你用鼠标右键拖动一个版本化的文件夹到另一个文件夹时,它会提供将其导出到该文件夹的选项。 - Joeri Sebrechts

12

Robocopy 部署...

robocopy {source} {dest} /MIR /XD _svn /XD .svn

4
在TortoiseSVN中,您可以右键单击工作副本并将其拖到其他位置。当弹出菜单出现时,选择“SVN Export Here”。(这需要检查工作副本中的所有代码,因为导出将来自主干而不是工作副本)
有关详细信息,请参见以下资源:
- http://tortoisesvn.net/most-forgotten-feature(关于右键单击+拖动上下文菜单) - http://tortoisesvn.net/node/343(关于取消版本控制svn工作副本)。如果使用此方法,我认为您未经版本控制的文件将保留在文件夹中,但我没有尝试过...

3
如果您使用nant脚本来启用部署到Web服务器,则在复制文件时,它有自动排除的_SVN和_SVN / **。nant将通过其复制任务过滤掉许多不需要的文件,包括:
- ** / *〜 - ** /#*# - ** /。#* - ** /%*% - ** / CVS - / CVS / - ** / .cvsignore - ** / .svn - / .svn / - ** / _svn - / _svn / - ** / SCCS - / SCCS / - ** / vssver.scc - / _vti_cnf /
您可以在此处阅读有关NANT的更多信息:NANT Home

2

对于来自Isak Savo的解决方案,我给予+1的支持。

您可以执行XCOPY并排除“/svn”文件夹:

XCOPY %1 %1_deploy /EXCLUDE:C:\ExcludeSVN.txt /E /C /I /F /R /Y

ExcludeSVN.txt的内容:

/_svn

实际上,如果您想上传到Web服务器,则您的排除文件可能包含更多内容:

  • .pdb
  • .cs
  • .resx
  • .csproj
  • .sln
  • .webinfo
  • .bak
  • .sql
  • .zip
  • .vspscc
  • .vssscc
  • .scc
  • \Web.config

警告:如果您排除.cs文件,则必须在之后重新复制.css文件。


我知道这是一个旧帖子,但你可以使用.cs\来排除.cs文件而不是.css。 - triniMahn

1
在Windows中,真正的肮脏方法是:创建项目的副本,打开资源管理器,导航到副本所在的目录,并查找以_svn结尾的所有内容。搜索完成后,选择所有内容并点击删除。
呃!但它确实非常有效。

0

如果你想在Windows中删除所有名为.svn的子文件夹 那么可以创建一个批处理文件,内容如下:

for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *.svn') do (
rd /s /q "%%i"
)

将其保存在文件del_All_Dot_SVN_Folders.cmd中。运行它。完成。

感谢http://www.axelscript.com/2008/03/11/delete-all-svn-files-in-windows/

请记住,上述代码具有 .svn,而链接中的代码仅具有 *svn,因此最好使用 .svn 以避免意外产生不良影响。


0

我们使用CruiseControl和robocopy来创建您的代码库的干净副本。

 <exec>
        <executable>C:\Archivos de programa\Windows Resource Kits\Tools\robocopy.exe</executable>
        <buildArgs>E:\CruiseControl\yourproject\Code\trunk\ E:\wwwroot\yourproject *.* /E /XX /XA:H /XO /NDL /NC /NS /NP /XF "*.cache" "*.designer.cs" "*.sln" "*.msbuild" "*.csproj" "*.PDB" "*.user" "*.designer" /XD .svn App_Code obj Properties</buildArgs>
        <buildTimeoutSeconds>60</buildTimeoutSeconds>
        <successExitCodes>1,0</successExitCodes>
 </exec>

/XF和/XD参数可以排除您不想上传到生产环境的文件和目录。

您可以在这里找到有关robocopy的更多信息。


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