如何将SVN工作副本中的修改保存到zip文件中

时间:2012-05-11 21:45:50

标签: svn tortoisesvn zipfile

我正在使用svn,有时我需要恢复一些不顺利的变化。我想首先对已更改的文件进行压缩。我希望拉链有完整的路径。我大部分时间都在使用TortoiseSVN,但如果需要,我不怕使用命令行。

9 个答案:

答案 0 :(得分:6)

你可以使用一个简单的bash one-liner(前提是你是一个Linux开心的用户):

zip ~/modified.zip $(svn status | grep ^M | awk '{ print $2;}')

这将提取状态为M so Modified的所有文件。

答案 1 :(得分:3)

您可以购买WinZip的副本,或使用开源7-Zip。两者都包含命令行版本,可以执行您想要的操作。它们还支持用作Windows外壳扩展,这意味着您可以从Windows资源管理器中选择一个或多个文件,右键单击,然后从上下文菜单中执行压缩选项。 (要么比使用您发布的拖放解决方案更好,BTW。)

这两个产品都包含从命令行使用它们的相当好的文档,如果这是您选择的选项。

使用7-Zip的shell支持,您可以 Shift +单击 Ctrl +单击选择文件,然后右键单击其中任何一个并选择{{1}从上下文菜单中。然后,您可以选中包含路径信息的选项。

WinZip包含来自Windows shell的类似功能,虽然我多年没有使用它,但无法给出具体指示。

答案 2 :(得分:3)

这很粗糙,但有效。

@echo ================================================
@echo ZIPS all modified or added svn controlled files
@echo to the specified  zip file
@echo "svnzipmodified <filename>"
@echo ================================================
@if "%1"=="" goto end
@echo Getting list of modified or added files
@echo ================================================
svn status -q > list.txt
@echo Strip status text to leave path and filename
@echo ================================================
find "M    " list.txt > list2.txt
find "A    " list.txt >> list2.txt
(for /F "tokens=1,2*" %%i in (list2.txt) do @echo %%j) > list3.txt
@echo Zip up files
@echo ================================================
del %1 /Q
"C:\Program Files\MATLAB\R2010a\bin\win64\zip.exe" %1 -@ < list3.txt

pause
del list3.txt /Q
del list2.txt /Q
del list.txt /Q
@echo Done
@echo ================================================

:end

答案 3 :(得分:3)

TourtoiseSVN检查修改对话框

  • 选择您想要的文件
  • 右键单击
  • 然后将shell上下文菜单发送到7zip

答案 4 :(得分:1)

您可以使用以下命令将本地更改保存到文件中

svn diff > my_changes.patch

稍后可以使用以下方法恢复这些更改:

patch -p0 < my_changes.patch

答案 5 :(得分:1)

我喜欢这个解决方案,因为它可以在Windows和Mac上进行少量修改。

下载命令行subversion客户端。在Windows上,在http://sliksvn.com/en/download/查看SlikSVN,因为TortoiseSVN没有提供。{/ p>

如果您没有Python 3.x,请下载。

下载7zip并将其添加到您的路径中。

执行:

import os
import re
import subprocess
import time

re_svn = re.compile(r'(.)\s+(.+)$')
files = []

for line in os.popen('svn status -q').readlines():
    match = re_svn.match(line)
    if match:
        files.append(match.group(2))

if len(files) > 0:
    subprocess.call(['7z','a',time.strftime('%Y%m%d-%H%M%S') + '.zip'] + files)

注意:学习Python,但这似乎有效。

答案 6 :(得分:1)

在linux中,你就是这样做的。

svn diff -r REV:HEAD --summarize | sed's / [A-Za-z] [] + //'| xargs zip myfiles.zip

如果REV是修订版号,您想要从哪个开始。通常在您结账时。

消息来源:http://www.semicolon.co.za/linux/get-list-of-changed-tiles-via-svn-diff-and-zip-them.html

答案 7 :(得分:0)

好的,我找到了一种方法,但我并不完全满意。我正在回答我自己的问题,但我希望有人可以改进它。

  1. 使用WinZip创建一个空的zip文件 选择包括完整路径信息。在WinZip中打开zip。我无法弄清楚如何使用本机Windows zip实用程序。
  2. 在工作副本中,使用TourtoiseSVN上下文菜单打开“检查修改”对话框。
  3. 选择对话框中的所有文件并拖放它们并放入WinZip。

答案 8 :(得分:0)

尽管Boscabouter's answer在一台机器上对我来说效果很好,但我注意到在另一台机器上, TortoiseSVN 的上下文菜单中没有 Shell 条目。因此,我无法轻松地将文件从检查修改对话框发送到 7zip

基于Ken White's input,我使用命令行将文件移动到归档文件中:

  1. 例如从存储库的基本目录中打开 TortoiseSVN 检查修改对话框
  2. 标记所有感兴趣的文件,右键单击任何文件,然后选择将路径复制到剪贴板
  3. 将路径粘贴到同一目录中的临时文本文件中,例如filelist.txt
  4. 在该目录中打开终端(例如,在Windows资源管理器中按住Shift键并右键单击该文件夹,然后选择打开命令提示符
  5. 运行"%ProgramFiles%"\7-Zip\7z a -tzip modified.zip @filelist.txt

除了步骤1-3之外,您还可以运行svn status | find "M " > filelist.txt并使用文本编辑器删除不需要的行/字符。