我有这样的项目
project_dir
└── htdocs
SVN checkout在htdocs dir上执行,所以这是root目录,我有这个svn信息
工作副本根路径:/ home / user / project_dir / htdocs 网址:svn://mydomain.com/something
现在我想将SVN root从htdocs更改为一级,所以我以root身份登录到project_dir,而不是htdocs。
是否有一些简单的方法可以做到这一点,并保持htdocs中的所有文件完整(我有一些被忽略和非版本化的文件......)?
我试图在htdocs目录中执行它:
svn switch --relocate svn://mydomain.com/something svn://mydomain.com/something/htdocs
但是这个错误无效
svn: E195009: 'svn://mydomain.com/something/htdocs' is not the root of the repository
知道如何解决这个问题吗?
答案 0 :(得分:1)
我认为你不需要relocate
。您需要结帐svn://mydomain.com/something
,并且无法重新定位或切换svn://mydomain.com/something/htdocs
结帐。
您可以做的是结帐svn://mydomain.com/something
,删除其中的htdocs
目录,然后移动现有目录。你只需稍微移动目录,但它应该工作。例如:
cd /home/user
mv project_dir project_dir.bak
svn co svn://mydomain.com/something project_dir
rm -fr project_dir/htdocs
mv project_dir.bak/htdocs project_dir/
svn st project_dir
如果不能选择移动目录,这是另一种方式:
cd /home/user
svn co svn://mydomain.com/something something_new
mv something_new/.svn .
svn revert -R .
答案 1 :(得分:1)
您是在谈论重构存储库结构还是工作副本?
尽管可能,但我对重建存储库非常犹豫。但是,从您的一些陈述中,您可能希望重新构建工作目录。在Subversion 1.6及更低版本的版本中,这很简单,因为工作目录树中的每个目录都有一个完整的.svn
目录级别的目录。砍掉 root 不会导致任何问题。
但是,在Subversion 1.7中,工作目录的布局已更改。根目录中只有一个.svn
目录,而且它是整个工作目录的目录。关掉根将会打破你的工作副本。
但是,那么你要解决的问题是什么?如果您只在htdocs
子目录树中进行更改,则可以在该级别提交。当你进行提交时,你工作目录树的样子并没有什么区别。提交历史将是相同的。
如果问题是磁盘空间,请使用--set-depth
从工作目录中删除所有其他项目。或者,咬紧牙关,并对htdoc的目录进行新的检查:
$ svn co svn://mydomain.com/something/htdocs
移动服务器本身时使用relocate
命令。例如,我最近重新配置了我的Apache httpd服务器以从此处移动我的存储库URL:
http://svn.server.com/svn/CorporateServerTRD/trunk/...
到
http://svn.server.com/trd/trunk/...
svn relocate
进入图片的地方。这样,您可以将您的仓库移动到其他服务器,或从http://
切换到svn://
,反之亦然,用户不必重做结帐。 svn relocate
命令很快,因为只有一小部分信息必须更改。
还有另一个命令svn switch
(在早期版本中也是 relocate 命令)将您的工作副本从一个URL切换到另一个URL:
$ svn co svn://mydomain.com/something/trunk/htdocs
哎呀...我应该在3.2分支上完成我的工作:
$ svn switch svn://mydomain.com/something/branches/3.2/htdocs
你可以在你的工作目录上试试,但它肯定不会比新的结账更快。
如果您确实想要重构您的存储库,那么创建一个工作目录可能是最简单的:
# First, checkout the repository root with the first level of directories in it
$ svn co --set-depth=immediates $REPO_ROOT
# Now let's get all of the directories and files immediately under htdocs
$ svn up --set-depth=immediates htdocs
# You now want to remove everything from the root of your repo execept
# for the htdocs directory. If you're using BASH, you can do the following.
# If your on Windows, you may have to do the delete one at a time.
# shopt -s extglob
$ svn delete !(htdocs)
# Now move all the files and directories in the current `htdocs` to the
# root of the repository
$ svn mv htdocs/* ..
# Delete the now empty htdocs directory
$ svn delete htdocs
# Commit your changes
$ svn commit -m"Make 'htdocs' my new root."
现在,您的htdocs
内容将成为存储库的根目录。但是,您的提交历史记录将更难以遵循,合并或还原将更加困难。这就是为什么你没有充分理由盲目地移动和重组你的存储库的原因。
什么是好理由?如果您在没有它们的情况下设置您的仓库,可以在trunk
,branches
和tags
目录中添加。也许如果你的行李箱变得如此混乱,以至于你已经放弃它并且它的历史现在毫无意义。即使在那里,我也会犹豫不决。我宁愿合并回到一个好的主干而不是删除并将分支移动到那个地方。