如何将 SVN 工作副本中的修改保存到 zip 文件
Posted
技术标签:
【中文标题】如何将 SVN 工作副本中的修改保存到 zip 文件【英文标题】:How to save modifications in SVN working copy to a zip file 【发布时间】:2012-05-11 21:45:50 【问题描述】:我正在使用 svn,有时我需要恢复一些不顺利的更改。我想先对更改的文件进行压缩。我希望 zip 有完整的路径。我大部分时间都在使用 TortoiseSVN,但如果需要,我并不害怕使用命令行。
【问题讨论】:
【参考方案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+Click 或 Ctrl+Click 选择文件,然后右键单击其中任何一个并从其中选择 7-Zip->Add to archive...
上下文菜单。然后,您可以选中包含路径信息的选项。
WinZip 包含与 Windows shell 类似的功能,虽然我已经多年没有使用它并且无法给出具体的说明。
【讨论】:
感谢您指出一些关于 7-Zip 的好东西;它显然比我想象的+1更有能力。但是,您在这里所说的都没有解决我提出的 SVN 问题。我想念这如何让我备份我的工作副本中添加/修改的(并且只有那些)文件。也许我错过了你的回答。 您第一次创建存档(包括所有文件)。之后,选择存档,右键单击,选择Add to archive...
,然后将更新模式更改为Update
或Freshen
。同样,请参阅 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】:好的,我找到了一种方法,但对此并不完全满意。我正在回答我自己的问题,但我希望有人可以改进它。
-
使用 WinZip 创建一个空的 zip 文件 选择包含完整路径信息。在 WinZip 中打开 zip。我无法弄清楚如何使用本机 Windows zip 实用程序执行此操作。
在工作副本中,使用 TourtoiseSVN 上下文菜单打开检查修改对话框。
选择对话框中的所有文件并将它们拖放到 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,我使用命令行将文件移动到存档:
-
打开 TortoiseSVN 检查修改 对话框,例如从存储库的基本目录中
标记所有您感兴趣的文件,右键单击任何文件并选择复制路径到剪贴板
将路径粘贴到同一目录中的临时文本文件中,例如
filelist.txt
在该目录中打开终端(例如 Shift + 右键单击 Windows 资源管理器中的该文件夹,然后选择 打开命令提示符)
运行"%ProgramFiles%"\7-Zip\7z a -tzip modified.zip @filelist.txt
除了步骤 1 - 3,您还可以运行 svn status | find "M " > filelist.txt
并使用文本编辑器删除不需要的行/字符。
【讨论】:
以上是关于如何将 SVN 工作副本中的修改保存到 zip 文件的主要内容,如果未能解决你的问题,请参考以下文章