将远程跟踪分支添加到裸仓库的git命令

4
  • 我有一个从git.drupal.org克隆的裸仓库。
  • 我已经从这个裸仓库克隆到不同的网站上。
  • 从每个网站上,我都会向裸仓库推送一个特定于该网站的分支。

例如,如果我有foo.org和bar.org,那么我的裸仓库就有Drupal的分支以及名为foo和bar的两个分支。

我的想法是利用git的硬链接来节省本地克隆的磁盘空间。我认为我会让裸仓库从git.drupal.org抓取更新,并将更改拉到我的本地副本foo和bar中。然后当更新出现时,这将变得很容易。

bare-repo$ git fetch >/dev/null ; git branch -a
* 7.x
  foo
  bar
  remotes/origin/7.x
  remotes/origin/8.x

foo和bar最初在分支7.x上开始,但我想将它们更新到7.8版本,例如通过 git rebase 7.8 ,但这种方法失败了:

fatal: Needed a single revision
invalid upstream 7.8

foo和bar无法“看到”裸仓库的远程。我该怎么办?

2个回答

2

如"git rebase fatal: Needed a single revision"所述,有两个要点:

  • 您需要指定分支的名称,这在您的情况下将是origin/7.8而不是7.8
   git rebase origin/7.8

应该可以正常工作。

  • 您不能将当前分支重新设置到不包含最初创建当前分支的提交的分支上。(因此,请确保对于您的仓库而言是这种情况)

OP artfulrobot报告:

git rebase origin/7.8 
fatal: Needed a single revision invalid upstream origin/7.8

我回答说:
如果7.8在原始分支中不存在,则可以预期会出现此错误消息。 也许7.8是'origin'存储库中的标签。 在这种情况下,您需要先显式地获取这些标签。
git fetch --tags origin

然后重新定位应该可以正常工作。

$ git rebase origin/7.8 的结果:fatal: Needed a single revision invalid upstream origin/7.8 - artfulrobot
1
@artfulrobot:如果7.8origin中不存在作为一个分支,那么这个错误信息是可以预料的。也许7.8是'origin'仓库中的一个标签。在这种情况下,您需要先显式地获取这些标签:git fetch --tags origin。然后再进行变基操作应该就可以了。 - VonC

2

您需要一个工作文件夹来进行变基。因此,您需要克隆此存储库,然后进行所需操作。之后,将修改后的分支推回裸存储库。

或者,您可以指定一个工作目录git --work-tree=../somedir rebase 7.8。不幸的是,对于git命令,工作树和git dir选项并未完全实现所有命令。第一种选项是最佳的。

变基需要一个工作目录,因为它在遇到冲突时需要给您控制权。然后,您可以修复冲突并发出git rebase --continue命令,让其应用新基础上其余的提交。

希望这有所帮助。


是的,foo和bar确实是工作树。问题在于,在foo内部(其原始版本是裸仓库),我无法访问origin/remotes/7.8;我不知道如何在裸仓库中创建一个分支,使得foo能够从中获取/合并。 - artfulrobot
@AdamDynitruk:这是git remote show origin的输出结果 http://paste2.org/p/1681681 - artfulrobot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接