propset svn的问题:忽略 - 可能与Vista有关

时间:2008-10-02 07:44:38

标签: windows svn version-control

据我了解,忽略使用SVN的目录的内容的命令是:

svn propset svn:ignore "*" tmp/

这应该在tmp目录的内容上设置ignore属性,对吗?换句话说,通配符设置为tmp目录中的ignore值。麻烦的是,这是我的Windows盒子上发生的事情:

> svn propset svn:ignore "*" ./tmp
property 'svn:ignore' set on 'app'
property 'svn:ignore' set on 'config'
property 'svn:ignore' set on 'db'
property 'svn:ignore' set on 'doc'
property 'svn:ignore' set on 'lib'
property 'svn:ignore' set on 'log'
property 'svn:ignore' set on 'nbproject'
property 'svn:ignore' set on 'public'
[etc...]

那不对。我做错了什么(或者可能是疯了),还是我的Windows上的svn坏了?

有些说明:

  

> svn --version
svn, version 1.5.2 (r32768)
compiled Aug 28 2008, 19:05:34


更新: 我刚刚在Windows XP计算机上试过这个,它按预期工作。因此,这是Vista特定问题,或者我的Vista配置存在问题。还有其他人能够在Vista上重现这个问题吗?我刚刚发现Vista未被列为CollabNet downloads page支持的平台之一。

8 个答案:

答案 0 :(得分:8)

看起来微软凭借其无限的智慧,拥有changed the behavior of wildcard expansion in Windows Vista

因此,不是传入转义的通配符,而是扩展它:

  

在Win 95,98,2000,XP下,应用程序按预期运行:当参数类似于«* .txt»时,它会进行通配符扩展,当参数类似于«“* .txt”»时,它不会。在Windows Vista下,通配符扩展始终发生,或者说,否则,双引号不会抑制它。

Collabnet forum 会对此问题进行进一步讨论。

答案 1 :(得分:5)

命令应该 按预期工作。

*正在全球化,它不应该做。所以,你正在运行:
svn propset svn:ignore [value] app config db doc lib log nbproject public ... tmp
(因为app是受影响的第一个文件夹,我猜它之前还有另一个文件夹)。

你可以尝试两件事:

  1. 指定列表文件:svn propset svn:ignore tmp -F .svnignore
  2. 只需指定路径:svn propset svn:ignore tmp。这应该打开您的默认文本编辑器(如果已配置),以允许您编写和保存列表。

  3. 回复评论

    由于您现在正在尝试更正设置,propeditpropdel可以正常工作 - 尤其是如果目录中有其他更改。

    但是,如果您不需要担心任何其他更改(请检查svn st),使用svn revert -Rsvn propset会更快。

答案 2 :(得分:3)

这不回答你的svn问题,但为什么你试图忽略目录的所有内容?在我看来,如果你想在构建中的某个点上建立一个临时目录,你应该将目录作为构建的一部分,而不是从存储库中存在。

你是否试图忽略它,因为它已经存在并且你无法删除它?

无论如何,从我的unix命令行开始,这对我来说在一个名为tmp的指令中忽略未跟踪的文件

$ svn --version
svn, version 1.5.1 (r32289)
   compiled Aug 28 2008, 10:00:12

$  svn propset svn:ignore '*' tmp

Windows会引用你的报价吗?

答案 3 :(得分:3)

听起来像为windows编译的svn.exe二进制文件正在进行内置的globbing,这在unix构建中通常不会这样做,因为unix shell在构造命令时应该进行通配线。我会考虑这种意想不到的行为,特别是因为你似乎无法解决这个问题。

正如其他人所指出的那样,您可以使用*选项提供-F,也可以在文本编辑器中以交互方式提供。{/ p>

但是,我认为你可能不会以最简单的方式解决这个问题。为了忽略整个子目录,我会做这样的事情:

svn propset svn:ignore tmp .

这会在svn:ignore(当前目录,.的父目录)上设置tmp/属性,告诉它忽略tmp子目录及其下的所有内容。< / p>

答案 4 :(得分:2)

您使用的是哪种版本的颠覆?

我在Windows上尝试过1.5.2,它只更改了tmp目录中的属性:

[C:\Temp\temp] :svn propset svn:ignore "*" tmp/
property 'svn:ignore' set on 'tmp'

[C:\Temp\temp] :svn proplist *
svn: Skipping argument: '.svn' ends in a reserved name
Properties on 'tmp':
  svn:ignore

答案 5 :(得分:1)

对于使用“-F”替代方法在shell脚本中使用的单行,只需尝试:

echo "*" > .svnignore && svn propset svn:ignore <path> -F .svnignore && rm .svnignore

答案 6 :(得分:0)

尝试没有尾部斜杠。此外,必须将tmp目录本身添加到存储库中。

答案 7 :(得分:0)

使用GUI SVN客户端是合理的(除非你是受虐狂!)。如果你在Windows上TortoiseSVN应该是你的第一个停靠港。右键单击要忽略的文件,然后单击“TortoiseSVN - &gt; Properties”。在属性对话框中,您可以通过单击“名称”的下拉箭头并选择“svn:ignore”来忽略整个目录。然后在值框中只输入“*”。这当然没有引号。

相关问题