git config设置以自动创建具有相同名称的远程分支

时间:2019-07-16 10:21:16

标签: git git-config

我以前的git设置非常好,在运行git push时它会自动推送到具有相同名称的远程分支,而在运行git pull时会自动拉到它。

我试图向朋友展示如何做到这一点,并且在此过程中设法破坏了我自己的配置。我该如何找回我想要的功能?我尝试了一堆配置,但是每个配置都有问题。

我目前在~/.gitconfig中有这个东西:

[push]
    default = current
[branch]
    autoSetupMerge = always

但是当我在本地创建一个新分支,然后提交并推送时,它会显示“一切都是最新的”。如果我随后运行git push origin <branch_name>,则会推送更改。

这些设置似乎也无法解决问题:

[push]
    default = matching
[branch]
    autoSetupMerge = always

2 个答案:

答案 0 :(得分:1)

这里的主控制旋钮确实是push.default,您可能想要currentmatching,它们有很大的不同:

  • current意味着,如果省略refspec参数,则Git应该使用您当前所在的分支-git status会说“ on branch ... ”,否则该git branch将带有星号打印,并尝试将其推到其上游副本。也就是说,如果当前分支为xyz,则current设置将要求origin将其xyz分支(上游)设置为与{{ 1}}。 即使您的xyz的上游是他们的xyz ,也是如此-请参阅下面的zyx

  • upstream意味着,如果省略refspec参数,则您的Git应该从其Git中获得分支名称的列表。然后,对于它们的每个分支名称-无论它们是什么; matchingmasterdevelop等,您的Git应该查看您是否也有一个同名的分支,而与分支的哈希ID是什么无关。对于每个匹配的名称,您的Git应该要求其Git将分支设置为与您的 Git为该名称显示的哈希ID相同。 / p>

zyx设置意味着,例如,如果您运行:

matching

,它们有分支git push ssh://host.example.com/path/to/repo.git masterdevelop,而您有zyxmaster,但没有develop,您的即使他们的Git与您的Git完全无关,Git也会要求他们设置他们的 zyxmaster以匹配您的developmaster

(如果他们的Git与您的Git无关,那么这个礼貌的请求肯定会失败,所以没什么大不了的。)

您可以使用以下命令明确要求任何给定推送的develop行为,而无需设置matching设置:

push.default

也就是说,用冒号git push <remote> : 作为refspec意味着“匹配”。

其余的:设置是push.defaultnothingupstreamtracking,主要是simple的变体:< / p>

  • 如果省略refspec,current设置只会完全出错。我使用了一段时间,但发现它太烦人了。
  • nothingupstream的设置是同义词-trackingtracking的不赞成使用的同义词-表示使用当前分支的上游设置来确定发送给其他Git的名称。因此,如果您的upstreamforward作为上游,您将要求他们更新其origin/reverse
  • reverse的设置与simple upstream的含义相同,并根据您{{1}的位置来选择要模拟的对象}-到:它将检查您使用的遥控器是否是为其设置了遥控器的遥控器,如果是,则其行为类似于current,只是要求分支名称匹配。否则,它的行为就像git push

这几天我将我的设置设为upstream,有意推入新分支时只运行current,而推入同名分支时simple不带参数。

答案 1 :(得分:0)

您可以使用以下命令指示git默认创建具有相同名称的远程分支(我已经使用了全局级别,可以根据您的要求决定级别:

git config --global push.default current

您可以在第一次推送新分支时使用-u选项,这将有助于跟踪新分支,并且在拉出更改时会有所帮助。如果您没有使用-u进行首次推送,则也可以将其用于以后的推送。基本上,在使用-u选项进行推送后,跟踪才会开始。

git push -u

没有为新分支和推送更改指定来源和分支名称。