【问题标题】:How can I specify default branch for pulling from remote - while I have one remote configured already as a default?如何指定从远程拉取的默认分支 - 虽然我已经将一个远程配置为默认设置?
【发布时间】:2021-08-10 08:53:24
【问题描述】:

我已经设置了我的个人分叉:

master 分支镜像 master 上游 repo 中的分支和 fork 这是我的主要分支,包括我的更改 - 和其他功能/WIP/testing/testcase 分支照常。

master 分支有一个默认配置的远程origin/master 我的仓库所在的位置以及我推送更新master 的位置。

但我是从upstream远程拉的。

如何配置 git 以便我可以:

  • git push 同时在 master 分支并推送到 origin
  • git pull upstream 同时在 master 分支并从 upstream/master 拉取(现在我需要做 git pull upstream master

现在git pull upstream 导致

因为这不是您当前分支的默认配置远程

specify default branch for a non-default remote for pull 可能看起来是重复的,但不是 - “这不能回答问题,因为这仅适用于默认远程(来源)!”

同样的Specify default pull branch for a given remote - 它只允许设置一个

【问题讨论】:

  • 最近它变得更加烦人,因为即使 git pull upstream master 并不总是有效(因为一些回购决定将 master 重命名为 main 是一个很好的利用每个人的时间和有效的方法来减少数量世间恶)。而git pull upstream git pull upstream master git pull upstream main 越来越荒谬了。
  • 如果我理解正确,git pull upstream master 按预期工作?
  • @ValBerthe 是的。
  • 您是否尝试在您的.gitconfig 文件的[push][pull] 部分设置default = current
  • @ValBerthe 我刚试过,完全没有效果。我重新启动命令行窗口以确保已加载新文件版本。

标签: git configuration


【解决方案1】:

您可以设置一个遥控器,使其具有不同的推送和拉取网址,例如:git fetch origin 将从 upstream 获取,git push origin 将推送到 fork
但是我不知道根据遥控器指定两个不同分支名称的库存配置选项。

恕我直言,最简单的方法是让 fork 存储库中的分支遵循与 upstream 存储库相同的名称,以便在这两种情况下都可以推/拉到分支 main

另一个通用选项是:您可以定义别名来运行适当的命令。


这里是如何使用两个不同的 url 设置 origin

# you can have distinct protocols for both urls :
git remote set-url origin https://upstream.repo
git remote set-url --push origin ssh://fork.repo

像这样设置您的origin 远程,如果您将本地master 分支的上游分支设置为origin/main

git branch -u origin/main master

默认操作:

  • git push 将在fork 上将您的本地分支推送到main
  • git pull 将从upstream 获取和合并分支main

【讨论】:

  • > 恕我直言,最简单的方法是让你的 fork 仓库中的分支遵循与他们这样做的上游仓库相同的名称(master 用于主要的上游分支 - 两者都在 @987654341 @ 和 origin 遥控器)> 这样您就可以在这两种情况下推/拉到 refs/heads/main。我对此感到困惑。所以我会做git pull refs/heads/main?
  • 否:将您的分支远程设置为origin/maingit branch -u origin/main,现在git push 推送到fork 上的分支maingit pullmain 上的分支获取987654351@
  • refs/heads/main 是写入您的配置文件的内容
  • 编辑了答案,希望能更清楚
【解决方案2】:

如果您愿意完全放弃 git pull,以下是自动化工作的方法。

第 1 步:为自己编写一个新的 Git 命令。我们暂时称它为up。这个命令是一个简单的脚本,我们将在这篇文章的底部看到。要使其成为可执行的 Git 命令,请将其设为名为 git-up 的可执行脚本并将其放在某个位置,以便您的 $PATH 可以找到它。运行 git up 现在将运行您的 git-up 脚本。

第 2 步:在您希望发生这种情况的每个存储库中,运行:

git config branch.<name>.up origin/<other-name>

其中&lt;name&gt; 是您希望脚本更新的分支的名称,origin/&lt;other-name&gt; 是您的 Git 存储库中将由 git fetch 更新的远程跟踪名称。

第 3 步:将 git pull 替换为 git up

现在是脚本。我们需要它是可执行的(记住chmod +x!),并由 /bin/sh 或 /bin/bash 等 shell 运行,所以:

#! /bin/sh

脚本应该:

  • 找出我们现在在哪个分支
  • 找到branch.<em>name</em>.up 设置:如果未设置则出错
  • 运行git fetch
  • 运行git merge $setting

这些步骤通过以下方式完成:

branch=$(git symbolic-ref --short HEAD) || exit
up=$(git config --get branch.$branch.up) || {
    echo "no name configured for git-up for $branch" 1>&2
    exit 1
}
git fetch && git merge $up

这一切都未经测试,因此请测试每个部分并进行任何必要的修复。

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 2018-11-28
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2011-04-05
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多