Checkout bitbucket pull requests locally

霸气de小男生 提交于 2019-12-17 22:20:35

问题


I found this gist, showing how to check out a pull request locally from GitHub.

I'm using bitbucket and I'm looking for a similar function.

Can you help me? Thank you


回答1:


One may fetch the code from Bitbucket Server's pull requests using:

git fetch origin refs/pull-requests/$PR_NO/from:$LOCAL_BRANCH



回答2:


I found this answer and thought that it was actually possible to fetch refs for a pull request on bitbucket.

But it's not.

The answer for the OP's question is that it is NOT possible: there's been an open feature request issue about it that has been unanswered and unattended for four five SIX SEVEN years.

The workaround?

You can get the PR as a downloadable .patch file you can download and apply to a new branch you create manually. But you won't easily be able to apply updates.

I figured another way out, which I've implemented in git-repo, so everybody can use it. What I'm doing is use the API to get the PR's remote and branch, and automatically create a new upstream and branch locally. That way you can get updates from the PR poster. The downside is the clutter of git remotes.

edit: I hope this gets done and the feature request is closed. But there has been a solution for this on dedicated bitbucket servers for some time now, but not on the bitbucket.org service. On June 5th, a bitbucket staff member commented on this ticket:

Hi y'all -- thanks again for your feedback and patience on this issue. This feature is still high on the priority list in the backlog. When we have more information to share about the expected delivery of this feature, we will share it here.




回答3:


I followed this article Pull request Fetching.

It worked but I found out I just need add one line to the current repo, rather than create a folk repo and an upstream repo. Run this line

git config --add remote.origin.fetch '+refs/pull-requests/*/from:refs/remotes/origin/pr/*'

You can also add it manually to the file .git/config in your project.

Next run git pull you should see a list:

  • [new ref] refs/pull-requests/488/from -> origin/pr/488
  • [new ref] refs/pull-requests/666/from -> origin/pr/666

Then you can run git checkout origin/pr/666 to get the pull request changes.




回答4:


Fetch/Checkout Pull Requests

This works for bitbucket. Other server could have different refs: (refspecs) or no refs: at all.

First Time

First of all you need to add the pull request refs: of the remote repository. To do that to a repository (e.g. aliased 'upstream'):

git config --add remote.upstream.fetch '+refs/pull-requests/*/from:refs/remotes/upstream/pull-requests/*'

That is, you add the last line on git .config file:

[remote "origin"]
   url = ssh://git@git.blablabla.net/~user/repository.git
   fetch = +refs/heads/*:refs/remotes/origin/*
   fetch = +refs/pull/*/head:refs/remotes/origin/pull-requests/*

Fetching

Then if you perform the remote fetch you should see the retrieval of (also) all the pull requests:

git fetch upstream

From ssh://git.blablabla.net/somepath/repository
 * [new ref]         refs/pull-requests/1188/from -> upstream/pull-requests/1188
 * [new ref]         refs/pull-requests/1741/from -> upstream/pull-requests/1741
 * [new ref]         refs/pull-requests/2394/from -> upstream/pull-requests/2394

Checking out

Finally you can checkout the pull-request you prefer:

git checkout pull-requests/2723

Successfully tested on dedicated bitbucket server 27/02/19.




回答5:


It seems the easiest way to do this is still to get a patch of the pull request. Based on this question's answer, Alexandre's comment is still the only way to do this. It uses this BitBucket API call.

I used the following bash script:

USER=username
PASSWORD=password
REPO=repo-name
PULL_NO=42
OUTPUT_FILE=output.patch

# Add -i to include the HTTP-header in the output for debugging
curl -u $USER:$PASSWORD https://bitbucket.org/api/2.0/repositories/$USER/$REPO/pullrequests/$PULL_NO/patch -L -o $OUTPUT_FILE

Save that to a file called pull-patch.sh and fill in the environment variables with your account details. The script requires that you have curl installed (e.g. sudo apt install curl). Then run:

chmod +x pull-patch.sh
./pull-patch.sh

And a file called output.patch should be created from the pull request.




回答6:


When is not possible to checkout the pull request, a trick is that you can checkout the last commit of that pull request

git checkout <hash code of last commit>



回答7:


In bitbucket what you can do is

git config remote.origin.fetch "+refs/heads/:refs/remotes/origin/"

and then

git fetch

after that you can checkout to the branch you want to

git checkout BRANCH_NAME

P.S: Hopefully bitbucket will sort this out https://jira.atlassian.com/browse/BCLOUD-5814



来源:https://stackoverflow.com/questions/25967034/checkout-bitbucket-pull-requests-locally

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!