本文主要介绍通过svnadmin的转存(dump)和恢复(load)命令解决SVN错误提交版本的清除问题。主要包括以下几个方面:

  • svnadmin命令
  • 备份并记录错误的版本号
  • 转储版本仓库
  • 创建新的版本仓库
  • 恢复仓库转储文件
  • 检出新的版本仓库
  • 更新日志缓存

本文使用的软件版本:

  • FreeBSD 13.0
  • subversion 1.14.0
  • TortoiseSVN 1.12.2(Windows 64-bit)

Subversion(SVN)是一个自由开源的版本控制系统,通过建立中心版本仓库(Repository)存储所有文件和目录的版本和修改信息,记录谁、什么时候、以及为什么发生更改等,允许在任何时候提取这些文件的历史版本的所有信息。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。Subversion还可以用于多人共同工作的场景,通过对版本和分支的集中式管理实现资源共享和工作协同。

通常,SVN是用来管理文档版本的,所以,不管是正确的版本还是错误的版本都会被记录在仓库里,即使文档中含有一些不必要或者不正确的内容,这才算是一个完整的版本控制。然而在有些情况下,由于操作不慎或者考虑不周,一不小心就会在文档目录中提交了错误的文档,比如一个无需入库的文档、一个含有敏感信息的文档、或者一个巨大的程序安装包等。这些误提交的文档虽然可以在后面的版本中进行删除,但是却在存储仓库中留下永久的身影,任何时候都可通过版本号提取出这些无关的文件。特别是这些文件还占用了很大的存储空间,这对于一个合格的仓库管理员来说简直就不能忍,必欲除之而后快。

如下图中显示的是一个SVN文档仓库的版本日志,可以看到在第95版本处新增加了一个文件,但是这个文件却是不必要的,那么怎么才能将这个文件彻底地从仓库中删除呢?

虽然SVN中没有专门删除仓库文件的命令,但是可以通过将SVN特定版本导出并恢复的方法来实现仓库文件的彻底删除。

1 svnadmin命令

svnadmin是SVN仓库的管理工具,一般都会随着SVN服务器一起安装。命令用法如下:

# svnadmin SUBCOMMAND REPOS_PATH [options] [args]

其中:

SUBCOMMAND为具体的管理命令,通常有help、create、hotcopy、dump、load等;

REPOS_PATH为需要管理的仓库的本地路径。

[options] [args]为可选的参数与选项,与具体的命令有关。

2 备份并记录错误的版本号

开始之前,一定要记得备份,以免操作失误导致仓库的永久破坏。备份可以使用tar、7-zip等打包压缩工具,或者直接拷贝到U盘等。

下一个重要的任务就是记录错误的版本号,使用TortoiseSVN的“show log”命令将日志信息显示出来仔细核对,找到需要清除的版本号记录在纸上。如图中显示的是一个SVN文档仓库的版本日志,可以看到在第95版本处新增加了一个文件,并且在96、104、105版本中对其进行了更改,但是这个文件却是不必要的。要删除这个文件,其后所有涉及这个文件的版本也必须记录下来一起删除,所以这一步一定要细心!

3 转储版本仓库

使用dump命令转储版本仓库,使用时有两个参数比较重要。一个是--revision,用于设置需要转储的版本号,多个连续版本可以用冒号隔开;另外一个是--incremental,用于设置增量格式转储,也就是只转储当前版本中增加的内容。在控制台输入如下两条命令:

# svnadmin dump Textbook -r 1:94 --incremental > Textbook_1-94.dump
# svnadmin dump Textbook -r 97:103 --incremental > Textbook_97-103.dump

命令执行结果如下:

这两条命令分别增量转储了1-94和97-103版本的内容,跳过了95、96和104、105版本,这4个版本正是需要删除的历史版本。当然,第一条命令中对版本1进行增量转储没有多少意义。

4 创建新的版本仓库

使用svnadmin的create命令创建一个新的仓库。

# svnadmin create Textbook

如果还想使用原来的仓库名,可以先将旧仓库文件夹重命名后再创建新仓库。

5 恢复仓库转储文件

使用load命令恢复版本仓库,使用时将前面转储的文件进行输入重定向就可以了。在控制台输入如下两条命令:

# svnadmin load Textbook < Textbook_1-94.dump
# svnadmin load Textbook < Textbook_97-103.dump

这两条命令一定要按照顺序来输入,这也是为什么在两个转储文件名后面加上版本号后缀的原因。最后一条命令执行结果如下:

# svnadmin load Textbook < Textbook_97-103.dump
<<< Started new transaction, based on original revision 97* editing path : C++??????/?13? ??????.docx ... done.------- Committed new rev 95 (loaded from original rev 97) >>><<< Started new transaction, based on original revision 98* editing path : C++??????/?13? ??????.docx ... done.------- Committed new rev 96 (loaded from original rev 98) >>><<< Started new transaction, based on original revision 99* editing path : C++??????/?13? ??????.docx ... done.------- Committed new rev 97 (loaded from original rev 99) >>><<< Started new transaction, based on original revision 100* editing path : C++??????/??.docx ... done.------- Committed new rev 98 (loaded from original rev 100) >>><<< Started new transaction, based on original revision 101* editing path : Python????/?7? ???????.docx ... done.------- Committed new rev 99 (loaded from original rev 101) >>><<< Started new transaction, based on original revision 102* editing path : Python????/?7? ???????.docx ... done.------- Committed new rev 100 (loaded from original rev 102) >>><<< Started new transaction, based on original revision 103* editing path : Python????/?7? ???????.docx ... done.------- Committed new rev 101 (loaded from original rev 103) >>>

