这是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导致错误。
我怎么能这样做?
答案 0 :(得分:1)
你不能。 git-svn通过搜索包含git-svn-id: ...
行的提交消息的历史记录来查找关联的subversion存储库,其中引用了git-svn历史记录中的subversion提交。一旦它从subversion-tracking分支到达提交,它就会找到一个。
我建议将git
别名为挂钩到svn dcommit
的脚本,并在传递给真正的git
命令之前检查您是否在正确的分支中。虽然这需要您在存储库之外修改系统,但它也是迄今为止最简单的解决方案。
我能想到的所有技术选项都要求你阻止git-svn在历史中读得太远:
git checkout --orphan
new_branch_name
签出新分支,它将具有不相交的历史记录,因此没有任何提交
有效引用svn。使用这两种解决方案,将工作分支合并回其父分支比通常更复杂。对于第一个选项,再次从您的分支分支,然后rebase -i
反对master跳过第一个提交,然后拉到master。对于第二个rebase
--onto master
和upstream
设置为分支的根提交。
答案 1 :(得分:0)
您可以在本地使用预推钩来阻止您推送该分支名称,而不是与svn“取消链接”
**编辑:** svn dcommit没有本机挂钩,因此您可以使用此处给出的解决方案:How can I avoid an accidental dcommit from a local branch