2008-10-02 40 views
4

据我了解,该命令忽略使用SVN目录的内容是这样的:问题的propset命令的svn:忽略 - 可能是Vista的相关

svn propset svn:ignore "*" tmp/ 

这应该设置忽略属性上的内容的tmp目录,对不对?换句话说,通配符被设置为tmp目录上的忽略值。麻烦的是,这是我的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上支持的平台之一。

+0

得到了我的Mac的bash shell中一样,通配符总是被扩大。如果我通过“\ *”转义它,它实际上以svn:ignore属性结束,包括反斜杠。 使用Mac OS X 10.6.3。我有一些先进的bash自动完成脚本安装,不知道他们或我的进化添加bash配置的其他影响这一点。 – 2010-04-14 15:13:45

回答

5

该命令应该正如你所期望的那样工作。

*正在变成globbed,它不应该这样做。所以,你正在运行:
svn propset svn:ignore [value] app config db doc lib log nbproject public ... tmp
(因为应用程序是第一个文件夹的影响,我猜它还有另一个文件夹)。

2您可以尝试:

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

回复评论

既然你现在试图纠正设置,propeditpropdel会很好地工作 - 特别是如果你有目录内的其他变化。

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

+0

对于你的观点#2,不应该是propedit,而不是propset? – 2008-10-02 11:48:09

+0

我已接受此答案。乔纳森对发生了什么问题给出了清晰的解释(部分 - 请参阅我自己的答案以获得完整的解释),并提供了两种解决方案。 – 2008-10-02 14:10:57

+0

谢谢乔纳森。是的,我在尝试解决这个问题时做了很多回复。 :)请注意,在回复的第一部分中,您仍然有一些错别字。 – 2008-10-03 06:32:53

0

尝试不用斜线。另外,tmp目录本身必须被添加到存储库。

+0

tmp目录肯定被添加到回购。删除尾部斜线并没有什么区别。 – 2008-10-02 07:51:26

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是否horking您的报价diretory忽略未跟踪文件?

3

这听起来好像编译窗口svn.exe二进制做内置的通配符,这是一件好事,它通常不会在UNIX做构建,因为UNIX外壳意料之中的事,而建设通配符命令行。我会考虑这种意外的行为,特别是因为你似乎无法解决这个问题。

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

不过,我想你可能不会以最简单的方式去了解这一点。对于无视整个子目录,我会做这样的事情:

svn propset svn:ignore tmp . 

此项为.svn:ignore属性(在当前目录下的tmp/母公司),告诉它忽略tmp子目录,一切都在它之下。

2

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

我试图1.5.2在Windows上,它只是改变了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 
8

它看起来像微软,在其无穷的智慧,有changed the behavior of wildcard expansion in Windows Vista

因此,不是通过传入的通配符,而是扩展:

下盘赢95,98,2000,XP,应用程序运行正常:它通配符扩展,当参数都喜欢«* .TXT»,它不会当参数都喜欢«的‘* .​​txt’»。在Windows Vista下,通配符扩展始终发生,或者,否则,双引号不会抑制它。

上有Collabnet forum在这个问题上进一步讨论。

0

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

1

对于一个班轮在使用“F”的替代shell脚本使用,只需试试这个:

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