300

有没有办法设置主机 Git 存储库,以便默认git pull使用其(本地)克隆完成的任何操作?--rebase通过在 Stack Overflow 上搜索,我了解了branch.autosetuprebase,但需要为每个克隆单独配置。

我的项目流程是这样设置的,以便我们pull在向它添加功能分支develop之前先merge创建分支。这pull几乎总是使用--rebase,所以我试图弄清楚这是否可以成为默认值。

4

5 回答 5

346

默认拉取行为现在有 3 种不同级别的配置。从最一般到最细粒度,它们是:

1.pull.rebase

将此设置为true意味着git pull始终等效于git pull --rebase(除非branch.<branchname>.rebase明确设置为false)。这也可以按存储库或全局设置。

2.branch.autosetuprebase

将此设置为always意味着无论何时创建跟踪分支,都会为其创建如下所示的配置条目。对于更细粒度的控制,这也可以设置为neverlocal或者remote并且可以设置为每个存储库或全局。有关详细信息,请参阅git config --help

3.branch.<branchname>.rebase

将此设置为true意味着该特定分支将始终通过变基从其上游拉取,除非git pull --no-rebase明确使用。

结论

因此,虽然您无法更改存储库的所有未来克隆的默认行为,但您可以通过git config --global pull.rebase true.

于 2012-12-20T14:45:11.827 回答
235

怎么样

git config --global pull.rebase true

这将告诉 git 始终使用 rebase 拉动。

于 2013-07-12T16:38:46.913 回答
62

答案是不。

没有办法设置远程存储库,以便克隆它的每个人都具有git pull更改的默认行为。

但是,您可以设置一个服务器端挂钩来检查是否没有人推送合并提交(可能是这样的)。

还有一些您可能感兴趣的配置选项。从远程存储库克隆的所有开发人员都必须自己手动设置。

1. 选项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

2. 选项branch.autosetuprebase

为每个 Git 分支运行之前的配置命令可能很麻烦,因此您可以将 Git 配置为自动为每个新分支设置它:

git config branch.autosetuprebase always

(您也可以指定neverremotelocal,详情请参阅man git-config。)

如果没有该--global选项,配置将保存到.git/config,并且只有当前存储库受到影响。使用--global,配置保存到~/.gitconfig,并且每个未配置的存储库都会受到影响。

此选项不会影响已经存在的分支。

3. 选项pull.rebase

git config pull.rebase true

(您也可以--global选择它。)

如果此选项为 true,则 runninggit pull等效于git pull --rebase,除非branch.<name>.rebase已设置为false

于 2014-10-02T12:53:46.743 回答
4

这使得在 给定分支上--rebase发出 a 时该选项成为默认选项。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
于 2015-04-24T10:31:43.797 回答
4

目前无法为存储库设置默认策略。

如果你自己想要它并且至少使用 git 1.7.9,你可以全局设置pull.rebase配置如下:

git config --global pull.rebase true

但是你必须在每台机器上做。一种选择是使用该选项配置默认用户主页模板/骨架。但是,用户可能会更改该选项。

如果您不想要合并,您可以定义一个服务器端挂钩来拒绝合并推送。

供您参考,他是pull.rebase的源文档:

如果为 true,则在获取的分支之上重新设置分支,而不是在运行“git pull”时从默认远程合并默认分支。请参阅“branch..rebase”以在每个分支的基础上进行设置。

合并时,将 --rebase-merges 选项传递给 git rebase 以便本地合并提交包含在 rebase 中(有关详细信息,请参阅git-rebase )。

保存时,还将 --preserve-merges 传递给 git rebase 以便本地提交的合并提交不会通过运行 git pull 变平。

当值是交互式时,rebase 以交互模式运行。

注意:这是一个可能很危险的操作;除非您了解其含义,否则不要使用它(有关详细信息,请参阅git-rebase)。

于 2018-12-18T11:49:46.967 回答