Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';通过symlink引用时不提交svn控制的目录_Svn_Version Control_Symlink - Fatal编程技术网

Can';通过symlink引用时不提交svn控制的目录

Can';通过symlink引用时不提交svn控制的目录,svn,version-control,symlink,Svn,Version Control,Symlink,我有一个问题,我在另一个问题中描述得很糟糕。我发布这篇文章是为了更清楚地说明我想做什么,以及我遇到了什么问题。有一个投票率很高的答案,但它实际上并没有解决我的问题(简而言之:我并没有试图将符号链接目录添加到我的版本控制项目中) 如果您已经知道subversion是如何工作的,请跳到下面了解实际问题。 我在命令行,当前工作目录是我的主目录 $> pwd /home/user 我有一个svn项目。假设它被称为some\u项目。我想将项目签出到real\u目录/ $> svn check

我有一个问题,我在另一个问题中描述得很糟糕。我发布这篇文章是为了更清楚地说明我想做什么,以及我遇到了什么问题。有一个投票率很高的答案,但它实际上并没有解决我的问题(简而言之:我并没有试图将符号链接目录添加到我的版本控制项目中)

如果您已经知道subversion是如何工作的,请跳到下面了解实际问题。

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

$> pwd
/home/user
我有一个svn项目。假设它被称为
some\u项目
。我想将项目签出到
real\u目录/

$> svn checkout http://svnhost.net/some_project real_directory
A    real_directory/index.php
...
A    real_directory/robots.txt
Checked out revision 1143.
我没有
cd
ed进入那个目录;我仍然在它之外,在我的主目录中: $>pwd /家庭/用户

但是我仍然可以在文件
real\u目录/
上使用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
我指出这一点是为了澄清另一个问题中的误解。注意,我在项目中添加了一个文件,但仍然在版本控制目录之外。我之所以能够这样做,是因为
real\u目录
中存在
.svn/
目录。这就是为什么
real\u目录/
包含
some\u项目
subversion项目的原因,即使它有不同的名称

$> ls real_directory/.svn
all-wcprops  entries  format  prop-base  props  text-base  tmp
(如果你已经知道这一点,请耐心听我说——我最初的问题有一个经过投票表决的答案,它给出了有关使用subversion进行此操作的能力的错误信息!)

这是
svn
命令的语法:

svn [svn-controlled directory] command
如果不指定目录,svn将假定您正在谈论当前目录。因此所有这些都是等效的(当前工作目录在shell提示符中):

因此,概括一下:我可以做任何我想做的事情,而不是在版本控制目录中,就像我在它里面一样,只要在发出svn命令时指定目录即可

好了,现在这已经不成问题了,问题来了:

当我创建一个指向subversion控制目录的符号链接时,svn会将其识别为
add
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
请参见
symlink/
如何像
real\u 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
嗯?真奇怪。当我执行
status
add
时,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使用符号链接目录上的
add
status
,而不是
commit

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

因为符号链接实际上是一个文件系统文件,所以svn认为我正在尝试将该符号链接作为当前目录中项目的文件提交——基本上是Ire最初认为我想要做的

正确的做法是

svn commit symbolic_link/*

这是一个原始的、结构不好的问题:(我认为答案中有事实上的错误:)我删除了这个答案,因为它回答的问题与你实际问的问题不同。不管它值多少钱,我想你最好在SVN邮件列表上问这个问题:
svn commit symbolic_link/*