这个存储库有很多很多 GB,其中 99% 是我不需要的。我想做的是仅获取/更新 *.js *.css *.html.doc和 *.pdf 文件。其余的都是巨大的,我想留在那里,而不是浪费时间和磁盘空间,因为我不需要查看它们,而且我永远不会更改它们。
我意识到 svn:ignore 功能不是我需要的,它只与签入的内容和忽略的内容相关。我还知道 SVN 中没有我可以利用的参数或设置来执行我想要的操作。
但我发现,如果我右键单击 SVN 文件夹并选择“检查修改”,然后在下一个对话框中选择“检查存储库”,那么我会得到我没有的文件的完整列表。然后,将“扩展名”添加到列标题并按扩展名排序就很容易了。然后我可以向下滚动并找到分组在一起的所有 .js 文件。
这就是我的#fail 发生的地方。如果我右键单击ONEJS 文件并选择 UPDATE,然后它将删除该文件并创建支持该文件所需的子目录层次结构。这正是我想要发生的事情。此时我跳了起来,以为我已经找到了我需要的东西。这并不是一个麻烦的过程,我可以忍受。然后我选择所有 JS 文件并右键单击。我注意到的第一件事是出现的上下文菜单选项较少,这很麻烦。但更新选项就在那里,所以我不太担心。我选择“更新”,然后单击“确定”,就像我之前尝试过的对单个 JS 文件所做的那样。接下来发生的事情却很奇怪。它不会重复对单个文件发生的过程,而是对所有选定的文件重复该过程,它会针对每个文件显示“已跳过”并报告已完成。这种情况每次都会发生。我可以手动完成每个文件(这需要几个小时),但我不能一次完成所有文件。
帮助。我在虚拟机中执行此操作,我不想只是为了获取不需要的文件而将其大小增加四倍。
很抱歉迟到的答复,发生了很多事情,我也不得不花一些时间来完成这项工作。正如您已经指出的,没有直接的方法来执行“仅扩展签出”。但有一种方法可以使用Subversion 命令行工具 http://sourceforge.net/projects/win32svn/以及我编写的批处理脚本。它的工作原理是使用稀疏目录 http://svnbook.red-bean.com/en/1.8/svn.advanced.sparsedirs.htmlSubversion 的功能,可让您指定结账应具有的“深度”。通过指定深度empty
,会创建一个空的工作副本,并且不会实际检出任何文件或文件夹。然后你可以update
将您选择的文件和文件夹从存储库直接复制到该工作副本中。这允许创建您所追求的“仅扩展签出”。
我编写的脚本允许您在EXTENSIONS
变量之间用空格分隔。中指定的存储库SVN_ROOT
然后扫描变量以查找具有给定扩展名的文件。然后,它继续构建一个工作副本,该副本仅包含支持具有您指定的扩展名的文件所需的目录结构(使用上述方法)。我对其进行了相当多的测试,希望它能满足您的需求。
Note:根据存储库的大小和与指定扩展名匹配的文件数量,创建工作副本的过程将需要一些时间。
@ECHO OFF
SetLocal EnableDelayedExpansion
SET SVN_ROOT=svn://your-repository.com/svn/your-project
SET EXTENSIONS=.js .css .html .doc .pdf
SET ROOT_DIR=%CD%
ECHO Listing repository...
svn -R ls %SVN_ROOT% > _files-all.txt
REM filter list for specified extensions
FOR %%H IN (%EXTENSIONS%) DO (
TYPE _files-all.txt | FINDSTR /I /R "%%H$" >> _files-selected.txt
)
REM initial checkout in empty mode
svn co %SVN_ROOT% --depth empty .
FOR /F "tokens=*" %%I IN (_files-selected.txt) DO (
REM "escape" path elements by wrapping them into double quotes
SET TMP_PATH=%%I
SET TMP_PATH="!TMP_PATH:/=" "!"
ECHO Fetching %%I
REM iterate over path elements
FOR %%J IN (!TMP_PATH!) DO (
REM "unescape" each path element again
SET PATH_ELEM=%%J
SET PATH_ELEM=!PATH_ELEM:~1,-1!
REM if we don't have this element, fetch it from repository
IF NOT EXIST "!PATH_ELEM!" (
svn up %%J --depth empty 2>&1 > nul
)
REM if the element is a directory, enter it
IF EXIST %%~sJ\NUL CD %%J
)
CD !ROOT_DIR!
)
REM clean up temporary files
DEL _files-all.txt _files-selected.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)