如何在SourceTree本地检出一个fork的pull request?

10
有时候拉取请求非常复杂和/或潜在存在错误。在这种情况下,仅通过阅读代码来进行抽查是有点不合理的。更明智的做法是首先本地检出拉取构建该拉取请求,然后再合并它。通过这种方式,存储库维护者可以更加自信地确保拉取请求没有引入任何回归问题。

enter image description here

我可以通过命令行轻松地检出拉取请求,但我更愿意使用SourceTree。我知道使用命令行是简单和直接的,但我相信在可能的情况下使用GUI工具而不是命令行工具。 SourceTree已成为Windows的事实标准gui git客户端,因此似乎SourceTree应该具有这个基本功能。 但是,我尝试了许多不同的命令和对话框,似乎无法在SourceTree中访问拉取请求。
是否可以仅使用SourceTree在本地提取拉取请求?如何操作?

执行一次获取操作并在提交上创建一个新分支? - Michael
@Michael - 在SourceTree中似乎不起作用。获取对话框没有选项可以允许拉取请求被获取。 - Mark Rogers
抱歉,我不了解这个主题,说错话了。以前从未使用过拉取请求 :) - Michael
@Michael - 没关系,谢谢你的尝试。 - Mark Rogers
@MarkRogers,一个来自哪里的拉取请求?Git本身有一个“request-pull”命令,但它并不是GitHub / BitBucket上找到的拉取请求或GitLab中的合并请求。每个都有所不同,并且具有自己的要求。 - Chris
@Chris 从Github/Bitbucket上的一个分叉克隆存储库中。 - Mark Rogers
7个回答

10

请将您的.git/config更改为以下内容,并进行一次获取:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:{user}/{repo}.git
+   fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

6

在不使用命令行的情况下,我在寻找更好的方法时发现了您的问题。

我的当前方法是:

  1. 将发起PR(pull request)的fork添加为远程。可以通过“存储库” -> “存储库设置” -> “远程”,然后点击“添加”来完成。
  2. 进行提取以获取分支列表
  3. 检出PR的分支。

这并不能直接访问PR,但它确实为我提供了更改的本地副本。我仍然通过github接受和合并或要求修订。如果PR发生更改,我只需将更新拉入分支即可。

Sourcetree似乎将PR视为管理本地更改返回原始存储库的一种方式。


3

无法直接在SourceTree中从分叉的存储库中结帐拉取请求。

我也将此问题转发到Atlassian问答板块,并且已在评论中回答

据我所知,没有一种方法可以在sourcetree中直接执行此操作,因为sourcetree用于处理本地拥有的git repos,而不是用于处理PR或您可能在Bitbucket或Github中访问的远程repos。

基本上,您必须单独克隆其他repo,并切换到用于拉取请求的任何分支。

有点遗憾这个功能在命令行中如此容易,但在SourceTree的Gui中更加繁琐。


2

我发现Abhishek的答案完全可行!

以下是我的做法:

  • 进入仓库的“.git”文件夹并打开config文件。
  • "[remote "origin"]条目下,将fetch更改为:fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
  • 关闭SourceTree中的仓库选项卡,然后再次打开它。
  • 点击工具栏中的“Fetch”以获取所有PR分支。

现在,PR被显示为分支:

enter image description here


2
对于Bitbucket,我使用了Abhishek的答案,但是将fetch = +refs/pull-requests/*:refs/remotes/origin/pull-requests/*添加到了fetch = +refs/pull/*/head:refs/remotes/origin/pr/*的位置。

0

你可以获取pr分支,然后就像对待其他分支一样处理PR。请参见https://gist.github.com/piscisaureus/3342247

基本上,所有的 PR 都在 refs/pull/*/head 下,而你通常使用的所有分支都在 refs/heads 下。


我记得当时在SourceTree中尝试过fetch,但由于拉取请求是从另一个用户的分叉存储库发出的,因此该选项不可用。据我所知,如果不克隆其他用户的分叉存储库并切换到拉取请求分支,则无法完成此操作。这全部都是在SourceTree中进行的,虽然在SourceTree之外很容易做到,但我正在寻找一个特定于SourceTree的答案。 - Mark Rogers

0

在Bitbucket上无法直接检出一个派生的存储库。

您需要下载补丁并应用以进行测试。

# Download the patch file.
curl -u user:password https://bitbucket.org/api/2.0/repositories/{user}/{repo}/pullrequests/{pull_no}/patch -L -o name.patch

# Apply the patch file to your local Git checkout.
git apply name.patch

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