有没有一种方法可以设置主机Git存储库,以便默认情况下git pull使用其(本地)克隆所做的任何操作--rebase?通过搜索Stack Overflow,我了解了branch.autosetuprebase,但是需要单独为每个克隆配置它。
设置我的项目流程是为了在我们pull将功能分支分支到该develop分支之前merge进行分支。这pull几乎总是使用--rebase,因此我试图弄清楚这是否可以是默认值。
有没有一种方法可以设置主机Git存储库,以便默认情况下git pull使用其(本地)克隆所做的任何操作--rebase?通过搜索Stack Overflow,我了解了branch.autosetuprebase,但是需要单独为每个克隆配置它。
设置我的项目流程是为了在我们pull将功能分支分支到该develop分支之前merge进行分支。这pull几乎总是使用--rebase,因此我试图弄清楚这是否可以是默认值。
Answers:
现在有3种不同的默认拉动行为配置级别。从最普通的到最细的颗粒是:
pull.rebase将此设置为true意味着git pull始终等于git pull --rebase(除非branch.<branchname>.rebase明确设置为false)。也可以针对每个存储库或全局进行设置。
branch.autosetuprebase将此设置为always意味着无论何时创建跟踪分支,都会为其创建一个配置条目,如下所示。为了获得更精细的控制,还可以将其设置为never,local或者remote可以对每个存储库或全局进行设置。请参阅git config --help以获取更多详细信息。
branch.<branchname>.rebase将此设置为true意味着该特定分支将始终通过重新定级从其上游拉出,除非git pull --no-rebase明确使用。
因此,虽然您无法更改存储库的所有将来克隆的默认行为,但是可以通过更改所有当前用户(现有和将来)存储库的默认行为git config --global pull.rebase true。
~/.gitconfig,这意味着每个克隆主机存储库的开发人员都需要运行命令。不抱怨您的解决方案。这是一个很好的建议,我只想确认我正确理解了您的观点。
没有设置远程存储库的方法,因此克隆它的每个人都具有git pull更改的默认行为。
你可以,但是,建立一个服务器端挂钩,检查,没有人推合并的提交(这样的事情,也许)。
您可能还对某些配置选项感兴趣。从远程存储库克隆的所有开发人员都必须手动对其进行设置。
branch.<name>.rebase您可以将本地分支配置为始终使用--rebase,以这种方式替换<name>为分支名称:
git config branch.<name>.rebase true
在上运行此命令后master,其中的master部分.git/config如下所示:
[branch "master"]
remote = origin
merge = refs/heads/master
rebase = true
branch.autosetuprebase为每个Git分支运行该先前的config命令可能很麻烦,因此您可以配置Git为每个新分支自动设置它:
git config branch.autosetuprebase always
(您还可以指定never,remote和local,man git-config以了解详细信息。)
如果没有该--global选项,则配置将保存到.git/config,并且仅影响当前存储库。使用--global,配置将保存到~/.gitconfig,并且每个未配置的存储库都会受到影响。
此选项不会影响已经存在的分支。
pull.rebasegit config --bool pull.rebase true
(您也可以给它--global选项。)
如果此选项为true,git pull则git pull --rebase除非branch.<name>.rebase已设置为,否则运行等效于false。
在给定分支上--rebase发出时,这使该选项成为默认选项git pull。
@Flimm,我需要添加内容true以使您的第一个选项起作用。
因此正确的语法是:
git config branch.<branch>.rebase true
要在develop分支上运行此命令:
git config branch.develop.rebase true
现在,其中的develop部分.git/config如下所示:
[branch "develop"]
remote = origin
merge = refs/heads/develop
rebase = true
当前无法设置存储库的默认策略。
如果您自己想要它,并且至少使用git 1.7.9,则可以pull.rebase按如下所示全局设置配置:
git config --global pull.rebase true
但是,您必须在每台计算机上执行操作。一种选择是使用该选项配置默认用户主模板/框架。但是,用户可以更改该选项。
如果您不希望合并,则可以定义服务器端挂钩以拒绝合并合并的请求。
供您参考,他是pull.rebase 的源文档:
如果为true,则将分支重新放置在已获取分支的顶部,而不是在运行“ git pull”时从默认远程合并默认分支。请参阅“分支..rebase”以在每个分支的基础上进行设置。
合并时,将--rebase-merges选项传递给git rebase,以便本地合并提交包含在rebase中( 有关详细信息,请参见git-rebase)。
保留时,也将--preserve-merges传递给git rebase,这样本地提交的合并提交将不会通过运行git pull进行展平。
当值是交互式的时,变基将以交互式模式运行。
注意:这可能是危险的操作;除非您了解其中的含义,否则不要使用它(有关详细信息,请参见git-rebase)。