Subversion 状态符号“ ~”是什么意思?

当我做 svn status的时候,我得到了一个波浪的符号。

下面是在 XCode 中编辑后的项目输出。

svn status
M      build/Currency_Converter.build/Currency_Converter.pbxindex/imports.pbxbtree
M      build/Currency_Converter.build/Currency_Converter.pbxindex/pbxindex.header
M      build/Currency_Converter.build/Currency_Converter.pbxindex/symbols0.pbxsymbols
~      build/Currency_Converter.build/Currency_Converter.pbxindex/strings.pbxstrings
M      main.m
//more changed files

你知道这意味着什么吗? 在 google 或者任何 svn 的备忘单上都找不到。

有趣的是,我只编辑 main.m,但是有很多修改过的文件。我不知道为什么。有人对使用 SVN 和 XCode 有什么建议吗?我应该只将源文件置于版本控制之下吗?

编辑: 由一个已经处于版本控制下的文件被另一种类型的文件替换引起。在本例中,strings.pbxstring 曾经是一个文件,现在变成了一个目录。这个故事的寓意是不要把你的构建文件夹放到版本控制中。

75468 次浏览

The SVN 书 says:

Item 被定义为一种对象(文件、目录、链接) ,但已被不同类型的对象替换。

因此,也许它最初是一个单独的文件,但是您将其更改为一个目录,或者沿着这些线路进行的其他操作?

From

svn help status

“ ~”版本化的项目被某种不同的项目阻碍

我只看到这里的文件权限已经改变,svn 没有执行访问它,我相信。

希望这个能帮上忙。

解决这个问题最简单的方法是备份,然后删除具有这个状态的文件夹或文件,然后执行“ svn up”: 它不一定是一个文件替换的文件夹,它可能只是。Svn 文件夹丢失或损坏。

It may be also matter of symbolic links under Windows. When you commit symbolic link into SVN and then check it out under Windows, links are changed to regular files and this is also reported as ~.

方法时可能会发生这种情况。文件夹中的 svn 文件夹(例如,当您删除一个目录,然后再创建相同的目录) ,或者当您用符号链接替换一个目录时,或者用相同名称替换一个文件时。

假设它是一个名为 a-file 的文件夹,您可以通过在父文件夹中发出以下命令来解决这个问题:

$ find a-folder -type d -name '.svn' -print0 | xargs -0 rm -Rf
$ svn up --force .
svn: Directory 'logs/.svn' containing working copy admin area is missing
$ svn up --force .
E    a-folder
...
Updated to revision n.

And then it's matter of svn adding/removing and commiting the changes again

我是这么做的:

如果文件夹为 Test,则为

  1. Mv 测试测试1
  2. 移除测试
  3. Mv Test1测试

遇到了类似的问题,SVN 抱怨锁。我们是这样做的:

  • 备份了文件
  • 用 rm-r (linux)删除有问题的目录
  • 在目录上运行 Svn 清理
  • 在目录上运行 svn up --force

我只是想告诉大家,这是在 Joomla 安装扩展时经常遇到的问题。扩展是通过 CMS 安装的,由 apache 拥有,不需要组写。通常,下一步是将文件添加到 SVN,但是如果不执行 sudo 或更改文件 perms,则当 SVN 无法写入。Svn 目录。这是简单的解决办法。

mv foo foo-bak
svn up foo
svn revert foo


# just for good measure. Foo should not show up in the two following commands.
ls | grep foo
svn st | grep foo


mv foo-bak foo
svn add foo
svn delete --keep-local x
svn commit -m "del x"
svn add x
svn commit -m "blah"
~ versioned item obstructed by some item of a different kind
Second column: Modifications of a file's or directory's properties

我经常有这样的升级模块下(例如) Joomla!Wordpress 或 Drupal。有时候。通过升级过程删除 svn 目录。

# rename updated directory
mv foo foo.new


# restore the old directory
svn up foo


# merge / update the old directory with new items
# notice that the above command will preserve the obsolete files
# so you should do a diff -r in order to remove them
cp -r foo.new/* foo


# Add files commit, etc
svn add foo/*
svn delete foo/xx
svn commit -m "updated module"