从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分支 的相关文章

  • 克隆包含所有子模块的 git 存储库

    我有一个工作 git 存储库 其中包含几个子模块 通过克隆不同的存储库获得 现在 我想要复制整个存储库 包含所有子模块 通过使用推送或克隆到另一台机器上的裸 git 存储库 我很高兴失去子模块的历史记录 我只是对保留它们的内容感兴趣 这可能
  • 如何使用它们的更改来解决选择冲突?

    My git cherry pick FOO产生了冲突 我可以检查冲突的文件并删除之间的行 lt lt lt lt lt lt lt and 以及冲突标记本身 但我希望有一种更简单的方法 我觉得svn等同于选择theirs conflict
  • Git 子模块在 Windows 上更新缓慢

    Git 子模块在 Windows 上似乎非常慢 为了测试性能 我创建了 3 个裸存储库并向它们提交了 3 条独立消息 未存储文件 然后 我将每个裸存储库作为子模块添加到新的 git 存储库中 并执行子模块更新 花费了 5 秒多的时间 当使用
  • git push origin 分支名总是推送到 master

    我搜索了一下 但似乎找不到答案 在我可以访问的两个盒子上 当我执行 git push dry run origin mytestbranch 时 我得到以下结果 To email protected cdn cgi l email prot
  • Git:man 命令不起作用

    在 Git Bash 中 他们给了我一个error用于返回 man command man git bash man command not found 我的 Git 版本 git version git version 2 18 0 wi
  • 如何在 Android Studio 中比较两个 Git 分支?

    我不确定是否可以将主分支 或任何其他分支 与当前功能分支进行比较 例如GIT does 我想要两个分支 主分支和功能分支 之间的差异 以便我可以在合并之前比较差异 我发现 Git UI 对用户不太友好 就像在 AS 中一样 我可以遍历代码并
  • 命令来确定当前 HEAD 的上游引用?

    我正在寻找我所希望的简单的一行命令确定当前签出分支的正确上游引用 本质上就像是 git branch remote HEAD 如果有效 会将符号模式 HEAD 转换为当前分支名称 然后选项 remote然后将其更改为远程跟踪分支的引用 但它
  • 使用 Git 的 Spring Cloud 配置服务器 - 无法克隆或签出存储库连接超时

    我正在使用 GIT 在 Spring Cloud Config Server 上进行 POC Spring Boot 1 5 3 RELEASE 爪哇1 8 弹簧工具套件https github com kishornpatil https
  • Git:结帐而不运行结帐后挂钩

    我有一个我喜欢的结帐后挂钩 大多数时候 但有时我知道运行它会浪费时间 或者 因为它会删除并重建我的开发数据库 所以我不希望它去做它的事情 有没有跳过钩子的 git 选项 公平地说 我已经开始寻找一个了 我认为没有命令行选项可以完成您想要的操
  • Git - 推送到远程存储库中的远程跟踪分支

    当简单地做git push到远程存储库 其master分支得到更新 对于非裸存储库来说 这是不希望出现的情况 最近的 Git 版本显示的警告消息清楚地表明了这一点 我希望能够推送到远程存储库 并拥有其之一远程追踪分支进行更新 稍后 当我登录
  • 如何查看上次提交和现在之间发生了什么变化(进行一些更改后)

    与此类似question https stackoverflow com questions 1552340 how to list the file names only that changed between two commits但
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • 交互式变基后,本地 Git 分支已偏离原始分支

    我有一个本地分行 CRM ayrshireminis 其中有一些我已推送到原点的提交 origin CRM ayrshireminis 这个分支是从创建的develop大约一周前的一个分支 其他合作者已经在该分支上完成了一周的工作 我想做的
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • git 预提交钩子格式代码 - Intellij/Android Studio

    本要点展示了如何在预提交时使用 Eclipse 格式化程序自动格式化 Java 代码 Source https gist github com ktoso 708972 https gist github com ktoso 708972
  • 相当于“svn update -r”的 git 是什么?

    我是最近的 git 转换者 能够使用 git svn 将我的分支保留在本地而不干扰 svn 服务器真是太棒了 最新版本的代码中存在一个错误 我想确定一个它起作用的时间 以便我可以使用 git bisect 我找不到正确的命令来及时返回 谢谢
  • Git:如何变基到特定提交?

    我想变基到特定的提交 而不是另一个分支的 HEAD A B C master D topic to A B C master D topic 代替 A B C master D topic 我怎样才能做到这一点 您可以通过在您喜欢的提交上创
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • refname 不明确且拉取失败

    我运行了以下命令 因为我想将生产分支移回而不必先签出 git branch f production HEAD 1 现在 当我检查生产时 我收到以下警告 warning refname production is ambiguous 然后我

随机推荐