5

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

4

10 回答 10

6

您可以只使用一个简单的 bash 单行代码(前提是您是 Linux 快乐用户):

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

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

于 2013-01-07T21:22:09.703 回答
4

TourtoiseSVN 检查修改对话框中

  • 选择你想要的文件
  • 右键点击
  • 然后 shell 上下文菜单将它们发送到 7zip
于 2016-08-30T12:18:11.873 回答
3

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

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

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

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

于 2012-05-11T22:21:42.337 回答
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
于 2012-08-03T05:48:14.793 回答
1

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

svn diff > my_changes.patch

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

patch -p0 < my_changes.patch
于 2012-05-11T22:01:33.313 回答
1

我喜欢这个解决方案,因为它可以在 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,但这似乎可行。

于 2012-11-19T18:10:37.140 回答
1

在 linux 中,你会这样做。

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

其中 REV 是您要开始的修订号。通常在您退房时。

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

于 2013-03-13T10:38:25.043 回答
0

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

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

如果您可以同意在撤消之前提交(到某个不同的地方)这些更改(变为 just svn up PREV-REV),您可以使用任何“文件在修订中更改”技巧

对于 TortoiseSVN 最新的 GUI 方式(“仅在版本之间导出 TortoiseSVN 中更改的文件”)可能是您的首选方法

于 2012-11-19T19:21:46.673 回答
0

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

根据Ken White 的输入,我使用命令行将文件移动到存档:

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

作为步骤 1 - 3 的替代方法,您可以svn status | find "M " > filelist.txt使用文本编辑器运行并删除不需要的行/字符。

于 2019-08-07T13:35:42.647 回答