如何忽略Subversion中的文件?
另外,如何找到不受版本控制的文件?
答案 0 :(得分:703)
(此答案已更新,以符合SVN 1.8和1.9的行为)
你有两个问题:
“忽略文件”我的意思是文件不会出现在列表中,即使是“未版本化”:你的SVN客户端会假装文件系统中根本不存在该文件。
忽略的文件由“文件模式”指定。 SVN的在线文档中解释了文件模式的语法和格式:http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html“Subversion中的文件模式”。
Subversion,从版本1.8(2013年6月)及更高版本开始,支持3种不同的指定文件模式的方法。以下是一些示例摘要:
global-ignores
选项:global-ignores
列表不会被其他用户共享,并且适用于您结帐到计算机上的所有存储。C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
和HKLM
中的HKCU
。~/.subversion/config
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
repo根目录上应用了“ignoreThis.txt
”,也不会忽略文件.
。
因此,要递归应用忽略列表,您必须使用svn propset svn:ignore <filePattern> . --recursive
。
<filePattern>
值不同,则子项的值完全覆盖父项,因此没有“附加”效果。<filePattern>
上的.
,则必须使用--recursive
更改它以覆盖子目录和后代目录。我注意到命令行语法是违反直觉的。
svn ignore pathToFileToIgnore.txt
的内容忽略SVN中的文件,但这不是SVN忽略功能的工作方式。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的术语(在他们的Windows资源管理器菜单系统中使用)最初误导我 - 我不确定Ignore菜单的“添加递归”,“添加*”和“添加”选项。我希望这篇文章解释了Ignore功能如何与SVN Properties功能绑定。也就是说,我建议使用命令行来设置被忽略的文件,这样你就可以了解它是如何工作的,而不是使用GUI,只有在你熟悉命令行之后才使用GUI来操作属性。
命令svn status
将隐藏被忽略的文件(即匹配RGA global-ignores
模式的文件,或匹配直接父目录的svn:ignore
模式或匹配任何ancesor目录的{{1模式。
使用svn:global-ignores
选项查看列出的文件。忽略的文件状态为--no-ignore
,然后将输出通过管道传输到I
,仅显示以“I”开头的行。
命令是:
grep
例如:
svn status --no-ignore | grep "^I"
TA-哒!
答案 1 :(得分:83)
使用以下命令创建不在版本控制文件下的列表。
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
答案 2 :(得分:47)
如果您使用TortoiseSVN,请右键单击文件,然后选择 TortoiseSVN /添加到忽略列表。这会将文件/通配符添加到svn:ignore
属性。
svn:ignore
,并且将忽略匹配的文件。我有一个Visual Studio .NET项目的以下忽略列表:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
您可以在 TortoiseSVN / Properties 的上下文菜单中找到此列表。
答案 3 :(得分:37)
您可以忽略 .gitignore 等文件或目录。只需创建一个您要忽略的目录/文件列表的文本文件,然后运行以下代码:
svn propset svn:ignore -F ignorelist.txt .
如果您不想使用文本文件,可以这样做:
svn propset svn:ignore "first
second
third" .
Source: Karsten's Blog - Set svn:ignore for multiple files from command line
答案 4 :(得分:21)
我找到了文章 .svnignore Example for Java 。
示例:Ruby on Rails的.svnignore,
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
之后:
svn propset svn:ignore -F .svnignore .
.gitignore的例子。您可以使用.svnignore
答案 5 :(得分:16)
似乎没有人提到它......
svn propedit svn:ignore .
然后编辑文件的内容以指定要忽略的模式,退出编辑器并完成所有操作。
答案 6 :(得分:10)
使用propedit时,请确保没有任何尾随空格,因为这会导致文件从忽略列表中排除。
如果您在linux上使用tab-autocomplete来创建文件,则会自动插入这些文件:
svn propset svn:ignore 'file1
file2' .
答案 7 :(得分:8)
另一种解决方案是:
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
它的作用:
答案 8 :(得分:7)
另外,如果你使用Tortoise SVN,你可以这样做:
答案 9 :(得分:5)
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
它的作用:
答案 10 :(得分:4)
答案 11 :(得分:3)
答案 12 :(得分:3)
SVN ignore
易于在TortoiseSVN中管理。打开TortoiseSVN并右键单击文件菜单,然后选择Add to ignore list。
这将在svn:ignore
属性中添加文件。
当我们检入文件时,那些与svn:ignore
匹配的文件将被忽略并且不会提交。
在Visual Studio项目中,我们添加了以下要忽略的文件:
bin obj
*.exe
*.dll
*.pdb
*.suo
我们正在使用此方法成功管理Comparetrap的SVN上的源代码
答案 13 :(得分:3)
Adding a directory to subversion, and ignoring the directory contents
svn propset svn:ignore '\*.*' .
或
svn propset svn:ignore '*' .
答案 14 :(得分:3)
您还可以在SVN的配置文件中设置全局忽略模式。
答案 15 :(得分:2)
使用工作副本上的命令 svn status 来显示文件的状态,尚未受版本控制(且未被忽略)的文件旁边会有一个问号。
至于忽略您需要编辑svn:ignore属性的文件,请阅读http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html中svnbook中忽略无版本项目一章。本书还介绍了有关使用svn状态的更多信息。
答案 16 :(得分:0)
extract
答案 17 :(得分:0)
对我有用的东西
如何在Subversion中忽略文件?
1.在文件资源管理器中,右键单击SVN项目的文件夹名称
2.点击“ SVN提交...”
3.将出现“提交”窗口
4.右键单击要忽略的文件夹/文件
5.单击“添加以忽略列表”
6.选择文件夹/文件
7.将“属性更改”提交给SVN
此外,如何查找不受版本控制的文件?
完成上述步骤3后,点击“显示未版本控制的文件”