svn - 从工作副本重建本地 SVN 存储库
问题描述
我一直在 Dropbox 中使用本地 SVN 存储库开展一个项目,但它的修订历史似乎已损坏无法修复,现在所有签入都失败了。所以我正在考虑从现有的工作副本创建一个新的存储库。只要我可以保持开发环境中的实际路径相同(在我的 Mac 和 Windows 开发机器上),我可以丢失历史记录。
当然,如果我只是尝试使用svn import
导入本地文件... svn 不会将现有路径识别为工作副本,它将迫使我将它们检出,从而更改所有内容的位置。
我已经尝试trunk/Client
在新的空存储库中创建一个空文件夹并将其签出到我现有的<main dev folder>/Client
目录中,以便我可以将所有项目重新添加到其中...但是 SVN 客户端拒绝添加 的内容<main dev folder>/Client
,因为它检测到它们已经在旧存储库的版本控制之下。
另外,当然,即使我确实在我的 Mac 开发机器上检查了它们,我也需要拉一个类似的开关来让 Windows 开发机器从新的存储库同步它的工作副本。(我在 Mac 上使用 svnX,在 Windows 上使用 TortoiseSVN——但我使用的是 Mac 客户端,因为该工作副本是最新的。)
有关如何将这些文件放入新存储库而无需重新排列所有内容的任何建议?
(注意:“放弃 svn 并转向 git”实际上是一个相当可接受的答案,但我仍然需要指导;我在这两个方面的经验同样有限!)
解决方案
- 您必须正确使用
svn import
,因为此命令“将未版本化的文件或树提交到存储库中”并且您必须在导入之前从 WC 中准备未版本化的树 - 每个工作副本都链接到单个存储库,并且此关系存储在 WC 的元数据中,您必须更改它才能使用命令链接旧 WC和新 repo
svn relocate
- 为了成功地将您的 WC 重新定位到新存储库,您必须为新存储库提供与旧存储库中相同的 UUID
svnadmin setuuid
因此
您漫长的迁移路径
- 创建 WC 的未版本控制副本
- 创建新的本地空存储库(我建议准备和使用 svnserve 作为
svn://
访问类型,而不是file:///
从第一步开始) - 获取旧仓库的 UUID(
svn info | grep UUID
在 WC 中)并将其应用于新仓库 - 将树从未版本控制的副本导入新的 repo(到相同的相对路径,就像在旧的 repo 中一样)
- 将现有的 WC 迁移到新的存储库
- 尝试
svn up
验证结果
但你可以宁愿完全忘记旧的回购并使用
你的捷径
- 创建 WC 的未版本控制副本
- 创建新的本地空存储库(我建议准备和使用 svnserve 作为
svn://
访问类型,而不是file:///
从第一步开始) - 将树从未版本控制的副本导入新的 repo
- 导入的测试结果
svn ls -R <REPO-ROOT-URL>
- 删除|归档旧 WC 并将新 WC 从新存储库中检出到旧位置
推荐阅读
- sqlite - 在 ASP.NET Core 2.1 中使用带有实体框架核心的 Sqlite 不起作用
- spring-boot - Eureka server not working properly, after while
- python - 将数字数据(保存在文本文件中)读入 python 的正确方法是什么?
- python - 在numpy中找到单一颜色的投影矩形的角
- r - 如何删除 R 中 FASTA 格式参数中的间隙或空闲空间?
- php - Laravel 检测刀片页面上是否有错误
- django - 如何将内存文件转换为文件对象
- pandas - Pandas 中的选择行
- android - carouselPicker 意图活动中的错误
- python - 序列生成器中的错误:StopIteration:列表索引超出范围