我有一个问题,我在另一个问题中描述得不好。我发布这个是为了更清楚我想要做什么,以及我遇到了什么问题。有一个高度投票的答案,但它实际上并没有解决我的问题(短篇小说:我没有尝试将符号链接目录添加到我的版本控制项目中)。
如果您已经知道 subversion 是如何工作的,请跳到下面以获取实际问题。
我在命令行,当前工作目录是我的主目录。
$> 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 /home/user
然而我仍然可以对文件使用 svn 命令real_directory/
,即使它不是我当前的工作目录
$> 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
颠覆项目的原因,即使它有不同的名称。
$> 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 可以识别它用于诸如add
and之类的命令status
,但不能识别commit
!
当我添加文件并询问其状态时,这里的符号链接目录就像真实目录一样工作:
$> 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
看看出于 and 的目的,行为symlink/
如何?问题:提交命令失败:real_directory/
add
status
$> 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
嗯?这很奇怪。当我这样做时,Svn 肯定认为该文件存在status
并且add
!也许它被删除了?
$> 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 可以在符号链接目录上工作,但add
不能?status
commit