如何忽略Subversion中的文件?

如何忽略Subversion中的文件?

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

(这个答案已经更新,以符合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种不同的指定文件模式的方式。 以下是一些例子的总结:

1 – 运行时configuration区域 – global-ignores选项:

  • 这是客户端唯一的设置,因此您的global-ignores列表将不会被其他用户共享,并且适用于您在计算机上签出的所有回购。
  • 此设置在运行时configuration区域文件中定义:
    • Windows(基于文件) – C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows(基于registry) – Software\Tigris.org\Subversion\Config\Miscellany\global-ignoresHKLMHKCU
    • Linux / Unix – ~/.subversion/config

2 – 在目录(不是文件)上设置的svn:ignore属性:

  • 这是存储在回购,所以其他用户将具有相同的忽略文件。 类似于.gitignore工作方式。
  • svn:ignore应用于目录,不是recursion的或inheritance的。 与文件模式匹配的父目录的任何文件或直接子目录都将被排除。
  • 虽然SVN 1.8增加了“inheritance属性”的概念,但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 ”应用在ignoreThis.txt根目录下)。

  • 因此,要recursion地应用一个忽略列表,你必须使用svn propset svn:ignore <filePattern> . --recursive svn propset svn:ignore <filePattern> . --recursive

    • 这将在每个子目录中创build一个属性的副本。
    • 如果<filePattern>值在子目录中不同,那么子值完全覆盖父项,所以不存在“叠加”效应。
    • 所以如果你改变根目录下的<filePattern> . ,那么你必须改变它 – --recursive覆盖它的子和后代目录。
  • 我注意到命令行语法是违反直觉的。

    • 我开始假设你会忽略SVN中的一个文件,通过键入类似svn ignore pathToFileToIgnore.txt但是这不是SVN的忽略function如何工作。

3- svn:global-ignores属性。 需要SVN 1.8(2013年6月):

  • 这与svn:ignore类似,除了它使用SVN 1.8的“inheritance属性”function。
  • svn:ignore ,文件模式会自动应用于每个后代目录(不仅仅是直接的子目录)。
    • 这意味着不需要使用--recursive标志设置svn:global-ignores ,因为inheritance的忽略文件模式会在inheritance时自动应用。
  • 运行与前面例子中相同的一组命令,但使用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资源pipe理器菜单系统中使用)最初是误导我的 – 我不确定Ignore菜单的“Add recursively”,“Add *”和“Add”选项。 我希望这篇文章解释了Ignore特性如何与SVN特性绑定。 也就是说,我build议使用命令行设置忽略的文件,以便您了解它是如何工作的,而不是使用GUI,只有在熟悉命令行后才使用GUI来操作属性。

列出被忽略的文件:

命令svn status会隐藏被忽略的文件(即匹配RGA global-ignores文件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 

当当!

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

 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 

如果您使用的是TortoiseSVN ,请右键单击文件,然后selectTortoiseSVN /添加忽略列表 。 这会将文件/通配符添加到svn:ignore属性。

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

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

您可以在TortoiseSVN / Properties的上下文菜单中find此列表。

您可以忽略像.gitignore这样的文件或目录。 只要创build一个你想忽略的目录/文件列表的文本文件,并运行下面的代码:

 svn propset svn:ignore -F ignorelist.txt . 

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

 svn propset svn:ignore "first second third" . 

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

我find了文章.svnignore Java示例

例如: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

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

如果您在Linux上使用tab-autocomplete来创build文件,则会自动插入:

 svn propset svn:ignore 'file1 file2' . 

另一个解决scheme是

 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 

它能做什么:

  1. 从svn获取状态文件
  2. 保存所有文件 到文件“svnignore.txt”
  3. 获取已被忽略的文件并将其附加到文件“svnignore.txt”
  4. 告诉svn忽略“svnignore.txt”中的文件
  5. 删除文件

另外,如果你使用龟SVN你可以这样做:

  1. 在上下文菜单中select“TortoiseSVN”,然后select“属性”
  2. 在出现的窗口中点击“新build”,然后“高级”
  3. 在出现的窗口对面的“属性名称”select或键入“SVN:忽略”,相反的“属性值”键入所需的文件名或文件夹名称或文件掩码(在我的情况下它是“* /目标”),单击“应用财产recursion“
  4. 好。 好。
  5. 承诺

svn status会告诉你哪些文件不在SVN中,以及改变了什么。

查看忽略属性的SVN属性 。

对于SVN的所有内容, 红皮书都是必读的。

添加一个目录到颠覆,并忽略目录内容

 svn propset svn:ignore '\*.*' . 

要么

 svn propset svn:ignore '*' . 

bkbilly的答案更可读的版本:

 svn st | awk '/^?/{print $2}' > svnignore.txt svn propget svn:ignore >> svnignore.txt svn propset svn:ignore -F svnignore.txt . rm svnignore.txt 

它能做什么:

  1. 从svn获取状态文件
  2. 保存所有文件 到文件“svnignore.txt”
  3. 获取已被忽略的文件并将其附加到文件“svnignore.txt”
  4. 告诉svn忽略“svnignore.txt”中的文件
  5. 删除文件

你也可以在SVN的configuration文件中设置全局忽略模式。

使用工作副本上的命令svn status来显示文件的状态,尚未受版本控制(且不被忽略)的文件将在其旁边有一个问号。

至于忽略文件,您需要编辑svn:ignore属性,请阅读http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore中的忽略svnbook中的未版本化项目一章。; HTML 。 本书还介绍了更多关于使用svn状态的信息。

正如没有人似乎提到它…

 svn propedit svn:ignore . 

然后编辑文件的内容来指定要忽略的模式,退出编辑器,你就完成了。

  1. cd〜/ .subversion
  2. 打开configuration
  3. find像'global-ignores'这样的行
  4. 设置忽略这样的文件types:global-ignores = * .o * .lo * .la * .al .libs * .so .so。[0-9] * .pyc * .pyo 88 * .rej〜## #*。*。swp .DS_Store node_modules输出