【问题标题】:Git-SVN merge lost my link to trunkGit-SVN 合并丢失了我到主干的链接
【发布时间】:2012-02-09 18:34:22
【问题描述】:

编辑:我看到以前有人问过这个问题! git-svn: reset tracking for master 具有正确权限的人可能可以将其作为副本关闭。

我正在使用 git-svn。我最近完成了一个 git 分支的工作,该分支正在跟踪 SVN 中的一个分支。在分支工作时,我使用了以下两个命令

$ git svn rebase
$ big svn dcommit

一切都很好。 git 中的“master”正在跟踪 svn/trunk,而 git 中的“myBranch”正在跟踪 svn/branches/myBranch。但是在我在 git 本地合并所有内容之后

$ git checkout master
$ git merge myBranch

我去推...并假设master会推到svn/trunk。但它没有。相反,“master”现在也推送到 svn/branches/myBranch。不知何故,当我将“myBranch”合并到“master”时,“master's”的跟踪发生了变化。

我可能做错了 - 但我试图明确地“推”到主干......

$ git svn dcommit remotes/trunk master

但是那个语法失败了,现在我有了

$ Committing to http://<repo>/trunk ...
dcommitted on a detached HEAD because you gave a revision argument.
The rewritten commit is: b461234...

SVN 中继仍未更新。

如何在 git 中合并,然后将其推送到 SVN?我按照指南 here 进行操作,这意味着我可以与普通的 git 语法合并。它只是没有跟进并解释为什么我的“主人”没有跟踪我合并的分支。

我也有git-tower,我与命令行并行使用它,在我如上所述手动合并后,塔现在“显示”下拉列表中的所有远程分支以“推送”或 dcommit 到,但我可以'不改变 svn/myBranch 的选择...这可能意味着我不能?

【问题讨论】:

    标签: git git-svn


    【解决方案1】:

    如果master 正在跟踪您的svn 遥控器,您可以这样做:

    git svn dcommit
    

    当您使用master 时。使用--dry-run 确定您的提交将走向何方!如果它坏了,您可以编辑.git/config 并修复您的svn-remote 条目:

    [svn-remote "svn"]
         url = svn+ssh://some.machine.net/svn/path/to/tree
         fetch = trunk:refs/remotes/trunk
    

    或任何需要的东西。

    【讨论】:

      【解决方案2】:

      不,您不能将 git 合并提交到 Subversion。

      从您提供的链接中阅读有关branching issues with git svn 的这段话:

      当您熟悉 Git 工作流程后,您可能会创建主题分支,处理它们,然后将它们合并。如果您通过 git svn 推送到 Subversion 服务器,您可能想要每次都将您的工作重新定位到一个分支上,而不是将分支合并在一起。更喜欢 rebase 的原因是 Subversion 具有线性历史并且不像 Git 那样处理合并,因此 git svn 在将快照转换为 Subversion 提交时仅遵循第一个父级。

      在具有合并历史记录的分支上运行 dcommit 可以正常工作,除了当您查看 Git 项目历史记录时,它并没有重写您在实验分支上所做的任何提交 - 相反,所有这些更改都出现在 SVN单个合并提交的版本。

      当其他人克隆该工作时,他们看到的只是合并提交,所有工作都被压缩到其中;他们看不到有关它来自何处或何时提交的提交数据。

      【讨论】:

      • 根据我包含的链接,我想以下内容具有误导性,因为虽然有限,但我认为文本暗示它仍然可以工作....现在,如果您想合并您的歌剧分支进入主干(您的主分支),您可以使用普通的 git 合并来完成。但是你需要提供一个描述性的提交消息(通过 -m),否则合并会说“合并分支歌剧”而不是有用的东西。
      • 请记住,尽管您使用 git merge 来执行此操作,并且合并可能会比在 Subversion 中容易得多(因为 Git 会自动为您检测适当的合并基础),这不是普通的 Git 合并提交。您必须将此数据推送回无法处理跟踪多个父级的提交的 Subversion 服务器;所以,在你把它推上去之后,它看起来就像一个单一的提交,在一个单一的提交下压缩了另一个分支的所有工作。
      猜你喜欢
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-20
      • 2010-11-25
      • 2018-11-08
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多