如何忽略Subversion中的文件?
另外,如何查找不受版本控制的文件?
(此答案已更新,以符合SVN 1.8和1.9的行为)
你有两个问题:
将文件标记为已忽略:
"忽略文件"我的意思是文件不会出现在列表中,即使是"未版本化":您的SVN客户端将假装文件系统中根本不存在该文件。
忽略的文件由"文件模式"指定。 SVN的在线文档中解释了文件模式的语法和格式:http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html"Subversion中的文件模式"。
从版本1.8(2013年6月)及更高版本开始,Subversion支持3种不同的指定文件模式的方法。以下是一些示例摘要:
1 - 运行时配置区 - global-ignores选项:
-
这是仅限客户端的设置,因此您的global-ignores列表不会被其他用户共享,并且它适用于您结帐到计算机上的所有存储库。
-
此设置在运行时配置区域文件中定义:
-
Windows(基于文件) - C:\Users\{you}\AppData
oaming\Subversion\config
-
Windows(基于注册表) - HKLM和HKCU中的Software\Tigris.org\Subversion\Config\Miscellany\global-ignores。
-
Linux / Unix - ~/.subversion/config
2 - svn:ignore属性,在目录(而不是文件)上设置:
-
这存储在repo中,因此其他用户将具有相同的忽略文件。与.gitignore的工作方式类似。
-
svn:ignore应用于目录,并且是非递归或继承的。将排除与文件模式匹配的父目录的任何文件或直接子目录。
-
虽然SVN 1.8添加了"继承属性"的概念,但在非直接后代目录中忽略svn:ignore属性本身:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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 |
(因此,即使在. repo根目录上应用"ignoreThis.txt",也不会忽略文件./subdirectory/ignoreThis。
-
因此,要递归应用忽略列表,必须使用svn propset svn:ignore . --recursive。
-
这将在每个子目录上创建属性的副本。
-
如果子目录中的值不同,则子项的值将完全覆盖父项,因此不存在"附加"效果。
-
因此,如果更改根.上的,则必须使用--recursive更改它以在子目录和子目录上覆盖它。
-
我注意到命令行语法是违反直觉的。
-
我开始假设您通过键入类似svn ignore pathToFileToIgnore.txt的内容忽略SVN中的文件,但这不是SVN的忽略功能的工作方式。
3- svn:global-ignores属性。需要SVN 1.8(2013年6月):
对于TortoiseSVN用户:
这整个安排对我来说很困惑,因为TortoiseSVN的术语(在他们的Windows资源管理器菜单系统中使用)最初误导我 - 我不确定忽略菜单的"添加递归","添加*"和"添加"的重要性选项。我希望这篇文章解释了Ignore功能如何与SVN Properties功能绑定。也就是说,我建议使用命令行来设置被忽略的文件,这样你就可以了解它的工作方式,而不是使用GUI,只有在熟悉命令行后才使用GUI来操作属性。
列出被忽略的文件:
命令svn status将隐藏被忽略的文件(即匹配RGA global-ignores模式的文件,或匹配直接父目录的svn:ignore模式或匹配任何ancesor目录的svn:global-ignores模式。
使用--no-ignore选项查看列出的文件。忽略的文件的状态为I,然后将输出传递给grep,仅显示以"I"开头的行。
命令是:
1
| svn status --no-ignore | grep"^I" |
例如:
1 2 3 4 5 6 7 8 9 10 11
| 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 |
当当!
使用以下命令创建不在版本控制文件下的列表。
1
| svn status | grep"^\?" | awk"{print \$2}"> ignoring.txt |
然后编辑该文件,只留下您想要忽略的文件。然后使用这个忽略文件中列出的文件:
1
| svn propset svn:ignore -F ignoring.txt . |
注意该行末尾的点。它告诉SVN该属性是在当前目录中设置的。
删除文件:
最后提交,
1
| svn ci --message"ignoring some files" |
然后,您可以通过以下方式检查忽略哪些文件
如果您使用的是TortoiseSVN,请右键单击文件,然后选择TortoiseSVN / Add to ignore list。这会将文件/通配符添加到svn:ignore属性。
检入文件时将检查svn:ignore,并忽略匹配的文件。我有一个Visual Studio .NET项目的以下忽略列表:
1 2 3 4 5 6
| bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo |
您可以在TortoiseSVN / Properties的上下文菜单中找到此列表。
.gitignore喜欢的方法
您可以忽略像.gitignore这样的文件或目录。只需创建一个您要忽略的目录/文件列表的文本文件,然后运行以下代码:
1
| svn propset svn:ignore -F ignorelist.txt . |
或者,如果您不想使用文本文件,可以这样做:
1 2 3
| svn propset svn:ignore"first
second
third" . |
来源:Karsten的博客 - 设置svn:从命令行忽略多个文件
我发现了Java的文章.svnignore示例。
示例:Ruby on Rails的.svnignore,
1 2 3 4 5 6 7 8
| /log
/public/*.JPEG
/public/*.webp
/public/*.webp
/public/*.webp
*.*~ |
在那之后:
1
| svn propset svn:ignore -F .svnignore . |
.gitignore的例子。您可以使用.svnignore
https://github.com/github/gitignore
似乎没有人提到它......
1
| svn propedit svn:ignore . |
然后编辑文件的内容以指定要忽略的模式,退出编辑器并完成所有操作。
使用propedit时,请确保没有任何尾随空格,因为这将导致文件从忽略列表中排除。
如果你在linux上使用tab-autocomplete创建文件开头,它们会自动插入:
1 2
| svn propset svn:ignore 'file1
file2' . |
另一种解决方案是
1
| svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt |
或逐行
1 2 3 4
| 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",然后选择"属性"
在出现的窗口中单击"新建",然后单击"高级"
在"Property name"对面的出现窗口中选择或输入"svn:ignore",与"Property value"相反输入所需的文件名或文件夹名或文件掩码(在我的例子中是"* / target"),单击"Apply"属性递归"
好。好。
承诺
bkbilly答案的更易阅读的版本:
1 2 3 4
| 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'这样的行
设置忽略文件类型如下:global-ignores = * .o * .lo * .la * .al .libs * .so .so。[0-9] * .pyc * .pyo
88 * .rej~ ##。#*。*。swp .DS_Store node_modules输出
将目录添加到subversion,并忽略目录内容
1
| svn propset svn:ignore '\*.*' . |
要么
1
| svn propset svn:ignore '*' . |
您还可以在SVN的配置文件中设置全局忽略模式。
svn status将告诉您哪些文件不在SVN中,以及哪些文件已更改。
查看ignore属性的SVN属性。
对于所有SVN,红皮书是必读的。
SVN ignore易于在TortoiseSVN中管理。打开TortoiseSVN并右键单击文件菜单,然后选择添加到忽略列表。
这将添加svn:ignore属性中的文件。
当我们检入文件时,那些与svn:ignore匹配的文件将被忽略并且不会提交。
在Visual Studio项目中,我们添加了以下要忽略的文件:
1 2 3 4 5
| bin obj
*.exe
*.dll
*.pdb
*.suo |
我们正在使用此方法成功管理Comparetrap的SVN上的源代码
在工作副本上使用命令svn status来显示文件的状态,尚未受版本控制(并且未被忽略)的文件旁边会有一个问号。
至于忽略需要编辑svn:ignore属性的文件,请阅读http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore中svnbook中忽略无版本项目一章。 HTML。本书还介绍了有关使用svn状态的更多信息。
打开你使用JetBrains产品(即Pycharm)
然后单击顶部工具栏上的"提交"按钮或使用快捷键'ctrl + k'
screenshot_toolbar
在提交界面上,将您不需要的文件移动到另一个更改列表,如下所示。
screenshot_commit_change
下次您只能提交默认更改列表。