被一个小小的设置征服的恐惧,遂花了一把时间,捣鼓,弄懂它。
TortoiseSVN 是 Subversion 版本控制系统的一个客户端。
先查看一波 TortoiseSVN 帮助文档
在线链接:https://tortoisesvn.net/docs/release/TortoiseSVN_zh_CN/index.html
或者在本地的文件夹 -> “右键” -> TortoiseSVN -> Help
查看第4.14小节:忽略文件和目录(Ignoring Files And Directories)
得知:已版本控制的文件或目录不能够忽略!
查看第4.14.1小节:忽略列表中的模式匹配(Pattern Matching in Ignore Lists)
得知:不应该在模式中包含路径信息。模式匹配的目标是纯文本的文件名和文件夹名!
为什么要提及上面两点呢?
因为上面里两点很关键,不管是在 IDE 中设置忽略文件还是在客户端设置,都要遵守这个要求才会生效。
下面,以客户端的操作为例,说明如何"设置忽略文件/目录"
万变不离其宗,你自然会知道怎么在 IDE 中设置。
当我们打开一个通过svn导出的目录时,能看见文件的svn状态,如下:
其实忽略文件无非两种情况,一种是 未版本控制的文件,一种是 已版本控制的文件,下面一一说明。
忽略 未版本控制的文件
情景一:项目编译时产生的临时文件,如 target 目录
情景二:项目导入时 IDE 时产生的配置文件,如 .eclipse / .idea / .setting
…
当我们想忽略这些文件或目录时,在 IDE 上操作和在客户端操作是一样的。
直接"右键"文件或者目录 -> -> Add to ignore list(客户端) / 添加至svn:ignore(Eclipse) / Ignore(IDEA),搞定。注意:前提是“未版本控制的文件”
客户端为例,见下图:
你是否遇到一种尴尬,"右键"文件,但是 Ignore 的选项是灰色的无法点击。
你知道为什么吗?
回到文章开头,我们提到的已版本控制的文件或目录不能够忽略! 这下知道了吗?唯一的解释就是这个文件已经加入了版本控制。
忽略 已版本控制的文件
这种情况一般就是,别人把整个工程目录,包括IDE的配置目录啊,target目录啊等等一股脑都提交到svn上去,你导出到本地时,还没写一行代码,就已经有一堆文件提示被修改了。像target目录每次编译都会生成新的文件,提交时都会提示,强迫症表示很烦。我们想要忽略它们,那问题就变成了“忽略已版本控制的文件”,情况有所不同,见图:
“未版本控制的文件”加入 ignore list 没什么好说的,但“已版本控制的文件”需要先 unversion(取消版本控制)才能加入 ignore list。
为什么呢?
还是那句话,已版本控制的文件或目录不能够忽略!
unversion 就是取消版本控制,因为已版本控制的文件或目录不能够忽略! ,所以就需要先取消版本控制,让其变成“未版本控制的文件”,这样问题就变成了忽略未版本控制的文件。
以上是客户端的操作,在IDE中是没有这个选项的。
如果是在IDE中操作,因为其没有 unversion 这个操作,只能通过 删除该文件/目录,提交commit,在本地新建一个新的文件并设置将其加入 ignore list,再commit(将ignore list提交)。这样,万事大吉,别人提交的时候也会应用这个 ignore list,再也不怕别人把target之类的文件传到svn了。
(温馨提示:删错了别慌,revision一下又回来了)
以上是设置单个文件/目录的忽略方式,或者说是有限个文件的操作。
当我们要全局应用忽略策略时,就要用另一种方式:使用模式匹配配置忽略(设置全局忽略、设置项目级忽略策略、设置目录级忽略策略)
使用模式匹配配置忽略
忽略配置支持正则表达式,这就要提到文章开头的第二点,不应该在模式中包含路径信息。模式匹配的目标是纯文本的文件名和文件夹名!
所以,正则用于匹配文件名或者目录名。就算配置成了路径也是无效的。(我猜你试过配置 target/** 等等想要忽略某个目录的文件,哈哈,这样真的没有作用)
设置全局忽略
直接在客户端的setting设置,本机的所有svn项目都生效。
设置项目级忽略策略
在项目根目录,右键空白 --> New -> Other -> 新建一个“svn:global-ignores”属性,这样整个项目所有匹配项都会被忽略。
设置目录级忽略策略
选中一个文件/目录,右键 --> New -> Other -> 新建一个“svn:ignore”属性,这样目录下所有匹配项都会被忽略。
说来道去,没提到IDE怎么设置。归根到底,通过IDE进行操作,其实也是这些逻辑。
我墙裂建议直接使用 客户端进行忽略文件的设置。
结论
说这么多,听懂了最好,听不懂的话,你要记住最最最重要的两个点:
-
已版本控制的文件或目录不能够忽略!!!
-
不应该在模式匹配中包含路径信息。模式匹配的目标是纯文本的文件名和文件夹名!!!
IDE的相关设定都会涉及到这两个点,当你纠结于为啥配置不生效时,请对号入座检查是否中坑。
refer:
https://blog.csdn.net/hemingwang0902/article/details/6904205
end