使用git管理公共项目的修补版本?

时间:2014-08-21 01:43:55

标签: git

我试图在git中模仿subversion用户会认为是供应商分支。就我而言,我使用的是Drupal的补丁版本,可以通过git获得。所以我认为正确的做法是使用多个遥控器的git存储库,如Merging two remote repositories in Git

中所述

我想从drupal.org git repo中获取一个Drupal版本,并将其提交给我自己的git repo,我将在其中应用补丁。所以我克隆了我的repo并将drupal.org添加为另一个遥控器,就像这样。

git clone myrepo:drupal/core
git remote add drupal.org http://git.drupal.org/project/drupal.git
git checkout -b custom-7.x drupal.org/7.x
git pull drupal.org 7.30

我相信我的问题来自最后一行。它正在拉动drupal 7.x的标记版本,这与分支的尖端不同。

接下来,我尝试将drupal 7.30推送到我的存储库中,这就是它失败的地方。

git push -n origin
...
 ! [rejected]        custom-7.x -> custom-7.x (non-fast-forward)
error: failed to push some refs to 'git.electricgroups:drupal/core'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

具有讽刺意味的是,git提供了4行提示,但我仍然没有线索。

可以使用git来管理我的修补版Drupal吗?有没有更好的方法来设置它?如果没有,我如何通过此错误?

1 个答案:

答案 0 :(得分:0)

Git试图告诉您远程custom-7.x分支无法快速转发到本地custom-7.x分支的状态。这在许多其他地方都有详细解释(包括最后一个提示指向你的git-push的手册页,但它基本上归结为你的远程分支有一个或多个提交,你的本地分支没有换句话说,远程分支中的提交不是本地分支的子集。

造成这种情况的原因有多种,但根据所提供的信息无法确定哪一个。

  • 您已对origin / custom-7.x分支进行了提交。我认为Drupal的本地自定义是拥有该分支的重点,所以它很可能是一种情况。而不是将您的本地分支基于drupal / 7.x,基于它origin / custom-7.x。然后,将drupal / 7.x合并到其中。您可能必须解决冲突。推送到原点。
  • 上次7.x分支已被重写,因为您上次将其推送到远程的custom-7.x。上游通常不会这样做,因为它会对许多人的工作造成破坏,但这是可能的。在这种情况下,您必须重写自己的分支(通常通过将补丁重新定位到远程分支并将其强制推入远程分支)。