从工作副本重建本地 SVN 存储库
Rebuilding local SVN repository from working copy
我一直在使用 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 客户端上工作,因为该工作副本是最新的。)
关于如何将这些文件放入新存储库而无需重新排列所有内容的任何建议?
(注意:"give up on svn and move to git" 实际上是一个相当可接受的答案,但我仍然需要指导;我在这两个方面的经验同样有限!)
- 您必须才能正确使用
svn import
,因为此命令"commit an unversioned file or tree into the repository"并且您必须准备未版本化导入前从您的 WC 树
- 每个工作副本都link编辑到单个存储库,并且这种关系存储在 WC 的元数据中,您必须更改它才能linkold WC and new repo with
svn relocate
command
- 为了成功将您的 WC 重新定位到新的存储库,您必须为新存储库提供相同的 UUID,因为它在旧存储库中
svnadmin setuuid
因此
您漫长的迁移之路
- 创建您的 WC 的未版本控制副本
- 创建新的本地空存储库(我建议为
svn://
访问类型准备和使用 svnserve,而不是第一步中的 file:///
)
- 获取旧仓库的 UUID(WC 中的
svn info | grep UUID
)并将其应用于新仓库
- 将树从未版本化的副本导入到新的 repo(到相同的相对路径,就像在旧的 repo 中一样)
- 将您现有的 WC 重新定位到新存储库
- 尝试
svn up
验证结果
但你可以更愿意完全忘记旧的回购并使用
你的捷径
- 创建您的 WC 的未版本控制副本
- 创建新的本地空存储库(我建议为
svn://
访问类型准备和使用 svnserve,而不是第一步中的 file:///
)
- 将树从未版本化的副本导入到新的 repo
- 使用
svn ls -R <REPO-ROOT-URL>
导入的测试结果
- 删除|存档旧 WC 并将新 WC 从新存储库检出到旧位置
我一直在使用 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 客户端上工作,因为该工作副本是最新的。)
关于如何将这些文件放入新存储库而无需重新排列所有内容的任何建议?
(注意:"give up on svn and move to git" 实际上是一个相当可接受的答案,但我仍然需要指导;我在这两个方面的经验同样有限!)
- 您必须才能正确使用
svn import
,因为此命令"commit an unversioned file or tree into the repository"并且您必须准备未版本化导入前从您的 WC 树 - 每个工作副本都link编辑到单个存储库,并且这种关系存储在 WC 的元数据中,您必须更改它才能linkold WC and new repo with
svn relocate
command - 为了成功将您的 WC 重新定位到新的存储库,您必须为新存储库提供相同的 UUID,因为它在旧存储库中
svnadmin setuuid
因此
您漫长的迁移之路
- 创建您的 WC 的未版本控制副本
- 创建新的本地空存储库(我建议为
svn://
访问类型准备和使用 svnserve,而不是第一步中的file:///
) - 获取旧仓库的 UUID(WC 中的
svn info | grep UUID
)并将其应用于新仓库 - 将树从未版本化的副本导入到新的 repo(到相同的相对路径,就像在旧的 repo 中一样)
- 将您现有的 WC 重新定位到新存储库
- 尝试
svn up
验证结果
但你可以更愿意完全忘记旧的回购并使用
你的捷径
- 创建您的 WC 的未版本控制副本
- 创建新的本地空存储库(我建议为
svn://
访问类型准备和使用 svnserve,而不是第一步中的file:///
) - 将树从未版本化的副本导入到新的 repo
- 使用
svn ls -R <REPO-ROOT-URL>
导入的测试结果
- 删除|存档旧 WC 并将新 WC 从新存储库检出到旧位置