从svn origin取消链接git分支

时间:2014-08-18 07:58:01

标签: git svn git-svn git-branch

这是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分支中的所有秘密更改。

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

2 个答案:

答案 0 :(得分:1)

你不能。 git-svn通过搜索包含git-svn-id: ...行的提交消息的历史记录来查找关联的subversion存储库,其中引用了git-svn历史记录中的subversion提交。一旦它从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设置为分支的根提交。

答案 1 :(得分:0)

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

**编辑:** svn dcommit没有本机挂钩,因此您可以使用此处给出的解决方案:How can I avoid an accidental dcommit from a local branch