“svn add *”甚至会添加被忽略的文件

时间:2010-11-05 14:43:36

标签: svn ignore

我使用svn add *将文件添加到svn,并添加了配置文件,肯定会添加到忽略。

lyuba@lyuba-laptop:/workspace/project$ svn propget svn:ignore
.sass-cache
config.js

可能导致问题的原因是什么?

5 个答案:

答案 0 :(得分:10)

在UNIX和Linux中,如果你说

svn add *

然后shell将展开目录中的所有文件,程序将看起来像你输入的那样

svn add file-a.txt file-b.txt file-c.txt

等。这意味着Subversion命令认为您已明确列出要添加的文件。在这种情况下,它会添加它,即使可能设置了svn:ignore属性。

documentation of svn:ignore(我的重点):

  

Subversion使用忽略模式来确定哪些文件不应作为更大的递归添加或导入操作的一部分扫描到版本控制系统中。

答案 1 :(得分:8)

超级老问题,但我刚刚遇到这个问题,我找到的解决方案没有列在这里。阿德里安史密斯的答案是正确的。我认为文档和SVN本身已经在5年内看到了许多更新。这是我在SVN docs

中找到的内容
  

即使设置了svn:ignore,如果在命令中使用shell通配符,也可能会遇到问题。在Subversion对它们进行操作之前,Shell通配符会扩展为明确的目标列表,因此运行svn SUBCOMMAND *就像运行svn SUBCOMMAND file1 file2 file3 …一样。对于svn add命令,这具有与传递--no-ignore选项类似的效果。因此,不要使用通配符,而是使用svn add --force .对未版本内容进行批量调度以进行添加。显式目标将确保不会因为版本控制而忽略当前目录,--force选项将导致Subversion爬过该目录,添加未版本控制的文件,同时仍然遵守svn:ignore属性和global-ignores运行时配置变量。如果您不希望对要添加的内容进行完全递归爬网,请务必同时为--depth files命令提供svn add选项。

短版本使用svn add --force .这对我来说非常有用。

答案 2 :(得分:1)

我发现this question包含一个非常好的解决方案。由于答案实际上没有回答这个问题,我认为它不重复。 简单地使用unix工具的强大功能(在windows上与cygwin一起使用):

svn status | grep '?' | sed 's/^.* /svn add /' | bash

答案 3 :(得分:1)

使用此命令代替svn add --force *

svn add --force ./

在这种情况下,svn本身解析目录中的所有文件并且它会考虑被忽略的文件,但是当你使用*时,你明确地告诉svn添加所有文件。

答案 4 :(得分:0)

您是否尝试过提交config.js以查看它是否真的被忽略了?我想如果你特意告诉svn将一个文件添加到版本控制中,那么它将超越忽略。