可以使用以下方式从Bitbucket Server的拉取请求中获取代码:
git fetch origin refs/pull-requests/$PR_NO/from:$LOCAL_BRANCH
我发现这个答案,并认为在Bitbucket上获取拉取请求的引用是可能的。
但实际上不行。
对于OP的问题,答案是不可能的:有一个关于此问题的未回答和未处理的功能请求问题已经存在了七年之久。
解决方法?
您可以将PR作为可下载的.patch
文件下载并应用到手动创建的新分支上。但是您不容易能够应用更新。
我想出了另一种方式,在git-repo中实现了这种方式,因此每个人都可以使用它。我所做的是使用API获取PR的远程和分支,并自动在本地创建新的upstream和分支。这样,您就可以从PR发布者那里获取更新。缺点是git remotes的杂乱。
编辑:我希望这能实现并关闭功能请求。但是,专用Bitbucket服务器上已经有了此解决方法,但是在bitbucket.org服务上没有。 6月5日,一位Bitbucket工作人员在此票证上发表了评论:
大家好--再次感谢您对此问题的反馈和耐心等待。该功能仍然是待办事项中优先级较高的项目。当我们有更多关于此功能预计交付时间的信息时,我们将在此处分享。
我遵循了这篇文章Pull request Fetching。
它的确起作用了,但我发现我只需要在当前存储库中添加一行即可,而不是创建一个派生存储库和上游存储库。运行此行
git config --add remote.origin.fetch '+refs/pull-requests/*/from:refs/remotes/origin/pr/*'
您还可以将其手动添加到项目中的文件 .git/config 中。
接下来运行git pull
你应该会看到一个列表:
然后您可以运行git checkout origin/pr/666
以获得拉取请求更改。
git config --add remote.origin.fetch '+refs/pull-requests/*/from:pr/*'
会发生什么呢?在我看来似乎是一样的? - Mark这适用于Bitbucket。其他服务器可能具有不同的refs:
(refspecs),或者根本没有refs:
。
首先,您需要添加远程仓库的拉取请求refs:
。要对存储库(例如别名为“upstream”)执行此操作:
git config --add remote.upstream.fetch '+refs/pull-requests/*/from:refs/remotes/upstream/pull-requests/*'
也就是说,您需要在 git 的.config
文件中添加最后一行:[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/*
然后,如果你执行远程的 获取 ,你应该可以看到检索到了所有的拉取请求:
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
最后,您可以结账您喜欢的拉取请求:
git checkout pull-requests/2723
已成功测试于专用的Bitbucket服务器 2019年2月27日。
git remote add upstream $UPSTREAM_URL
git fetch upstream refs/pull-requests/$PR_NO/from:$LOCAL_BRANCH
查看新分支
git checkout $LOCAL_BRANCH
如果无法检出拉取请求,一个小技巧是可以检出该拉取请求的最后一次提交
将原始回答翻译为“最初的回答”
git checkout <hash code of last commit>
1. git fetch ${URLofOriginalRepo}
“+refs/pull-requests/*/from:refs/remotes/origin/pr/*”
2. git checkout origin/pr/${PR_NUMBER}
URLOfOriginalRepo是您想要拉取PR的存储库的URL。此URL是使用ssh密钥克隆存储库时使用的URL。
运行这些命令后,您可以在此存储库上查看打开的PR。然后拉取您想要的那个。
例如。
git fetch ssh://hostname.net:8080/repofolder/repo.git.git “+refs/pull-requests//from:refs/remotes/origin/pr/” && git fetch origin/pr/854
git config remote.origin.fetch "+refs/heads/:refs/remotes/origin/"
然后
git fetch
之后您可以切换到想要的分支进行检出
git checkout BRANCH_NAME
附言:希望Bitbucket能解决这个问题https://jira.atlassian.com/browse/BCLOUD-5814
我在Bitbucket中发现这很困难,所以我尝试了不同的方法。如果一个人向我的Bitbucket仓库提交了拉取请求,我会通过他的名字(比尔)设置他(比尔)的源。然后是这个 -
git checkout -b bill-auth bill/bill-auth
这里的 bill
是指贡献者的仓库源/链接,然后 bill-auth
是他的分支名称。
在这里,我正在创建一个与他(bill)的特性分支同名的分支。
git fetch origin refs/pull-requests/$PR_NO/merge - 这适用于Butbucket v5.14.1
fatal: Couldn't find remote ref refs/pull-requests/2/from
,Unexpected end of command stream
。 - Anuruddha