尝试查看几十个帖子,但仍然没有得到我想要的。
Preface:
我们最初有一个非常大的 SVN 存储库,没有主干(标准结构)等。所以,我正在工作的项目也没有结构(在子文件夹内)。我在这个项目上工作了大约几个月,然后遇到了一个情况,我需要一个分支来进行生产修复。因此,我只将项目代码重组为主干、标签和分支(即 SVN 存储库中的子目录)。然后从历史记录中我创建了一个名为Live并对生产进行修复并部署它。然后我将此修复合并到我的trunk没有任何问题。我们继续努力trunk也继续部署,但是由于SVN不必要的复杂性没有合并trunk to Live尽管我们的部署很少。 (这都是SVN里的)
移民:
我们最近决定设置一个新的 TFS 服务器并通过 GIT 进行版本控制。所以,安装完成后,我有一个任务是将这个项目的代码迁移到GIT。我开始使用“git svn clone”在本地 PC 上执行此操作,并很高兴看到我的所有历史记录都已迁移。拥有分支机构:
-
master:源自 trunk,我可以看到从我在 SVN 中重新构建它时起的历史记录。
-
Live:从 SVN 存储库的开头(项目文件夹创建日期)返回并正确标记为分支名称。
问题是分支已断开(没有加入节点):-(
请看下图:
根据上图,主分支从突出显示的提交(节点)开始,但实时分支仅从 SVN 第一次提交开始。
理想情况下,我希望在真正创建时将 master 和 Live 上的所有内容显示为 master 的分支。另外,当我尝试签出 Live 分支时,我收到警告,它已分离 HEAD,并且我可能无法获取/推送到主(即 HEAD)分支的提交。
有人可以向我发送解决此情况的步骤吗?
我认为可能的解决方案:
- 重命名master to svn-主干 and Live to SVN-Live
- 然后创建一个名为master from SVN-Live(它在远程会有任何冲突吗?)在我完成重组时的提交(突出显示之前的一个,即“Live 2656”)。
- Merge SVN主干在师父身上。
- 创建新分支,命名为Live来自此 HEAD(目前最终代码正在生产中)。
这个过程可能会产生负面影响,所以我很谨慎。
- 我唯一担心的是它是否允许我合并来自断开连接的提交SVN主干到我的新master? (现在 Git 扩展向我展示了将 Live 合并到 Master 的选项,但没有其他方式。
- 另外,如果我在本地进行反复试验并搞砸了事情,应该如何重置回当前状态?
Update:
重命名了分支并基于“Live@2656”创建了master。现在,尝试将“Svn-trunk”合并到 master (新分支) - 我收到以下错误:
fatal: refusing to merge unrelated histories
Done
也许开始一个新的git svn clone
因为它可能会减轻一些头痛。此外,将此类获取的 git 存储库的副本保存在安全的地方也不是一个坏主意:)
还有两种方法你可以尝试...
可能性#1 - 修复结构
一种更简洁的方法是重建存储库的真实结构。如果我理解正确的话trunk
是在历史上的某个时刻创建的。如果你能够找到那个地方在历史中你也许可以使用git rebase <SHA of that spot in branch Live>
将历史重新连接在一起。不过,可能会出现一些冲突。
However,如果您已将一些开发进度合并回Live
而在 SVN 上,您可能会在合并时遇到困难。为了避免这种情况,您可以将这些合并重建为正确的合并提交,但如果您不需要有正确的历史记录,那么可能不值得花时间......
可能性#2 - 只需变基
或者如果您根本不关心正确的历史记录,则可以使用更简单的解决方案......
git checkout master
git rebase Live
您唯一需要确定的是可能发生的冲突的解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)