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

时间:2020-03-06 15:00:51  来源:igfitidea点击:

据我了解,使用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损坏了吗?

一些注意事项:

  • 机器正在运行Windows Vista SP1
  • 通过Tortoise设置此属性非常有效。
  • 我正在使用Windows的Collabnet二进制文件:
> svn --version

  svn, version 1.5.2 (r32768)

         compiled Aug 28 2008, 19:05:34

更新:我刚刚在Windows XP机器上尝试过此方法,它可以按预期工作。因此,这可能是Vista的特定问题,或者我的Vista配置存在问题。还有其他人能够在Vista上重现此问题吗?我刚刚发现,CollabNet下载页面上没有将Vista列为受支持的平台之一。

解决方案

尝试时不要使用斜杠。另外,必须将tmp目录本身添加到存储库中。

该命令应该按预期工作。

*变得团团了,它不应该这样做。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。因此,我们正在运行:
svn propset svn:ignore [value]应用程序配置数据库db doc lib日志nbproject public ... tmp
(因为应用程序是受影响的第一个文件夹,所以我猜在它之前还有另一个文件夹)。

我们可以尝试2件事:

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

回复评论

由于我们现在正尝试更正设置,因此propeditpropdel可以正常工作-特别是如果目录中有其他更改。

但是,如果我们没有其他需要担心的更改(请检查svn st),使用svn revert -Rsvn propset会更快。

这不能回答svn问题,但是为什么要尝试忽略目录的所有内容?在我看来,如果我们希望在构建中的某个位置建立一个临时目录,则应将该目录作为构建的一部分,而不是从存储库中放置该目录。

我们是否要忽略它,因为它已经存在并且无法删除?

无论如何,从我的unix命令行开始,这对我来说可以忽略目录tmp中未跟踪的文件

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

$  svn propset svn:ignore '*' tmp

Windows是否要求我们报价?

在我看来,为Windows编译的svn.exe二进制文件正在执行内置globing,这在unix构建上通常不会执行,因为在构造命令行时,unix shell会进行globing。我会考虑这种意外行为,尤其是因为我们似乎无法解决问题。

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

但是,我认为我们可能不会以最简单的方式进行此操作。为了忽略整个子目录,我将执行以下操作:

svn propset svn:ignore tmp .

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

我们正在使用哪个版本的Subversion?

我在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

看起来微软以其无限的智慧改变了Windows Vista中通配符扩展的行为:

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

Under Win 95, 98, 2000, XP, the application runs as expected: it does wildcard expansion when parameters are like ?*.txt? and it does NOT when parameters are like ?"*.txt"?. Under Windows Vista, wildcard expansion takes place always, or, said otherwise, double quotation marks DOES NOT suppress it.

在Collabnet论坛上有关于此问题的进一步讨论。

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

对于要使用" -F"替代方案在shell脚本中使用的单行代码,只需尝试以下操作:

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