Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
某些提交中缺少git svn id_Git_Heroku_Git Svn - Fatal编程技术网

某些提交中缺少git svn id

某些提交中缺少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远

我有一个旧的SVN存储库,我使用
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备份
  • 确保refs/remotes/git svn指向与subversion存储库相对应的git svn id的最新提交,并且没有git svn id的提交将通过
    git log refs/remotes/git svn
  • 如果不是这样,您可以使用以下技巧修复refs/remotes/git svn: 更新refs/remotes/git svn以指向最新提交,其中一切正常(在您的情况下,它对应于r23):

    Set.git/svn/metadata revisions指向该修订:

    [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