【发布时间】:2010-09-10 07:20:58
【问题描述】:
如何在 Subversion 中忽略文件?
另外,我如何找到不受版本控制的文件?
【问题讨论】:
如何在 Subversion 中忽略文件?
另外,我如何找到不受版本控制的文件?
【问题讨论】:
(此答案已更新以匹配 SVN 1.8 和 1.9 的行为)
您有 2 个问题:
“忽略文件”是指该文件不会出现在列表中,即使是“未版本化”:您的 SVN 客户端会假装该文件在文件系统中根本不存在。
忽略的文件由“文件模式”指定。 SVN 的在线文档中解释了文件模式的语法和格式:http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html“Subversion 中的文件模式”。
从 1.8 版(2013 年 6 月)及更高版本开始,Subversion 支持 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 应用于目录并且是非递归的或继承的。任何与文件模式匹配的父目录的文件或 immediate 子目录都将被排除。虽然 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 ignore pathToFileToIgnore.txt 之类的内容来忽略 SVN 中的文件,但这不是 SVN 的忽略功能的工作方式。svn:global-ignores 属性。需要 SVN 1.8(2013 年 6 月):svn:ignore,不同之处在于它利用了SVN 1.8 的“继承属性”功能。svn:ignore 相比,文件模式会自动应用于每个后代目录(不仅仅是直接子目录)。
--recursive 标志设置 svn:global-ignores,因为继承的忽略文件模式会在继承时自动应用。运行与上一个示例相同的命令集,但使用 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 资源管理器菜单系统中使用)最初误导了我 - 我不确定忽略菜单的“递归添加”、“添加 *”和“添加”选项。我希望这篇文章解释了忽略功能如何与 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 propedit svn:ignore . 并且没有配置文本编辑器,你会收到一条错误消息,说 svn: E205007: 没有设置环境变量 SVN_EDITOR、VISUAL 或 EDITOR ,并且没有找到“editor-cmd”运行时配置选项,而不是打开编辑器。所以只需像这样指定 --editor-cmd nano svn propedit svn:ignore . --editor-cmd nano
svn status | grep '^?'
使用以下命令创建不在版本控制文件下的列表。
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 status | awk "/^?/ {print \$2}" > ignoring.txt。
svn pg svn:ignore . >> ignore.txt 在第一个命令之后将当前忽略附加到文件。
您可以忽略 .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
【讨论】:
svn:ignore 命令(参见stackoverflow.com/a/58380306/189518)
如果您使用TortoiseSVN,请右键单击文件,然后选择TortoiseSVN / 添加到忽略列表。这会将文件/通配符添加到 svn:ignore 属性中。
svn:ignore 将在您签入文件时被检查,匹配的文件将被忽略。我有以下 Visual Studio .NET 项目的忽略列表:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
您可以在 TortoiseSVN / Properties 的上下文菜单中找到此列表。
【讨论】:
似乎没有人提到它......
svn propedit svn:ignore .
然后编辑文件的内容以指定要忽略的模式,退出编辑器就完成了。
【讨论】:
我找到了这篇文章.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 使用
【讨论】:
使用 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
它的作用:
【讨论】:
另外,如果你使用 Tortoise SVN,你可以这样做:
【讨论】:
【讨论】:
config文件的回答。
bkbilly's answer: 更易读的版本
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
它的作用:
【讨论】:
什么对我有用(我正在使用 TortoiseSVN v1.13.1):
1.在文件资源管理器中,右键单击 SVN 项目文件夹名称
2.点击“SVN提交...”
3.会出现“提交”窗口
4.右键单击您要忽略的文件夹/文件
5.点击“添加到忽略列表”
6.选择要忽略的文件夹/文件名
7.提交“属性更改”到 SVN
【讨论】:
您还可以在 SVN 的配置文件中设置全局忽略模式。
【讨论】:
【讨论】:
Adding a directory to subversion, and ignoring the directory contents
svn propset svn:ignore '\*.*' .
或
svn propset svn:ignore '*' .
【讨论】:
在工作副本上使用命令 svn status 来显示文件的状态,尚未受版本控制(并且未被忽略)的文件旁边会带有一个问号。
关于忽略文件,您需要编辑 svn:ignore 属性,请阅读http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html svnbook 中的忽略未版本控制项一章。这本书还描述了更多关于使用 svn status 的内容。
【讨论】:
SVN ignore 在 TortoiseSVN 中很容易管理。打开 TortoiseSVN 并右键单击文件菜单然后选择添加到忽略列表。
这将在svn:ignore 属性中添加文件。
当我们签入文件时,那些与svn:ignore 匹配的文件将被忽略并且不会提交。
在 Visual Studio 项目中,我们添加了以下要忽略的文件:
bin obj
*.exe
*.dll
*.pdb
*.suo
我们正在使用此方法成功管理Comparetrap的SVN上的源代码
【讨论】:
【讨论】: