【问题标题】:Different default remote for pull and push, while allowing manually specifying one用于拉取和推送的不同默认遥控器,同时允许手动指定一个
【发布时间】:2018-11-25 22:45:30
【问题描述】:

我有一个本地 Git 存储库,它有两个遥控器。 originupstream 的一个分支。我在master 工作。我想实现这个:

  • git pull 等价于 git pull upstream master
  • git push 等价于 git push origin master
  • git pull origin master 拉取自 origin
  • git push upstream master 推送到 upstream

因此将originupstream 同步的工作流程将简化为

git pull  # from upstream
git push  # to origin

我已经设法使用一系列git config 命令的以下结果配置第一部分:

[branch "master"]
    remote = upstream
    merge = refs/heads/master
    pushRemote = origin

但是,git push 给了我这个错误:

fatal: You are pushing to remote 'origin', which is not the upstream of
your current branch 'master', without telling me what to push
to update which remote branch.

有什么想法吗?

【问题讨论】:

  • 你运行的是什么版本的 Git?您是否更改了push.default 设置?在 Git >= 2.0 中,这应该可以工作,除非您配置了其他一些 push.default 设置。
  • @torek 我正在使用 Git 2.17,我希望该值在不存在时默认为 simple。但是,在明确指定push.default = simple 后,我的问题得到了解决。感谢您的回复。
  • 有趣。似乎它应该在没有明确的 push.default 设置的情况下工作。不过,我会将其发布为答案。

标签: git git-push git-pull git-remote


【解决方案1】:

这实际上应该在 Git 版本 >= 2.0 中“开箱即用”工作,就像您配置事物的方式一样。

显然,对于每个 cmets,您还必须将 push.default 显式配置为 simple,即使这是未配置 push.default 的默认设置。 (将push.default 设置为current 也可以,但会删除simple 为某些推送添加的安全检查。)

请注意,您可以使用git branch --set-upstream-to 设置任何分支的上游:

git branch --set-upstream-to=upstream/master master

但它确实需要一个git config 命令(或直接编辑配置文件——我自己喜欢经常使用git config --edit,尤其是为了修复错别字)来设置pushRemote,你需要什么你想达到的。

【讨论】:

    【解决方案2】:

    一个选项,虽然不完全符合您的要求,是在您的 .bashrc 文件中为各种命令定义别名:

    alias gpull='git pull upstream master'
    alias gpush='git push origin master'
    

    然后,只需像使用任何普通 UNIX 别名一样使用这些别名。我投票反对尝试更改基本 Git 命令的语义,部分原因是我不知道如何更改,部分原因是它可能会在某些时候导致混乱。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-16
      • 2014-08-11
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      相关资源
      最近更新 更多