当前位置:  开发笔记 > 编程语言 > 正文

如何忽略Subversion中的文件?

如何解决《如何忽略Subversion中的文件?》经验,为你挑选了10个好方法。

如何忽略Subversion中的文件?

另外,如何查找不受版本控制的文件?



1> andyuk..:

(此答案已更新,以符合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\Roaming\Subversion\config

Windows(基于注册表) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignoresHKLMHKCU.

Linux/Unix - ~/.subversion/config

2 - svn:ignore属性,在目录(而不是文件)上设置:

这存储在repo中,因此其他用户将具有相同的忽略文件.类似于如何.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.repo根目录上应用了" " ,也不会忽略该文件.

因此,要递归地应用忽略列表,您必须使用svn propset svn:ignore . --recursive.

这将在每个子目录上创建属性的副本.

如果子目录中的值不同,则子项的值完全覆盖父项,因此没有"附加"效果.

因此,如果更改根目录.,则必须更改它--recursive以覆盖子目录和子目录.

我注意到命令行语法是违反直觉的.

我开始假设您通过键入类似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资源管理器菜单系统中使用)最初误导我 - 我不确定忽略菜单的"添加递归","添加*"和"添加"的重要性选项.我希望这篇文章解释了Ignore功能如何与SVN Properties功能绑定.也就是说,我建议使用命令行来设置被忽略的文件,这样你就可以了解它的工作方式,而不是使用GUI,只有在熟悉命令行后才使用GUI来操作属性.

列出被忽略的文件:

该命令svn status将隐藏被忽略的文件(即匹配RGA global-ignores模式的文件,或匹配直接父目录的svn:ignore模式或匹配任何ancesor目录的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

当当!


您还可以使用"--recursive"参数忽略所有子文件夹中具有特定文件名的文件.即**svn propset svn:忽略"*.jpg".--recursive**
如果你是ssh'ing svn propedit svn:ignore .`并且没有配置文本编辑器你将收到一条错误消息,说明_svn:E205007:没有设置环境变量SVN_EDITOR,VISUAL或EDITOR,也没有'编辑器 - 找到cmd'运行时配置选项而不是打开编辑器.所以只需指定_-- editor-cmd nano_就像这个`svn propedit svn:ignore.--editor-cmd nano`
要查找被忽略的文件:svn status -u -v --no-ignore | grep"^ I"| awk"{print\$ 2}"
如果你想忽略文件./FolderA/FolderB/FileToIgnore,请从你的文件中删除.文件夹:svn propset svn:忽略"FileToIgnore"FolderA/FolderB /
awk的一个更简单的替代方法是grep:`svn status | grep'^?'`

2> ulitosCoder..:

使用以下命令创建不在版本控制文件下的列表.

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


为什么删除文件?如果你需要重新创建/添加/删除,请将其保存在repo中
尼斯.一个小的改进是`svn status | awk"/ ^?/ {print\$ 2}"> ignoring.txt`.

3> artur02..:

如果您使用的是TortoiseSVN,请右键单击文件,然后选择TortoiseSVN/Add to ignore list.这会将文件/通配符添加到svn:ignore属性中.

svn:ignore检查文件时将检查,匹配的文件将被忽略.我有一个Visual Studio .NET项目的以下忽略列表:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

您可以在TortoiseSVN/Properties的上下文菜单中找到此列表.



4> Adrian Enriq..:

您可以忽略像.gitignore这样的文件或目录.只需创建一个您要忽略的目录/文件列表的文本文件,然后运行以下代码:

svn propset svn:ignore -F ignorelist.txt .

或者,如果您不想使用文本文件,可以这样做:

svn propset svn:ignore "first
 second
 third" .

来源:Karsten的博客 - 设置svn:从命令行忽略多个文件



5> 小智..:

似乎没有人提到它......

svn propedit svn:ignore .

然后编辑文件的内容以指定要忽略的模式,退出编辑器并完成所有操作.


这个答案很有用.在我的情况下,我需要改变"." 到我想忽略的文件的子目录,只需指定文件模式.另外,第一次,我需要运行它(我在Mac上):export SVN_EDITOR ="nano"

6> d.danailov..:

我发现了Java的文章 .svnignore示例.

示例:Ruby on Rails的.svnignore,

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

在那之后:

svn propset svn:ignore -F .svnignore .

.gitignore的例子.您可以使用.svnignore

https://github.com/github/gitignore



7> Kenneth..:

使用propedit时,请确保没有任何尾随空格,因为这会导致文件从忽略列表中排除.

如果你在linux上使用tab-autocomplete创建文件开头,它们会自动插入:

svn propset svn:ignore 'file1
file2' .


这仅适用于某些shell,例如bash.请注意,重新发出propset命令会覆盖先前的一组模式.

8> bkbilly..:

另一种解决方案是

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"中的文件

    删除文件



9> msangel..:

此外,如果您使用Tortoise SVN,您可以这样做:

    在上下文菜单中选择"TortoiseSVN",然后选择"属性"

    在出现的窗口中单击"新建",然后单击"高级"

    在"Property name"对面的出现窗口中选择或输入"svn:ignore",与"Property value"相反输入所需的文件名或文件夹名或文件掩码(在我的例子中是"*/target"),单击"Apply"属性递归"

    好.好.

    承诺



10> 小智..:

bkbilly答案的更易阅读的版本:

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"中的文件

    删除文件

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有