我想创建一个包含目录子集并排除所有 subversion 文件的代码分发存档。我希望将文件添加到存档中,并使用根文件夹来标识发行版本,这样当解压存档时,它将使用此根文件夹(即 myAppV1.3)
我找不到这个的“开关”,所以我现在必须将所有内容压缩(使用 7zip 排除功能过滤掉我不想要的文件),然后将其解压缩到我指定的文件夹中。然后再次将整个文件夹压缩。
我当前使用的三步流程的示例:
c:\dev\myApp>7za -xr!?svn\* a myApp_temp.zip @listOfFilesInRelease.txt
c:\dev\myApp>7za -omyAppV1.3 x myApp_temp.zip
c:\dev\myApp>7za a myAppV1.3.zip myAppV1.3
有没有更优雅的方式来做到这一点?
答案1
根据 Johannes Rössel 提供的信息和启发(基本上就是压缩应用程序不支持我尝试做的事情),我想出了一种更优雅的方法来解决我的具体情况。虽然这不能解决存档中命名的根文件夹问题,但它可能会为寻找答案的人提供一种不同的方法来看待他们自己的问题。
我解决 3 步归档过程的解决方案是将前两个步骤用源代码控制签出(通过标签)替换到命名文件夹中。
这是一个更加优雅的解决方案,我应该首先解决这个问题(因为它可以确保最终分布与源代码控制中的内容相匹配)。
答案2
我所知道的几乎所有压缩格式或处理它们的应用程序都是这样。不过,看看 ZIP 文件格式,我认为可以理论上是可行的。但显然,实施这一计划的动力并不大。
但为什么你一开始不包含该文件夹呢?
答案3
您可以分两步进行
- 将源代码从 subversion 导出到具有设置名称的目录中
- 使用 7-zip 打包该目录
svn 导出路径到存储库根目录名称
7za a 存档名称根目录名称
Root-dir-name 是您要将文件导出到的目录的名称。
在你的例子中你会这样做
svn 导出路径到存储库 MyAppV1.3
这将仅将项目的源代码导出到名为 MyApp1.3 的目录中,同时忽略所有 subversion 文件。之后使用 7-zip 创建存档。
7za 到 MyAppV1.3.zip MyAppV1.3
这将从您导出源的文件夹生成 zip 存档。存档将在名为 MyAppV1.3 的根目录中包含文件。当然,您可以使用 7z 作为扩展名以获得更好的压缩效果。
对于命令行 SVN 客户端我推荐SlickSVN。