6 检出新的版本仓库

回到客户端,使用TortoiseSVN重新CheckOut新的版本仓库。

对于使用http协议访问的SVN仓库,由于HTTP服务器对SVN仓库进行缓存,所以可能会出现检出失败的错误:

这时只需将HTTP服务重启即可。如在FreeBSD下使用如下命令重启Apache服务器

# service apache24 restart

重启完成后就可成功检出了。

7 更新日志缓存

使用TortoiseSVN的“show log”命令将新库的日志信息显示出来,发现原来的105个版本只剩下101个版本,其中的4个版本被彻底清除了。

仔细核对后发现,95版本似乎还是最初的内容,好象已经清除的版本还在,难道是哪里出错了?这其实也是缓存惹的祸。TortoiseSVN会将中心版本库中的内容全部缓存在本地,这样就不用每次都去向服务器请求数据了。

打开TortoiseSVN的“settings”设置对话框,在“Saved Data”中清除日志消息。

然后,在“Log Caching”“Cached Repositories”中选中仓库的URL,点击“Update”按钮,连接到远程仓库并下载缺失的日志数据。

清除了缓存以后,再次查看日志时,一切都正常了。

彻底清除错误提交的SVN版本相关推荐

  1. 如果错误提交了历史版本的稿件,撤稿邮件怎么写?

    题目: Withdrawal of Manuscript Submission: Title ID XXXXXXX 内容: Dear Editor,I am writing to request th ...

  2. Git 错误提交后该如何回滚操作

    1. Git 架构 Workspace:工作区(当前用户操作修改的区域) Index / Stage:暂存区 (add 后的区域) Repository:仓库区或本地仓库(commit 后的区域) R ...

  3. svn错误提示: svn is scheduled for addition, but is miss

    错误提示: svn: '/home/*/*/../app/templates/mail/newbrands.tpl' is scheduled for addition, but is missing ...

  4. 使用代码的当前SVN版本构建项目build版号

    在项目开发中,有时经常遇到如下的一些情况: 1.QA提交的bug中和之前改动的代码有所关联. 2.自己修正了BUG,提交测试,却打回告之没有修正,然后不得不自己再次debug. ... 针对以上这种情 ...

  5. 清除目录下的SVN信息

    本文转载自: https://www.cnblogs.com/muyou/archive/2011/09/02/2163662.html 作者:muyou 转载请注明该声明. 今天想清除目录下的SVN ...

  6. 删除错误提交的bit 历史_软件错误的历史

    删除错误提交的bit 历史 The term is more literal than you think. 该术语比您想像的更为直截了当. Safe to say all programmers a ...

  7. 【山外笔记-工具框架】SVN版本控制系统

    [山外笔记-框架工具]SVN版本控制系统 学习资料: 1.本文打印版下载地址:[山外笔记-框架工具笔记]SVN版本控制工具-打印版.pdf 2.SVN和TortoiseSVN在线中文文档:http:/ ...

  8. 工作随笔——使用svnsync实时备份SVN版本库

    前段时间把SVN版本库从win迁移到了Linux上,没隔几天那台win的磁盘就严重坏道了....这TMD什么运气! 花费了点时间研究了下svn自己的同步工具.写个日志记录下. 注意:svnsync要求 ...

  9. SVN版本控制软件--sgg学习笔记

    1 svn介绍 1.1 项目管理中的版本控制问题 ​ 通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: 备份多个版本,占用磁盘空间大 解决代码冲突困难 ...

最新文章

  1. Java线程详解(16)-条件变量
  2. jquery是库还是框架?
  3. MyBatis中动态SQL
  4. rgb fusion检测不到显卡_【论文阅读27】Co-Fusion
  5. @Deprecated 注解 (@Documented 、@Retention、@Target)
  6. MySQL-回表查询与索引覆盖
  7. 遍历指定目录并且从子目录开始将目录输出到指定文件
  8. python学习[第十四篇] 文件的输入与输出
  9. Advanced R之数据结构
  10. ContentPresenter
  11. java 回溯_java 实现迷宫回溯算法示例详解
  12. java 多线程为什么不建议使用onstop onsuspend_java多线程stop,suspend使用代码实际例子...
  13. Mono 2.11.3 发布包含微软的 Entity Framework
  14. 【系统分析师之路】系分历年论文命题走向
  15. html求相关系数,相关系数,确定系数(R^2)计算公式与在线计算器_三贝计算网_23bei.com...
  16. php关闭notice_php的notice怎么关闭
  17. rank函数python_Python pandas.DataFrame.rank函数方法的使用
  18. 洛谷 2957 [USACO09OCT]谷仓里的回声Barn Echoes
  19. FPGA复位电路设计学习分析
  20. 【docker】三、Permission denied与sudo命令

热门文章

  1. 基于IE浏览器的色情图片过滤器的设计和实现
  2. 在PowerShell中查看环境变量Path
  3. lumion的物体系统5.30
  4. python -- 内存管理
  5. GIS VBA 创建界址点要素
  6. c语言中按位或与按位异或的区别,C:按位与、按位或、按位异或运算
  7. 川大计算机学院复试科目,四川大学复试科目
  8. Python爬虫第四课:Network、XHR、json
  9. python零基础书推荐_零基础学习Python(Python初学者、Python入门)常见问题:资料、社区、书籍推荐...
  10. TCP握手挥手/UPD杂记