从SVN迁移后断开GIT分支

2024-02-29

尝试查看几十个帖子,但仍然没有得到我想要的。

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(使用前将#替换为@)

从SVN迁移后断开GIT分支 的相关文章

  • GitLab CI - 添加标签时避免构建

    添加 git 标签时如何防止触发 gitlab ci 管道 我在本地运行此命令 而不是在 gitlab ci 作业中运行 git tag a xyz 然后推送标签 这会触发各种管道 我想排除其中一些管道的运行 我正在尝试对诸如以下问题的想法
  • 为什么 git mergetool 说“没有文件需要合并”?

    我正在尝试将 BeyondCompare4 配置为 git 中的 difftool 和 mergetool 我使用的是 git 版本 2 5 0 windows 1 到目前为止 BeyondCompare4 作为 difftool 工作得很
  • 致命:早期 EOF 致命:索引包失败

    我用谷歌搜索并找到了很多解决方案 但没有一个适合我 我试图通过连接到 LAN 网络中的远程服务器来从一台计算机进行克隆 从另一台机器运行此命令会导致错误 但是在服务器上使用 git 192 168 8 5 运行相同的克隆命令 一切正常并且成
  • 签出现有的远程分支

    我见过不同的方法来检查现有的远程分支 假设我的朋友推送了新分支 bigbug 并且我想签出并将我的本地工作副本切换到该分支 我有以下选项 1 git checkout b bigbug origin bigbug 2 git checkou
  • 在 git 提交消息中使用任何 utf-8 字符是否安全?

    我发现使用 UTF8 字符 例如 很有用 请参阅here http www utf8icons com subsets dingbats 在提交消息中 重构 NewService 添加了更好的服务 OldServiceA 据我所见 它see
  • 如何避免开发人员将凭证推送到 bitbucket?

    我们有一个应用程序 它使用 JSON 文件来定义数据库和其他 API 的连接字符串和凭据 理想情况下 这些凭证作为变量添加到 bitbucket 存储库中 并在 Jenkins 的构建期间进行替换 开发商在当地与他们合作时更换了他们 我们需
  • git 克隆错误:致命:git upload-pack:由于远程端可能的存储库损坏而中止

    我对 git 存储库具有读 写访问权限 但是当我尝试 git clone 时 出现以下错误 x ubuntu temp git clone email protected cdn cgi l email protection Corp ap
  • 有关多个远程存储库的 Git 状态

    我有一个脚本 如果我忘记在 40 多个存储库中提交或推送一些代码 它会通过电子邮件向我发送提醒 在我的两个项目中 我遵循了这些帖子中的答案 其中我设置了 git push 来推送到多个存储库 从多个远程位置拉 推 https stackov
  • 如何让 git 和 copSSH 在正确的目录中查找密钥?

    我刚刚安装了 Windows 版 copSSH 当我启动它时 我得到一个目录C copSSH home Nick ssh其中有我的酒吧和私钥 当我通过 Cygwin bash 窗口访问此目录时 使用 ssh 用户 主机 我很高兴地登录了 但
  • 由于不存在大文件而导致 git Push 错误

    当尝试推送到 git 时 我不断得到相同的结果 Counting objects 78 done Delta compression using up to 4 threads Compressing objects 100 67 67 d
  • 通过链接进入 git-repo,无需冗长的对话框

    In a directory I have symbolic links into a git administered directory all under Linux Every time I want to e dit such a
  • 如何使用 vim 作为“git show”编辑器?

    全部如所述如何使用 vim 作为 git log 编辑器 https stackoverflow com questions 16666009 how do i use vim as git log editor不适用于 git show
  • ssh 连接超时

    我无法在 git 中 ssh 到 github bitbucket 或 gitlab 我通常会收到以下错误消息 如何避免它 输出 ssh T email protected cdn cgi l email protection i ssh
  • TeamCity 将功能分支推送到主分支

    有没有办法将成功构建的功能分支推送到另一个分支 我想要这样的东西 Git 存储库 Gitorious GitHub 等 分支机构 master 当前项目的代码 质量保证 代码等待 QA 的分支 功能分支 许多远程分支 开发人员可以在其中开发
  • 如何在Windows上分离“Git bash”中启动的“git gui”?

    例如 我开始 git bash 我导航到某个目录 I start git gui 我关闭控制台窗口或按 Ctrl C Git gui 的窗口消失了 即使我用过git gui disown 即使当我按 Ctrl C 时它不在前台 如何正确分离
  • 从 github 中删除子项目提交

    我有两个存储库A and B 我错误地在我的机器上将仓库 B 克隆到了 A 内 我从存储库 B 中删除了所有代码 但是当我在源上从 A 推送并合并代码时 它还显示了子项目提交B在 Github 仓库上 我想从我的 master 上删除子项目
  • 如何升级 Windows 中 git svn 使用的 SVN 版本?

    我的公司正在将SVN升级到1 7 检查git svn version显示正在使用的SVN版本是1 4 6 我想获得 git svn 使用的 SVN 版本接近 1 7 但是 我没有看到有关更新 git svn 使用的 SVN 版本 在 Win
  • 是否可以在 git 存储库之外添加和提交文件?

    我们的文本文件分布在系统的各个角落 我们计划将这些文件中所做的所有修改添加到 git 存储库中 每次对这些文件进行修改都是由脚本进行的 因此 我们计划向该脚本添加新命令 以将文件添加到 git 存储库 但是 这些修改是同时进行的 我们可以为
  • Git:压缩 master 上提交的最简单方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 git 将最后 X 次提交压缩在一起 https stackoverflow com questions 5189560 how can i squash my last x commits
  • 致命:不是 git 存储库(或任何父目录):.git [重复]

    这个问题在这里已经有答案了 当我尝试推送 github com 上的现有存储库时 当我输入命令时 网站提示我将其输入终端 我收到了以下致命错误消息 Not a git repository or any of the parent dire

随机推荐