【问题标题】:unlink git branch from svn origin [duplicate]从svn原点取消链接git分支[重复]
【发布时间】:2014-10-11 02:11:37
【问题描述】:

这是this previous question 的后续行动。 所以你可以在那里找到我到目前为止所做的事情。

简而言之,我创建了一个新的git 分支,该分支从一个已提交到远程svn 存储库的分支分支。 这个新的git 分支只能在本地使用,永远不会与svn 同步。 虽然我可以按照this answer 中的说明确保此手动操作,但新的git 分支“记住”它的svn 来源:

$ git svn info
Path: .
URL: [path-to-host]/[svn-repo]/trunk
Repository Root: [path-to-host]/[svn-repo]
Repository UUID: [repository-uuid]
Revision: [revision]
Node Kind: directory
Schedule: normal
Last Changed Author: sg-lecram
Last Changed Rev: [revision]
Last Changed Date: [date]

假设如果我签出新的git 分支并将一些更改提交到本地git,我可以运行git svn dcommit 将更改发送到svn。虽然我不打算这样做,但只需要一瞬间忘记我在哪个分支上发布秘密 git 分支中的所有秘密更改。

我希望能够从 svn 取消链接新的 git 分支,以便尝试从该分支执行 dcommit 会导致错误。 我该怎么做?

【问题讨论】:

  • 不是 git 解决方案,但在 mercurial 中,您可以将分支标记为处于秘密阶段 - 然后它不会被推送 - 您会考虑切换到 hg 吗?
  • @SteveBarnes 因为我已经在git 中有历史记录 + 我仍然需要与svn 同步 + 我以前从未使用过hg,我想避免这种情况。但很高兴知道,我可能会在下一个项目中尝试一下。
  • 我想你会感到惊喜的。

标签: git svn git-svn git-branch


【解决方案1】:

你不能。 git-svn 通过搜索包含git-svn-id: ... 行的提交消息的历史记录来找到关联的颠覆存储库,该行引用了 git-svn 历史记录中记录的颠覆提交。一旦它到达来自 subversion-tracking 分支的提交,它就会找到一个。

我建议将git 别名为与svn dcommit 挂钩的脚本,并在传递给真正的git 命令之前检查您是否在正确的分支中。虽然这需要您在存储库之外修改系统,但它也是迄今为止最简单的解决方案。

我能想到的所有技术选项都要求您防止 git-svn 阅读过多的历史:

  • 创建第二个 svn 存储库,将其添加为第二个 svn 远程,从中签出,然后创建 您的分支中的一个空提交,其中包含来自该结帐的参考行。 之后,删除 svn 存储库。尝试在该分支中进行 dcommit 现在将尝试使用 另一个 svn 服务器因此失败。
  • 使用孤立分支。如果您使用git checkout --orphan new_branch_name 签出您的新分支,它将具有不相交的历史记录,因此没有任何提交 具有对 svn 的有效引用的消息。

对于这两种解决方案,将您的工作分支合并回其父分支比通常更复杂。对于第一个选项,从您的分支再次分支,然后 rebase -i 反对 master 跳过第一次提交,然后拉到 master。对于第二个rebase--onto masterupstream 设置为分支的根提交。

【讨论】:

    【解决方案2】:

    您可以在本地使用 pre-push 挂钩来阻止您推送该分支名称,而不是使用 svn “取消链接”

    **edit: ** svn dcommit 没有原生钩子,所以你可以使用这里给出的解决方案:How can I avoid an accidental dcommit from a local branch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2011-07-07
      • 2013-04-11
      • 1970-01-01
      • 2016-08-27
      相关资源
      最近更新 更多