删除、移动和改名

不像CVS,Subversion允许重命名和移动文件和目录。因此在TortoiseSVN 的子菜单中有删除和重命名的菜单项。

图 5.28. 版本控制文件的菜单浏览

版本控制文件的菜单浏览


正在删除文件/文件夹

Use TortoiseSVNDelete to remove files or folders from subversion.

When you TortoiseSVNDelete a file, it is removed from your working copy immediately as well as being marked for deletion in the repository on next commit. The file's parent folder shows a “deleted” icon overlay. Up until you commit the change, you can get the file back using TortoiseSVNRevert on the parent folder.

When you TortoiseSVNDelete a folder, it remains in your working copy, but the overlay changes to indicate that it is marked for deletion. Up until you commit the change, you can get the folder back using TortoiseSVNRevert on the folder itself. This difference in behaviour between files and folders is a part of Subversion, not TortoiseSVN.

If you want to delete an item from the repository, but keep it locally as an unversioned file/folder, use Extended Context MenuDelete (keep local). You have to hold the Shift key while right clicking on the item in the explorer list pane (right pane) in order to see this in the extended context menu.

如果一个 文件 是通过浏览器而不是使用TortoiseSVN 快捷菜单被删除,提交对话框也会显示这些文件并让你在提交前把他们从版本控制中移除。可是,如果你更新你的工作副本, Subversion 将会混淆这个丢失文件并替换他为版本库中的最新版本。因此,如果你需要删除一个版本控制下的文件,请始终使用TortoiseSVNDelete保证 Subversion不去猜测你到底想干什么。

如果一个 目录 是通过浏览器而不是使用TortoiseSVN 快捷菜单被删除,你的工作副本将回被损坏,并且你将不能提交。如果你更新你的工作副本,如果你更新你的工作副本, Subversion 将用版本库中的最新版本替换已丢失目录。接下来你就可以使用TortoiseSVNDelete这种正确的方法来删除它了。

找回已删除的文件或目录

如果你删除了洋文件或目录并已经提交该删除操作到版本库,那么 一个常规的TortoiseSVNRevert已不能再将其找回。但是该文件或目录并没有完全丢失。如果你知道该被删除文件或目录的版本(如果不能,使用日志对话框来查找出来),打开数据仓库的浏览器,并选择那个版本。然后选择你删除的文件或目录,右键并选择Context MenuCopy to...作为目标执行复制操作,然后选择你的工作副本的路径。

移动文件和文件夹

If you want to do a simple in-place rename of a file or folder, use Context MenuRename... Enter the new name for the item and you're done.

If you want to move files around inside your working copy, perhaps to a different sub-folder, use the right-mouse drag-and-drop handler:

  1. 选择你要移动的文件或目录

  2. 拖拽(right-drag)他们到新的工作副本下,

  3. 松开鼠标右键

  4. 在弹出菜单选择上下文菜单SVN 移动文件

提交父目录

Since renames and moves are done as a delete followed by an add you must commit the parent folder of the renamed/moved file so that the deleted part of the rename/move will show up in the commit dialog. If you don't commit the removed part of the rename/move, it will stay behind in the repository and when your co-workers update, the old file will not be removed. i.e. they will have both the old and the new copies.

必须在重命名目录后而在更改目录下的任何文件前进行提交,不然你的工作副本就回真的混淆。

You can also use the repository browser to move items around. Read “版本库浏览器”一节 to find out more.

不要使用 SVN 移动外部连接

不应该用 TortoiseSVN 的移动改名命令作用在用 svn:externals 创建的目录上。因为这个动作可能会导致外部元素(item)从它的父版本库中删除,这可能会使其它人烦恼。如果你需要移动外部目录,你应该使用普通的外壳移动,然后调整源和目的之父目录的 svn:externals 属性。

改变文件名称大小写

在 Windows 中,使用 Subversion 修改文件名称的大小写需要小技巧,因为在改名期间,两个文件名称需要同时存在。因为 Windows 的文件系统是大小写不敏感的,所以使用平常的改名命令是不能工作的。

Fortunately there are (at least) two possible methods to rename a file without losing its log history. It is important to rename it within subversion. Just renaming in the explorer will corrupt your working copy!

解决方案 A)(推荐)

  1. 提交你工作副本中的改变到版本库

  2. 使用版本库的浏览器立即重命名该文件的大写(小写)为小写(大写)

  3. 更新你的工作副本

解决方案 B)

  1. 使用TortoiseSVN子菜单中的重命名命令将UPPERcase重命名为UPPERcase_ 格式

  2. 提交该更改

  3. 将UPPERcase_重命名为upperCASE格式

  4. 提交该更改

处理文件名称大小写冲突

If the repository already contains two files with the same name but differing only in case (e.g. TEST.TXT and test.txt), you will not be able to update or checkout the parent directory on a Windows client. Whilst Subversion supports case-sensitive filenames, Windows does not.

它偶尔在两个人在独立的工作副本提交时发生,文件名称相同,只有大小写不同。它也会在具有大小写敏感的文件系统的系统中提交文件时发生,例如 Linux。

如果是那样的话,你得决定在这个版本库里的哪一个文件是你想保留的,哪一个是要删除(或重命名)的

防止两个文件名字相同

这有一个有用的服务器端脚本在http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/将会防止检入拼写(大小写)冲突文件。

修复文件改名

有时候你的IDE会因为执行反射操作,改名文件,当然它不能告诉Subversion。如果你尝试提交修改,Subversion会发现丢失了老文件,新增了未版本控制的新文件。你可以简单的增加新文件,但是你将丢失历史记录,因为Subversion不知道这些文件的关系。

更好的方法是通知Subversion这实际上是改名,你可以在提交检查修改对话框中做此操作。简单选择老文件(丢失的)和新文件(未版本控制的),使用右键菜单修复移动设置这两个文件是改名关系。

删除未版本控制的文件

通常你可以在Subversion中设置自己的忽略列表,例如忽略所有产生的文件。但是你如何清理这些忽略的项目,从而产生一个干净的构建呢?通常你在makefile中清理,但是如果你在调试makefile,或者修改构建系统,那么有一个清理方法是极为有用的。

TortoiseSVN 提供了使用扩展上下文菜单删除未版本控制的项目...来清理工作副本。你可以在目录上右键操作时,保持 Shift按下,就可以看到这个上下文菜单。它会出现一个对话框,列出工作副本中的所有未版本控制的文件。你可以选择或取消删除的项目。

当删除这些项目时,使用了垃圾箱。所以如果你犯了错误,删除了应该版本控制的文件,你仍旧可以恢复。