我有一组文件正在SVN存储库中复制和重命名,以便尽可能多地保留文件历史记录。除了从源复制到目标之外,我已经以新的形式获得了新文件,并在其他位置对其内容进行了一些更新。我正在通过从新文件顶部的另一个位置复制新文件的更新版本来对文件应用更改。所以序列如下:
# Copy and rename the files within svn
svn cp <old-directory><old-file-name> <new-directory>/<new-filename>
# Copy and update version of the new file in place
cp <updated-directory>/<new-filename> <new-directory>/<new-filename>
然后我可以看看文件的状态,我得到了:
A + <new-directory>/<new-filename>
我理解为此文件将被移动(提交后)
顺便说一句,我复制而不是移动的原因是代码非常关键,因此我们希望分阶段进行。
在某些情况下,<old-directory>
与<new-directory>
相同,因此它只是名称更改和一些内部更改。对这些文件执行svn log
可提供正常的日志历史记录。但是在其他情况下,复制文件时,<new-directory>
不存在,我必须在svn中创建一个新目录,我使用了:
svn mkdir <new-directory>
这些文件和目录也显示为A +
,如下所示:
A <new-directory>
A + <new-directory>/<new-filename-one>
A + <new-directory>/<new-filename-two>
虽然当我尝试对这些文件执行svn log
时,我收到以下错误消息:
svn: Unable to find repository location for '<new-directory>/<new-filename>' in revision 0
我不确定我是否在这里犯了错误:在将文件添加到目录之前,我是否应该提交svn mkdir
?也许在我承诺一切之后它会自行解决?我还没有提交这些文件,因为我并不特别希望深入到一个我不得不解开的漏洞。
答案 0 :(得分:1)
通常,如果您在Subversion中创建一个新目录,并将文件添加到该目录中,svn status
仅显示您正在添加新文件和该目录。
$ svn mkdir foo
A foo
$ cd foo
$ touch bar fu barfu
$ svn add *
A bar
A fu
A barfu
$ cd ..
$ svn status
A foo
A foo\bar
A foo\fu
A foo\barfu
请注意,我的状态显示我正在添加目录foo
以及该目录下的三个文件。
当我尝试将文件复制到不存在的目录时,我收到错误svn: E155007: Path '<myNewDir>' is not a directory
,所以我必须先创建该目录。
所以,我想问题是你的 完成 svn status
是什么样的?它包含新目录,还是仅包含您移动的文件?
此外,您的目录名称是否可能以http://
或foo://
开头,这是否令Subversion感到困惑?
您的错误消息是:
svn: Unable to find repository location for '<new-directory>/<new-filename>' in revision 0
我最后注意到了 revision 0
,而且它正在讨论存储库位置,这看起来就像是在试图访问不是你本地的工作目录,但是一个URL。