我有一个本地BitBucket服务器,我将我的更改从Web UI合并到master。我想与一个永久的个人分支机构合作,我将定期创建合并请求。
我希望git pull
将origin/master
合并到我当地的master
,并且git push
将我的当地大师推入origin/itsadok
。然后,我将在服务器上创建合并请求,并将我的更改从origin/itsadok
合并到origin/master
。
BitBucket server: origin/itsadok --- via PR --> origin/master
↑ |
Local machine: \---------- master <---------/
看起来很简单。
我知道我可以手动做git push origin master:itsadok
,但我希望它是默认值。似乎设置默认推送目标的唯一方法是将branch.master.merge
配置为refs/heads/itsadok
(并将push.default
配置为upstream
),但是pull也将从我的个人分支合并。
有没有办法配置git,以便默认推送和拉动将如上所述工作?
编辑:我想到通过将push.default
设置为current
,将本地分支命名为远程个人分支,并将branch.itsadok.merge
设置为refs / heads / master,我可以实现非常相似的功能。换一种说法:
BitBucket server: origin/itsadok --- via PR --> origin/master
↑ |
Local machine: \---------- itsadok <--------/
这几乎可以工作,但因为我有脚本假设我的本地分支被称为master
,这个解决方案对我来说相当不方便。但是,如果没有其他想法,我会满足于此。
您可以通过push refspecs的正确映射来实现所描述的行为。如push manual中所述,git按以下顺序查看要推送的内容:
remote.<remote_name>.push
配置如果不是空的push.default
配置否则所以你可以让master
跟踪origin\master
,所以拉动工作正常,然后配置remote.origin.push
,所以push不带参数适合你的工作流程:
git config remote.origin.push refs/heads/master:refs/heads/itsadok
您可以通过使用git rev-parse --symbolic-full-name @{upstream}
打印上游分支并使用git rev-parse --symbolic-full-name @{push}
推送分支来检查您的配置
但是,有几点需要注意:
git status
会将master与其上游进行比较,因此即使在实际提交提交后,您也会看到“提前提交”通知。git push
,而在非master分支上仍然会将数据从master推送到itsadok。如果你想尝试解决这个问题,最好的方法可能是refspec configuration examples