使用 Git 分叉 SVN 项目的最佳方式

2023-12-30

我使用 Git 分叉了一个 SVN 项目,因为我需要添加他们不想要的功能。但与此同时,我希望能够继续将他们添加到上游版本的功能或修复引入到我的分支中(它们不冲突)。因此,我的 Git 项目具有以下分支:

  • master - 我实际构建和部署的分支
  • feature_*** - 我工作或曾经从事新事物的功能分支,然后在完成后将其合并到 master
  • vendor-svn - 我的本地 git-svn 分支,允许我从他们的 svn 存储库中“git svn rebase”
  • vendor - 我将vendor-svn合并到的本地分支。然后我将这个(供应商)分支推送到公共 git 存储库(github)

所以,我的流程是这样的:

git checkout vendor-svn
git svn rebase
git checkout vendor
git merge vendor-svn
git push origin vendor

现在,问题来了:我需要审查他们所做的每个提交(最好是单独审查,因为此时我大约落后于他们二十个提交)before将它们合并到 master 中。我知道我可以跑git checkout 大师; git 合并供应商,但这会引入所有更改并提交它们,而我无法查看它们是否与我需要的相冲突。

那么,最好的方法是什么? Git 似乎是处理项目分支的一个很好的工具,因为你可以从多个存储库中拉取和推送 - 我只是没有足够的经验来知道执行此操作的最佳方法。

这是我正在谈论的原始 SVN 项目:https://appkonference.svn.sourceforge.net/svnroot/appkonference https://appkonference.svn.sourceforge.net/svnroot/appkonference

我的叉子在github.com/jtomerson/AsteriskAudioKonf http://github.com/jthomerson/AsteriskAudioKonf


看来您应该为测试创建一个 master 分支:

git checkout -b testing master
git merge vendor-svn
# test...
git checkout master
git merge testing

或者,如果您想测试单个提交,您可以一次将它们全部单独合并:

git checkout -b testing master
git log --pretty=%H testing..version-svn | while read commit; do git merge $commit || break; done
# now go check out and test each merge that was created

或者一次一个:

git checkout -b testing master
git merge $(git log --pretty=%H testing..version-svn | tail -n 1)
# now test the result, and if you're okay...
# run the merge command again to merge the next commit
git merge $(git log --pretty=%H testing..version-svn | tail -n 1)
# and so on

您可能会更喜欢后者,因为您可以在合并下一个提交之前测试该提交。历史会很丑陋,所以你显然想在稍后合并时返回并重做这一切。

