如何将svn文件夹移动到上一级

9

我需要将svn文件夹上移一级并保留所有历史记录。

https://myserver.com/svn/Project/trunk/下的所有文件和文件夹移动到https://myserver/svn/Project/中。

使用以下命令:

svn move https://myserver.com/svn/Project/trunk/ https://myserver/svn/Project/

但是它显示:

svn:无法将路径'https://myserver.com/svn/Project/trunk/'移动到自身中

谁知道我该如何解决这个问题? 谢谢!


代码库的布局看起来很合理。你为什么想要改变它呢? - zellus
请查看以下网址:https://dev59.com/WkbRa4cB1Zd3GeqPz2bS - zellus
谢谢,因为在我的情况下,主干道只是一个额外的链条,所以没有必要拥有它。 - ihorko
关于您发送给我的链接,那个人需要将额外的目录“trunk”添加到链中,而我需要将其删除。 - ihorko
7个回答

21

我也曾经寻找过这个问题的答案。后来我开始寻找解决方案,但实际上并没有找到一个合适的,不过这确实让我想到了一个解决方案。

你可能期望使用命令 svn mv ./folder ././folder 中的所有内容移动到 ./ 目录中。但事实并非如此,它只会将 folder 移动到当前目录中。由于它已经在当前目录中,所以该命令会失败。

因此,解决方案是将 ./folder内部的所有内容都移动到 ./ 目录中。事实上,下面的命令就可以做到:

svn mv ./folder/* ./


11
如果你愿意使用TortoiseSVN,那么你可以通过仓库浏览器直接移动文件夹。这就是我通常移动文件夹的方法,非常简单和无痛。

1
是的,我使用TortoiseSVN,在存储库浏览器中非常简单,非常感谢您的帮助!!! - ihorko
你是如何提交的?还是通过点击“提交”按钮来完成的?谢谢! - ephraim
据我所记,这会自动创建一个提交。 - Stefan Egli

1
我今天遇到了类似的问题,但我不知道如何从tortoise将其移动,因为我还有该文件夹的设置。
如果新位置 https://myserver/svn/Project/ 只应具有旧位置的项目,则我所做的是:
- 将 https://myserver.com/svn/Project/trunk/ 移动到一个新的临时位置(例如 https://myserver/svn/TempProject/); - 删除要使用的现有位置(https://myserver/svn/Project/); - 将 https://myserver/svn/TempProject/ 重命名为 https://myserver/svn/Project/。
这对我有用。它保留了所有历史记录、svn设置等。历史记录只是因为所有移动而产生了几个新条目。

1

我不知道你是否可以这样移动它,个人而言,我会先检出代码库,然后在文件系统中移动文件夹,最后提交更改,在一个位置删除它,在另一个位置添加它。


1
你不会保留历史记录,之后你只会拥有最后一次修订。 - ihorko
为什么?因为你会得到所有的更改,但是在新的树中。 - Tomasz Kowalczyk
当我仔细思考这个问题时,我发现另一种解决方案——在指定的树上转储存储库,比如说:svnadmin dump repo/path/other/inner > file.dump然后删除 "inner" 目录 -> 它将从存储库中移除,现在将其加载到另一个路径:svnadmin load /repo/ --parent-dir /path < file.dump这样您就可以提交所有目录树并保存历史记录。 - Tomasz Kowalczyk

1

谢谢,我尝试了,但 SVN 显示:svn: '.' 不是工作副本。 - ihorko
1
你是在项目所在的根目录下通过命令行运行了该命令吗? - Nix

0

我不相信你可以直接移动到现有目录(特别是存储库根目录)。也许--force选项可以帮助。

如果可以检出整个存储库,您可以将每个目录从主干移动到上一级,这似乎是更可靠的解决方案。

svn mv * ..

* 在某些 SVN 客户端上不受支持


-1
  1. https://myserver.com/svn检出一份工作副本
  2. 删除"Project"目录
  3. 将Project/trunk的最新版本复制到工作副本的根目录
  4. 提交

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接