一切的开始:关于SVN(客户端)重命名文件的问题
问题简述what
在作为研究僧第一次上传项目周报时遇到的问题——在本地右键 SVN Checkout 项目周报文件夹后,打开该文件夹(父文件夹),找到自己的报告“0923”。此时父文件夹和报告文件的图标均为绿底对勾:
右键“重命名”成“0900”后发现文件图标变成蓝底问号:
若返回上一层会发现,父文件夹图标由原先的绿底对勾变成了红底感叹号:
What happened?
背后原理why
- 首先看这些图标代表的含义:
图标 | 含义 |
---|---|
蓝底问号 | 指版本库上没有的文件,也称无版本控制 |
绿底对勾 | 上次update后没有修改,常规态 |
红底感叹号 | 自从上次update以后,修改过 |
蓝色十字 | 版本库上有的文件,已经加上去的,即“added” |
还有其他图标的含义,都可以在 TortoiseSVN 的 Settings 中的 Icon Overlays-> Icon Set 查看到。
- 据上表可知,改名后“0900”文件标有蓝底问号表示不在版本库中,所以需要先 TortoiseSVN -> Add,之后图标变成了蓝色十字表示文件added了版本库:
然后右键就有了 SVN Commit,可以提交了。 - 提交子文件后,图标变为绿底对勾(若没变可以尝试刷新一下):
提交子文件后还需再提交父文件夹;
这里可以直接提交父文件夹,更方便,特别是有很多子文件被改动的时候。
- 返回父文件夹,图标仍为红底感叹号,表示该文件夹有修改操作,右键 SVN Commit 提交。注意到这时候弹出的 Commit 窗口的下方 Changes made 一栏会提示之前的“0923”文件的 Status 为 missing ,这是什么意思,怎么解释呢?
我们是在本地右键“重命名”改名,这对于版本库来说,add了一个新的文件“0900”而不是对原文件“0923”重命名操作,提交新版本之前,检测到“0923”文件仍在版本库中,而在本地新版本中missing。选中前面方框(如果不选中,提交后是两个文件“0923”和“0900”都在),点击 OK ,文件名称已修改完成。 - 最后看弹出来的 Commit Finished! 窗口:
因为刚刚选中了方框,所以版本库中的“0923”文件被 delete 掉了。
本质上上述过程不是一次重命名过程,而是在本地重新add了一个名字不同的文件并提交然后删除原文件的过程。
解决措施how
上述在本地重命名时出现的一些问题,已经叙述了较详细的解决措施,简单说只要搞清楚那几个图标的含义,就迎刃而解,但为何会产生这些问题才是重要的,会让人开始理解版本库的工作方式。
这里说一下,如何在SVN版本库中直接重命名文件,然后也推荐使用这个重命名方式,两种虽然都能达到重命名目的,但这个方式才是正规的重命名方式,上述在本地重命名更像是新手,比如我,在还不明白版本库与本地之间关系时做出的操作。
- 首先进入版本库
在父文件夹下或右键父文件夹,TortoiseSVN -> Repo-browser: - 找到对应的文件,右键 Rename 。
- 重命名完成后,即版本库上的文件名称已改,在本地文件夹 SVN Update 一下即可。
ok,是简单快捷,也符合直观思维的重命名操作,正确的路总是意外的简单。
通过 TortoiseSVN -> Show log 看这个过程,本质上也是deleted了旧文件,added了新文件。
一切的开始 2019.10.2 by ldzh