3

如何 在不签出的情况下在远程存储库上使用merge-basewith ?Git使用ls-remote效果很好,例如用于确定这样的分支:

git ls-remote --heads $REPO_URL/$REPO_NAME

文档不包含任何线索,是否可以使用merge-basewith ls-remote。也许也可以使用替代方法merge-base来找到分支/提交的共同祖先。

目前,我必须在本地签出存储库,这对于大型项目来说需要很多时间。

4

1 回答 1

3

通常,no:ls-remote会在远程向您显示所请求引用的提交 ID,但对于每个提交 ID,如果您在本地没有该提交,则无法确定其父提交。

不过,无需检查提交。只需使用git fetch来带回任何丢失的对象,然后您将拥有完整的存储库历史记录。未来git fetch将继续只带来丢失的对象,这将是您无论如何都需要以找到项目的新对象。

我不知道您要尝试做什么,git merge-base但除了新--fork-point操作之外,它只需要提交 ID,它使用您的本地 reflog,因此需要本地引用名称。例如:

$ git merge-base 9b1c2a3a8e625ea7f56e9ba3d3c0e31938faa738 \
> bba6acb335e296ed692b4aea224b50fd098f693c
ebc5da3208824e25a89672a3b91bd13629b215fe

这告诉我9b1c2a...and的合并基础bba6acb...ebc5da3.... (所有这些都是存储库中的提交 ID,其中包含 git 本身的源。)并且:

$ git branch -a --contains ebc5da3208824e25a89672a3b91bd13629b215fe
* master
  remotes/origin/maint
  remotes/origin/master
  remotes/origin/next
  remotes/origin/pu

告诉我们合并基础包含在四个远程分支中:maintmasternextpu,以及本地分支(无论如何master都是同步的)。origin/master更有趣的是:

$ git describe ebc5da3208824e25a89672a3b91bd13629b215fe
v2.0.2

告诉我们合并基础被标记为 git 版本 2.0.2,因此这两个其他提交(从日志中任意选择)在该特定标记处具有共同祖先。

于 2014-07-28T07:52:22.460 回答