通过符号链接引用时无法提交svn受控目录

时间:2009-12-18 14:52:38

标签: svn version-control symlink

我有一个问题,我在另一个问题中描述得很差。我发布这个是为了让我更清楚我想做什么,以及我遇到了什么问题。有一个高度投票的答案,但它实际上并没有解决我的问题(简短的故事:我不是想在我的版本控制项目中添加符号链接目录)。

如果你已经知道颠覆是如何运作的,请跳到下面以获得实际问题。

我在命令行,当前的工作目录是我的主目录。

$> pwd
/home/user

我有一个svn项目。我们说它叫做some_project。我想将项目检查到real_directory/

$> svn checkout http://svnhost.net/some_project real_directory
A    real_directory/index.php
...
A    real_directory/robots.txt
Checked out revision 1143.

我没有cd加入该目录;在我的主目录中,我仍然在它之外:     $> PWD     /家庭/用户

然而我仍然可以在文件real_directory/上使用svn命令,即使它不是我当前的工作目录

$> svn status real_directory/
$> touch real_directory/new_file.txt
$> svn status real_directory/
?      real_directory/new_file.txt
$> svn add real_directory/new_file.txt
A         real_directory/new_file.txt

我指出这是为了澄清另一个问题中提出的误解。请注意,我在项目中添加了一个文件,但仍然在版本控制目录之外。我可以这样做是因为.svn/目录中存在real_directory目录。这就是real_directory/包含some_project subversion项目的原因,即使它有不同的名称。

$> ls real_directory/.svn
all-wcprops  entries  format  prop-base  props  text-base  tmp

(如果你已经知道这一点,请耐心等待我 - 我的原始问题得到了一个很好的答案,给出了关于使用颠覆做这件事能力的错误信息!)

这是svn命令的语法:

svn [svn-controlled directory] command

如果你没有指定目录,svn会假设你在谈论当前目录。所以这些都是等价的(当前工作目录在shell提示符下):

[ /home/user ]$ svn status real_directory/
A      real_directory/new_file.txt
[ /home/user ]$ cd real_directory/
[ /home/user/real_directory ]$ svn status .
A      new_file.txt
[ /home/user/real_directory ]$ svn status
A      new_file.txt

所以,回顾一下:我可以做任何我想做的事情而不是版本控制目录,就好像我在里面,只需指定目录当我发出我的svn命令。

好的,现在 已经,这是问题

当我为subversion控制目录创建一个符号链接时,svn会识别addstatus之类的命令,但不能识别commit

当我添加文件并询问其状态时,以下是symlink目录,就像真实目录一样:

$> svn status real_directory/
A      real_directory/new_file.txt
$> ln -s real_directory/ symlink
$> svn status symlink
A      symlink/new_file.txt
$> svn status real_directory/
A      real_directory/new_file.txt
$> touch symlink/another_new_file.txt
$> svn status symlink
?      symlink/another_new_file.txt
A      symlink/new_file.txt
$> svn add symlink/another_new_file.txt
A         symlink/another_new_file.txt
$> svn status symlink/
A      symlink/another_new_file.txt
A      symlink/new_file.txt

为了symlink/real_directory/的目的,请查看addstatus的行为方式如何? 问题:这在提交命令上失败:

$> svn commit symlink/ -m "test commit"
svn: '/home/user' is not a working copy
svn: Can't open file '/home/user/.svn/entries': No such file or directory

咦?那真是怪了。当我statusadd时,Svn肯定认为该文件存在!也许它被删除了?

$> ls symlink/.svn/entries
symlink/.svn/entries

不,还在那里。它还有数据吗?

$> ls -lha !$
ls -lha symlink/.svn/entries
-r--r--r-- 1 user group 14K 2009-12-18 06:36 symlink/.svn/entries
是的,似乎还可以!好吧,忘记尝试通过其符号链接提交目录。如何以真实名义提交目录呢?

$> svn commit real_directory/ -m "test commit"
Adding         real_directory/another_new_file.txt
Adding         real_directory/new_file.txt
Transmitting file data ..
Committed revision 1144.

工作正常。为什么svn在符号链接目录上使用addstatus,而不是commit

1 个答案:

答案 0 :(得分:2)

我发布到邮件列表并得到了一个很好的答案。

由于符号链接实际上是一个文件系统文件,所以正在发生的事情是svn认为我正在尝试将该符号链接作为文件提交给当前目录中的项目 - 基本上我原来是什么以为我想做!

正确的做法是

svn commit symbolic_link/*