无论哪种方式,请确保并设置rerere.enabled设置为 true 以便 git 会记住您如何解决冲突,并且当您返回并直接重做合并到 master 时,您将不必再次解决它们!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Git 分叉 SVN 项目的最佳方式 的相关文章

  • 在外部 3 向 diff 工具中查看已提交的 Git 合并

    有什么方法可以查看已在 3 路差异中提交的合并吗 如果 3 周前进行了分支之间的大规模合并 有什么方法可以在一个版本中看到它的 3 路差异吗 外部差异工具喜欢 BeyondCompare3 吗 我在找只是合并提交中更改的文件 如果我能让它只
  • 如何为 github 中两个分支之间的单个文件生成差异

    我需要为单个文件生成一个 diff 以显示两个版本之间的差异 这实际上是 github 中的标签 然后我想通过电子邮件将此差异发送给某人 因此差异的 github URL 将是理想的选择 github 比较视图将允许我对所有更改的文件执行此
  • SVN Visual Studio 存储库的工作目录结构

    我刚刚在我们公司为 Visual Studio 项目引入了 SVN 并创建了一个如下所示的存储库 解决方案 是 Visual Studio 解决方案 包含 1 n 个项目 solution1 trunk projectA projectB
  • php run git 收到“ssh 权限被拒绝”

    我正在尝试从浏览器中运行 git pull php 脚本 但我得到了 sh 连接到主机 git assembla com 端口 22 权限被拒绝 我的 PHP 脚本
  • `git add --patch` 和 `--word-diff`

    git add patch提供了一个很好的界面 用于检查未暂存的更改 然后仅暂存下一次提交中需要的更改 很好 除了一件事 没有明显的方法来选择哪个diff视图来使用 特别是 我希望能够配置git add patch以同样的方式向我呈现差异g
  • 如果 db 有主字段,如何将 N 个 SQLite 数据库文件合并为一个?

    我有一堆 SQLite 数据库文件 我需要将它们合并成一个大数据库文件 我怎样才能做到这一点 Added 基于this http old nabble com Attempting to merge large databases td18
  • 尽管有 svn 复制,如何 git svn 克隆完整历史记录

    在我的公司 我们即将从 svn 切换到 git 我们使用的 SVN 非常大 没有 svn 布局 并且在每个版本拆分上我们都制作了一个 svn 副本 SVN存储库结构 svnserver company de product xy 主要版本号
  • “git rm --cached”、“git Restore --staged”和“git reset”之间有什么区别

    我遇到了以下三种方法来取消暂存由命令 git add 暂存的文件 git rm cached
  • 在 git 提交消息中使用任何 utf-8 字符是否安全?

    我发现使用 UTF8 字符 例如 很有用 请参阅here http www utf8icons com subsets dingbats 在提交消息中 重构 NewService 添加了更好的服务 OldServiceA 据我所见 它see
  • 如何获取第一次提交的 Git diff?

    我创建了一个存储库 在其中创建了一个文件 在文件中放入了一些内容 然后提交了该文件 现在 我想查看该提交的差异 理想情况下应该显示添加的文件以及添加到其中的行 然而 git diff HEAD HEAD回报fatal ambiguous a
  • 有关多个远程存储库的 Git 状态

    我有一个脚本 如果我忘记在 40 多个存储库中提交或推送一些代码 它会通过电子邮件向我发送提醒 在我的两个项目中 我遵循了这些帖子中的答案 其中我设置了 git push 来推送到多个存储库 从多个远程位置拉 推 https stackov
  • 由于不存在大文件而导致 git Push 错误

    当尝试推送到 git 时 我不断得到相同的结果 Counting objects 78 done Delta compression using up to 4 threads Compressing objects 100 67 67 d
  • Git refs/remotes/origin/master 没有指向有效的对象

    在上次合并到 Git 存储库的 master 分支后 我失去了克隆存储库的能力 Cloning into test repository remote Counting objects 126084 done remote Compress
  • Git守护进程克隆错误

    All 我正在按照以下指示进行操作this SO https stackoverflow com a 377293 724357答案 快速提供回购 当我跑步时git clone git ipAddr git project我得到这个输出 r
  • 使用 TortoiseGit 创建 git 克隆时出现 SSL 证书问题

    我想在 TortoiseGit 的帮助下克隆 git 存储库 但出现错误 错误 SSL 证书有问题 请验证 CA 证书是否正常 细节 错误 14090086 SSL 例程 SSL3 GET SERVER CERTIFICATE 访问时证书验
  • 在 GitHub 上执行拉取请求时避免不需要的合并提交和其他提交

    我在 Github 上分叉了一个项目 令远程上游为upstream我的远程存储库是origin 我当地的master分支设置为跟踪远程master分支 然后我在本地添加了一些东西master 时不时与上游汇合 直到今天我想发出pull re
  • hg 或 git 中的两个完整目录/项目之间存在差异?

    我继承了一个最初存储在 CVS 中的项目以及所有修订 我做了相当多的编辑 并且我试图比较我在原始目录中所做的所有更改 关于添加的新文件与旧文件 hg git 是否有某种实用程序可以让我进行树差异或类似性质的操作 也就是说 新添加的文件 删除
  • 重新整合工作流程

    各位专家您好 我这个 Tortoise SVN 的老新手 问一个简单的问题 我正在一个分支上工作 现在想将分支中的更改 提交后 合并到主干 但是我不确定正确的工作流程 在解决所有可能的冲突后 我是否应该首先将主干合并到我的工作副本 然后将我
  • Git 中的合并冲突是由什么构成的?

    git 如何确定特定合并存在冲突以及冲突是什么 我的猜测是这样的 如果正在合并的两个提交有一个共同的父提交 并且如果它们都更改了父提交的 X 行 那就是冲突 让我的理解变得复杂的是 更改 X 行 可能意味着用几行新行替换它 但这仍然显示为一
  • 当出现错误时如何删除远程分支?

    我尝试过以下命令 但失败了 git push origin next remote error denying ref deletion for refs heads next To blah git remote rejected nex

随机推荐