【问题标题】:How to save modifications in SVN working copy to a zip file如何将 SVN 工作副本中的修改保存到 zip 文件
【发布时间】:2012-05-11 21:45:50
【问题描述】:

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

【问题讨论】:

    标签: svn tortoisesvn zipfile


    【解决方案1】:

    您可以只使用一个简单的 bash 单行程序(前提是您是 Linux 用户):

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

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

    【讨论】:

      【解决方案2】:

      TourtoiseSVN 检查修改对话框中

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

      【讨论】:

        【解决方案3】:

        您可以购买WinZip 的副本,或使用开源的7-Zip。两者都包含命令行版本,可以满足您的需求。它们都支持用作 Windows shell 扩展,这意味着您可以从 Windows 资源管理器中选择一个或多个文件,右键单击并从上下文菜单中执行压缩选项。 (顺便说一句,这比使用您发布的拖放解决方案要好。)

        这两种产品都包含关于从命令行使用它们的非常好的文档,如果这是您选择的选项。

        借助 7-Zip 的 shell 支持,您可以 Shift+ClickCtrl+Click 选择文件,然后右键单击其中任何一个并从其中选择 7-Zip->Add to archive...上下文菜单。然后,您可以选中包含路径信息的选项。

        WinZip 包含与 Windows shell 类似的功能,虽然我已经多年没有使用它并且无法给出具体的说明。

        【讨论】:

        • 感谢您指出一些关于 7-Zip 的好东西;它显然比我想象的+1更有能力。但是,您在这里所说的都没有解决我提出的 SVN 问题。我想念这如何让我备份我的工作副本中添加/修改的(并且只有那些)文件。也许我错过了你的回答。
        • 您第一次创建存档(包括所有文件)。之后,选择存档,右键单击,选择Add to archive...,然后将更新模式更改为UpdateFreshen。同样,请参阅 7-Zip 文档(您可以打开所描述的对话框并单击 Help 按钮到达那里)。
        【解决方案4】:

        这很粗糙,但很有效。

        @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
        

        【讨论】:

          【解决方案5】:

          您可以将本地更改保存到文件中:

          svn diff > my_changes.patch
          

          以后可以通过以下方式恢复这些更改:

          patch -p0 < my_changes.patch
          

          【讨论】:

          • 我已经看到了......我当然得到了它的效用。但是,我想要做的是能够对所有已更改或添加的文件进行 zip 压缩。
          • 好的,我可能误解了您要查找的内容。
          【解决方案6】:

          我喜欢这个解决方案,因为它可以在 Windows 和 Mac 上稍作修改。

          下载一个命令行颠覆客户端。在 Windows 上,请通过 http://sliksvn.com/en/download/ 查看 SlikSVN,因为 TortoiseSVN 不提供。

          如果没有 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,但这似乎可行。

          【讨论】:

            【解决方案7】:

            在 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

            【讨论】:

              【解决方案8】:

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

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

              【讨论】:

                【解决方案9】:

                如果您同意在撤消之前提交(到某个不同的地方)这些更改(变成svn up PREV-REV),您可以使用"Files changed in revision" tricks中的任何一个

                对于 TortoiseSVN 最新版本,GUI 方式 ("Exporting only changed files in TortoiseSVN between versions") 可能是您的首选方法

                【讨论】:

                  【解决方案10】:

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

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

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

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2020-02-07
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-06-23
                    • 1970-01-01
                    • 2011-04-03
                    相关资源
                    最近更新 更多