【问题标题】:Git: find new cherriesGit:寻找新的樱桃
【发布时间】:2012-10-20 06:53:30
【问题描述】:

我已经设置了一个基于Adam Spiers' answer in a previous SO thread 的流程,用于定期将 Git 存储库发布到 SVN 存储库中的路径。一切都很好,但有一件我还没有弄清楚。当我使用cherry-pick 获取后续 Git 更改时,我如何确定在此 Git 端发生了哪些新更改,需要将其挑选到 SVN 端?

更具体地说,在我将 Git 历史记录初始推送到 SVN 之后,我现在坐在 master 分支上,该分支与 Git 起源具有相同的内容和补丁历史记录,但与 @ 不同987654324@ 基本上是它的全部历史:

% git --no-pager diff master git-svn
% git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 2 different commit(s) each, respectively.
#
nothing to commit (working directory clean)

现在,我获取新的上游更改:

% git fetch
remote: Counting objects: 5, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /cygdrive/c/foo/git/testrep
   6d7dd94..08d3d19  master     -> origin/master

在这一点上,我需要弄清楚哪些修订需要精心挑选,然后我会挑选它们并执行git svn dcommit。但我不知道如何获得樱桃清单。我尝试了各种 git cherry 命令,git cherry origin mastergit cherry master origin 都报告了长长的列表,基本上每边的每一个变化。

我应该求助于解析日志文件中的最后一个樱桃挑选吗?我用的是git cherry-pick -x,所以我确实有记录。

【问题讨论】:

  • 你试过简单的rebase --onto吗? Git 应该足够聪明,能够找出与补丁等效的提交,并删除已经为您的 SVN 分支选择的所有内容。
  • 我没有看到它工作 - 如果我先做 git fetch origin 然后 git rebase --onto git-svn origin,当我希望看到 2 个新提交重新设置时,似乎什么都没有发生。另外,如果我有成百上千的提交,这种方法会变得笨拙吗?
  • 尝试类似git rebase --onto git-svn <last picked/rebased commit from origin/master> <origin/master> 的方法。也许与-i/--interactive结合使用
  • 如果你能提供一个简化的测试用例,那将非常有帮助。
  • @Adam,您的意思是要查看的实际存储库吗?我认为我执行的所有步骤都在这里和上一个线程中。

标签: git svn cherry-pick


【解决方案1】:

所以我想我有一个解决方案 - 在每轮 git cherry-pick ... git svn dcommit 之后,我做一个 git tag -f last-picked origin。然后下一次,我可以从last-pickedorigin 中挑选。

如果某人有更好的解决方案,我愿意将他们的答案标记为已接受,但目前看来我不一定需要另一个答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多