[英]Convert an SVN checkout to use git (git-svn)
我使用保存在 svn 中的软件进行版本控制。 我想使用 git (git-svn) 但是该软件需要大量设置和配置才能使用。 有一些工具可以处理所有设置,包括通过 svn 检查所有代码。
git-svn 的所有文档(我已经能够找到)都需要使用 git-svn 重新结帐。
有没有办法转换现有的 svn checkout 以便它可以使用 git-svn?
不,一个 git-svn 克隆将整个存储库转换为 git。 SVN 签出没有整个存储库,因此无法从中克隆。 这是从 SVN 或 CVS 切换到分布式系统(如 git)的主要优势。
你可以这样做:
我假设您可能想保留历史记录。 但是,如果您(或任何其他偶然发现此页面的人)不需要历史记录,您可以使用此处解释的“导出”功能: https ://stackoverflow.com/a/419475/2437521。
另一种不修改原始 Subversion 工作副本且不需要您复制它的方法是使用补丁:
git reset --hard :/r<revision>
强制它在克隆后成为相同的修订版,其中<revision>
是 Subversion 工作副本更新到的修订版(请参阅此处使用svn info
)。cd
到您的 Subversion 工作副本。svn status
确保所有新文件都标记为A
(或使用svn add
添加它们),并且所有已删除的文件都标记为D
(或使用svn rm
删除它们)。svn diff >patch.diff
创建补丁文件。patch.diff
复制到之前创建的 Git 存储库的顶部。cd
到之前创建的 Git 存储库的顶部。git apply -p0 patch.diff
以将补丁应用到 Git 存储库的工作树上。 现在您可以使用git status
完成更改,然后git add
/ git commit
它们保存在本地存储库中。
这似乎有效:
(警告:我没有对此进行足够的测试。请在尝试之前进行备份。)
用当前的 SVN URL 初始化 git-svn:
git svn init $(svn info --show-item=url)
获取 Git 的 SVN HEAD。 不幸的是,这会下载 HEAD 而不是使用本地结帐,但它只下载到.git
。
git svn fetch -r HEAD
git-svn fetch 会抱怨类似
错误:未跟踪的工作树文件“”将被合并覆盖。
但是当前提交将对应于 SVN HEAD。 工作目录将保留在原处。
暂存区现在包含 SVN HEAD; 取消它。
git reset HEAD -- .
存储库的状态现在应该与您执行git svn clone -r HEAD <URL>
然后在顶部应用您的更改相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.