题
如何忽略 Subversion 中的文件?
另外,如何找到不受版本控制的文件?
解决方案
(此答案已更新以匹配 SVN 1.8 和 1.9 的行为)
您有 2 个问题:
将文件标记为忽略:
我所说的“忽略文件”是指该文件不会出现在列表中,即使是“未版本控制”:你的 SVN 客户端会假装文件系统中根本不存在该文件。
忽略的文件由“文件模式”指定。文件模式的语法和格式在 SVN 的在线文档中进行了解释: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html “Subversion 中的文件模式”。
Subversion 从 1.8 版(2013 年 6 月)及更高版本开始,支持 3 种不同的指定文件模式的方式。以下是带有示例的摘要:
1 - 运行时配置区域 - global-ignores
选项:
- 这是一个 仅客户端 设置,所以你的
global-ignores
列表不会被其他用户共享,并且它适用于您在计算机上签出的所有存储库。 - 此设置在您的运行时配置区域文件中定义:
- Windows(基于文件)-
C:\Users\{you}\AppData\Roaming\Subversion\config
- Windows(基于注册表)-
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
同时HKLM
和HKCU
. - Linux/Unix -
~/.subversion/config
- Windows(基于文件)-
2 - 的 svn:ignore
属性,在目录(而不是文件)上设置:
- 这存储在存储库中,因此其他用户将拥有相同的忽略文件。类似于如何
.gitignore
作品。 svn:ignore
应用于目录并且是非递归或继承的。任何文件或 即时 与文件模式匹配的父目录的子目录将被排除。虽然SVN 1.8增加了“继承属性”的概念,
svn:ignore
在非直接后代目录中属性本身被忽略:cd ~/myRepoRoot # Open an existing repo. echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt". svn status # Check to see if the file is ignored or not. > ? ./ignoreThis.txt > 1 unversioned file # ...it is NOT currently ignored. svn propset svn:ignore "ignoreThis.txt" . # Apply the svn:ignore property to the "myRepoRoot" directory. svn status > 0 unversioned files # ...but now the file is ignored! cd subdirectory # now open a subdirectory. echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt". svn status > ? ./subdirectory/ignoreThis.txt # ...and is is NOT ignored! > 1 unversioned file
(所以文件
./subdirectory/ignoreThis
并没有被忽视,尽管“ignoreThis.txt
” 应用于.
回购根)。因此,要递归地应用忽略列表,您必须使用
svn propset svn:ignore <filePattern> . --recursive
.- 这将在每个子目录上创建该属性的副本。
- 如果
<filePattern>
子目录中的值不同,则子目录的值完全覆盖父目录,因此不存在“相加”效果。 - 所以如果你改变
<filePattern>
在根上.
, ,那么你必须将其更改为--recursive
在子目录和后代目录上覆盖它。
我注意到命令行语法是违反直觉的。
- 我一开始假设你会通过输入类似的内容来忽略 SVN 中的文件
svn ignore pathToFileToIgnore.txt
然而这并不是 SVN 忽略功能的工作原理。
- 我一开始假设你会通过输入类似的内容来忽略 SVN 中的文件
3- 的 svn:global-ignores
财产。需要 SVN 1.8(2013 年 6 月):
- 这类似于
svn:ignore
, ,只不过它利用了 SVN 1.8 的“继承属性”功能。 - 相比于
svn:ignore
, ,文件模式会自动应用于每个后代目录(不仅仅是直接子目录)。- 这意味着不需要设置
svn:global-ignores
与--recursive
标志,因为继承的忽略文件模式在继承时会自动应用。
- 这意味着不需要设置
运行与上一个示例相同的命令集,但使用
svn:global-ignores
反而:cd ~/myRepoRoot # Open an existing repo echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt" svn status # Check to see if the file is ignored or not > ? ./ignoreThis.txt > 1 unversioned file # ...it is NOT currently ignored svn propset svn:global-ignores "ignoreThis.txt" . svn status > 0 unversioned files # ...but now the file is ignored! cd subdirectory # now open a subdirectory echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt" svn status > 0 unversioned files # the file is ignored here too!
对于 TortoiseSVN 用户:
整个安排让我感到困惑,因为 TortoiseSVN 的术语(在他们的 Windows 资源管理器菜单系统中使用)最初误导了我 - 我不确定忽略菜单的“递归添加”、“添加 *”和“添加”的意义是什么选项。我希望这篇文章能够解释“忽略”功能如何与 SVN 属性功能相关联。也就是说,我建议使用命令行来设置忽略的文件,以便您了解它的工作原理,而不是使用 GUI,并且仅在您熟悉命令行后才使用 GUI 来操作属性。
列出被忽略的文件:
命令 svn status
将隐藏被忽略的文件(即与 RGA 匹配的文件) global-ignores
模式,或匹配直接父目录的 svn:ignore
模式或匹配任何祖先目录 svn:global-ignores
图案。
使用 --no-ignore
选项来查看列出的这些文件。被忽略的文件的状态为 I
, ,然后将输出通过管道传输到 grep
仅显示以“I”开头的行。
命令是:
svn status --no-ignore | grep "^I"
例如:
svn status
> ? foo # An unversioned file
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore
> ? foo # An unversioned file
> I ignoreThis.txt # A file matching an svn:ignore pattern
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore | grep "^I"
> I ignoreThis.txt # A file matching an svn:ignore pattern
哒哒!
其他提示
使用以下命令创建不在版本控制下的文件列表。
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
然后将文件编辑为 只留下您实际上想要忽略的文件. 。然后使用这个来忽略文件中列出的文件:
svn propset svn:ignore -F ignoring.txt .
请注意该行末尾的点。它告诉 SVN 该属性正在当前目录上设置。
删除文件:
rm ignoring.txt
最后承诺,
svn ci --message "ignoring some files"
然后您可以通过以下方式检查哪些文件被忽略:
svn proplist -v
如果您正在使用 乌龟SVN, ,右键单击文件,然后选择 TortoiseSVN / 添加到忽略列表. 。这会将文件/通配符添加到 svn:ignore
财产。
svn:ignore
签入文件时会进行检查,匹配的文件将被忽略。我有以下 Visual Studio .NET 项目的忽略列表:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
您可以在上下文菜单中找到此列表: TortoiseSVN / 属性.
您可以忽略文件或目录,例如 .gitignore. 。只需创建一个包含要忽略的目录/文件列表的文本文件,然后运行以下代码:
svn propset svn:ignore -F ignorelist.txt .
或者,如果您不想使用文本文件,可以这样做:
svn propset svn:ignore "first
second
third" .
我找到了这篇文章 .svnignore Java 示例.
例子:.svnignore 用于 Ruby on Rails,
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
在那之后:
svn propset svn:ignore -F .svnignore .
.gitignore 的示例。您可以用于您的 .svnignore
好像没人提到过...
svn propedit svn:ignore .
然后编辑文件的内容以指定要忽略的模式,退出编辑器,一切就完成了。
使用 propedit 时,请确保没有任何尾随空格,因为这将导致文件从忽略列表中排除。
如果您在 Linux 上使用 tab-autocomplete 来创建文件,则会自动插入这些内容:
svn propset svn:ignore 'file1
file2' .
另一个解决方案是:
svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
或逐行
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
它能做什么:
- 从svn获取状态文件
- 保存所有文件 ? 到文件“svnignore.txt”
- 获取已忽略的文件并将其附加到文件“svnignore.txt”
- 告诉 svn 忽略“svnignore.txt”中的文件
- 删除文件
另外,如果你使用 Tortoise SVN,你可以这样做:
- 在上下文菜单中选择“TortoiseSVN”,然后选择“属性”
- 在出现的窗口中单击“新建”,然后单击“高级”
- 在“属性名称”对面出现的窗口中,选择或键入“svn:ignore”,在“属性值”对面键入所需的文件名或文件夹名称或文件掩码(在我的例子中是“* / target”),单击“应用”递归性质”
- 好的。好的。
- 犯罪
更具可读性的版本 比克比利的回答:
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
它能做什么:
- 从svn获取状态文件
- 保存所有文件 ? 到文件“svnignore.txt”
- 获取已忽略的文件并将其附加到文件“svnignore.txt”
- 告诉 svn 忽略“svnignore.txt”中的文件
- 删除文件
- cd ~/.subversion
- 打开配置
- 找到像“global-ignores”这样的行
- 设置忽略文件类型,如下所示:全局忽略 = *.o *.lo *.la *.al .libs *.so .所以.[0-9] *.pyc *.pyo 88 *.rej ~ ## .#* .*.swp .DS_Store node_modules 输出
您还可以在 SVN 的配置文件中设置全局忽略模式。
SVN ignore
在 TortoiseSVN 中易于管理。打开 TortoiseSVN 并右键单击文件菜单,然后选择添加到忽略列表。
这会将文件添加到 svn:ignore
财产。当我们检查文件时,那些与 svn:ignore
这将被忽略并且不会提交。
在 Visual Studio 项目中,我们添加了以下要忽略的文件:
bin obj
*.exe
*.dll
*.pdb
*.suo
我们正在 SVN 上管理源代码 比较陷阱 使用此方法成功
使用命令 svn状态 在您的工作副本上显示文件的状态,尚未受版本控制(且未被忽略)的文件旁边将有一个问号。
至于忽略文件,您需要编辑 svn:ignore 属性,请阅读 svnbook 中的忽略未版本化项目一章: http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html. 。本书还描述了更多关于使用 svn status 的信息。
- 打开您使用 JetBrains 产品(即皮查姆)
- 然后单击顶部工具栏上的“提交”按钮或使用快捷键“ctrl + k”截图工具栏
- 在提交界面上,将不需要的文件移动到另一个更改列表,如下所示。屏幕截图_提交_更改
- 下次您只能提交默认更改列表。