某些提交中缺少git svn id
我有一个旧的SVN存储库,我使用某些提交中缺少git svn id,git,heroku,git-svn,Git,Heroku,Git Svn,我有一个旧的SVN存储库,我使用git SVN签出它,以便处理它并推送到Heroku。我正在做一个非常标准的git-push-heroku-master,git-svn-rebase,git-svn-dcommit舞蹈,一切都很好 然而,最近我做了很多git工作,有一段时间没有做过git svn rebase。现在,当我尝试做一个重定基础时,它失败了,因为合并冲突,尽管我是唯一一个承诺回购的人,并且只处理主数据 考虑到这可能是工作副本的问题,我做了一个新的git svn克隆,然后做了一个git远
git SVN
签出它,以便处理它并推送到Heroku。我正在做一个非常标准的git-push-heroku-master
,git-svn-rebase
,git-svn-dcommit
舞蹈,一切都很好
然而,最近我做了很多git工作,有一段时间没有做过git svn rebase。现在,当我尝试做一个重定基础时,它失败了,因为合并冲突,尽管我是唯一一个承诺回购的人,并且只处理主数据
考虑到这可能是工作副本的问题,我做了一个新的git svn克隆
,然后做了一个git远程添加heroku
和git-pull-heroku-master
。pull进行了一次快速的合并,没有问题,但是仍然失败
我做了一个简单的git日志
,发现有一些旧的提交缺少git svn id
s:
commit def8bab861314c67d4e8227e03775d19045d21d1
Author: peterr
Date: Fri Sep 21 16:17:33 2012 +0000
PHP Cedar support.
git-svn-id: http://vcp.unfuddle.com/svn/vcp_bbsit@24 b6b24ac3-8b7a-4c11-a811-49c5d0334e85
commit f51bd78fb07dde6ec1dc4e0ba51a48f2b6bd1bd6
Author: pr1001
Date: Mon Aug 20 19:39:42 2012 +0200
Specify port correctly
commit 153bb2929080898dcab46142120def0f4964dfab
...
commit 5a416fa3af9f64aa353d5171bedfaa563115ff62
Author: pr1001
Date: Mon Aug 20 17:22:58 2012 +0200
PHP Cedar support.
commit e0b35588d03082a3a4ab49a7b590f206346046c0
Author: j
Date: Fri Aug 3 08:13:33 2012 +0000
change email
git-svn-id: http://vcp.unfuddle.com/svn/vcp_bbsit@23 b6b24ac3-8b7a-4c11-a811-49c5d0334e85
据我所知,我可能能够重写提交消息以添加丢失的信息,但我想知道这是否会更糟
看看这些消息,我似乎有一些重复的提交,比如“PHP Cedar支持”提交。我真的很困惑为什么我有这些副本,尽管我怀疑它们可能会被转发到失败的git push heroku master
,前几天我被告知存储库不同步git-pull-heroku-master
似乎没有带来任何变化,并解决了这个问题,但它可能带来了重复提交
因此,考虑到所有这些,我的问题很简单,我该如何继续?我在Heroku上有一个可用的应用程序,在SVN repo中有一个旧的可用代码库,但我看不到任何简单的方法来干净地将新的提交到SVN中。我应该摘吗?然后我是否需要关闭Heroku应用程序以避免重复出现?很难猜测您是如何陷入这种情况的,但我认为这是因为当推到SVN时,git SVN会用git SVN id签名替换(使用rebase或reset)提交,因此每个提交都有两个示例:“local”--没有“git SVN id”签名---和远程签名 要恢复:
gitco-b备份
git log refs/remotes/git svn
[svn-remote "svn"]
reposRoot = ...
uuid = <UUID>
branches-maxRev = 23
tags-maxRev = 23
您的refs/remotes/git svn引用现在恢复为最新有效的svn版本
三,。从Git存储库获取所有更改,而无需合并
$ git fetch heroku master
现在,所有更改都在refs/remotes/heroku/master中
四,。确保您没有本地更改(我建议您现在使用master)。将refs/heads/master重置为refs/remotes/git svn。其中一种方法是:
$ git update-ref refs/heads/master refs/remotes/git-svn
$ git reset --hard HEAD
五,。请查看refs/remotes/heroku/master和refs/remotes/git svn。Git存储库中是否存在refs/remotes/Git svn中不存在的更改?如果是的话,cherry一个接一个地挑选。还可以查看一下您的备份分支(仅在没有git svn id的提交中),如果它们还不在svn中,也可以选择它们
六,。现在您在master中有一些尚未在SVN中的更改。跑
$ git svn dcommit
把他们推到SVN
七,。现在,与SVN相关的分支已完全修复,并具有所有更改。如果我理解正确,您希望Git存储库中有相同的内容。最好将refs/remotes/heroku/master替换为当前的master内容:
$ git push heroku master --force
现在,Git存储库的内容与SVN存储库的内容相同
为了避免将来出现这些问题,请确保永远不要将没有git svn id的提交推送到git(即,当您运行“git push”时,您的主机只包含带有git svn id签名的提交,如果没有,请运行“git svn dcommit”将它们先推送到svn) 我有一个完全不同的问题,但这给了我需要的关于git svn的信息来解决它。谢谢!:)
$ git svn dcommit
$ git push heroku master --force