我正在使用svn,有时我需要恢复一些不顺利的变化。我想首先对已更改的文件进行压缩。我希望拉链有完整的路径。我大部分时间都在使用TortoiseSVN,但如果需要,我不怕使用命令行。
答案 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检查修改对话框
中答案 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)
好的,我找到了一种方法,但我并不完全满意。我正在回答我自己的问题,但我希望有人可以改进它。
答案 8 :(得分:0)
尽管Boscabouter's answer在一台机器上对我来说效果很好,但我注意到在另一台机器上, TortoiseSVN 的上下文菜单中没有 Shell 条目。因此,我无法轻松地将文件从检查修改对话框发送到 7zip 。
基于Ken White's input,我使用命令行将文件移动到归档文件中:
filelist.txt
"%ProgramFiles%"\7-Zip\7z a -tzip modified.zip @filelist.txt
除了步骤1-3之外,您还可以运行svn status | find "M " > filelist.txt
并使用文本编辑器删除不需要的行/字符。