获取默认远程推送和默认远程分支

2024-04-06

我想从脚本中获取默认的推送远程和默认的推送分支。

对于召回,git 将按以下顺序在这些设置之间选择远程:

  • branch.<name>.pushRemote
  • remote.pushDefault
  • branch.<name>.remote
  • very last default
    • 原点如果config push.default current
    • NULL if config push.default upstream

我找不到 git 如何选择最后一个默认源的任何参考,但它似乎是静态的。

默认远程分支可以是:

  • branch.<name>.merge if config push.default upstream
  • 否则当前分支名称

现在,我想要一种安全的方法来获取默认推送远程和默认推送分支。

  1. 我可以用git config --get,但我必须根据以下内容解决自己的行为config push.default,而且似乎有点冒险。
  2. I would prefer to use one of these:
    • git for-each-ref --format='%(push:short)' refs/heads/mybranch
    • git rev-parse --abbrev-ref=loose mybranch@{push}

最后我有两个问题:

  1. git for-each and git rev-parse返回类似的路径origin/mybranch。如何拆分远程名称和分支名称(远程名称可以包含/'s).
  2. 两者之间有更安全的功能吗? (在我所有的测试中,它们总是返回相同的输出)。

在 Git 2.16(2018 年第一季度)中,出现了一种新语法,其中“--format=...“选项”git for-each-ref https://git-scm.com/docs/git-for-each-ref“学会展示 的名字remote' 存储库和远程端的引用 受到影响的 'upstream' and 'push' via "%(push:remotename)” 和朋友。

See commit 1b58686 https://github.com/git/git/commit/1b586867dba322c911cc9b4441e2be130ba76cd5 (07 Nov 2017), and commit cc72385 https://github.com/git/git/commit/cc72385fe350d4d7bc64f84e8817dbdfe27b04fe (05 Oct 2017) by Johannes Schindelin (dscho) https://github.com/dscho.
See commit 9700fae https://github.com/git/git/commit/9700fae5ee93dd0928cb82afb7b2fd49295e28d2 (07 Nov 2017) by J Wyman (whoisj) https://github.com/whoisj.
(Merged by Junio C Hamano -- gitster -- https://github.com/gitster in commit 093048b https://github.com/git/git/commit/093048b22913be23fe45635e8723d3aa3a185ff3, 15 Nov 2017)

for-each-ref:让upstream/push选择性地报告远程名称

有时,例如脚本不仅想知道远程存储库上上游分支的名称,还想知道远程分支的名称。

该补丁提供了新的后缀:remotename对于上游和 推动原子,可以准确地显示这一点。例子:

$ cat .git/config
...
[remote "origin"]
    url = https://where.do.we.come/from
    fetch = refs/heads/*:refs/remote/origin/*
[remote "hello-world"]
    url = https://hello.world/git
    fetch = refs/heads/*:refs/remote/origin/*
    pushURL = hello.world:git
    push = refs/heads/*:refs/heads/*
[branch "master"]
    remote = origin
    pushRemote = hello-world
...

$ git for-each-ref \
  --format='%(upstream) %(upstream:remotename) %(push:remotename)' \
  refs/heads/master
refs/remotes/origin/master origin hello-world

实施选择not to DWIM https://en.wikipedia.org/wiki/DWIM如果没有明确的则推送远程 推送远程已配置;原因是 DWIM 是可能的 通过使用

%(if)%(push:remotename)%(then)
    %(push:remotename)
%(else)
    %(upstream:remotename)
%(end)

虽然不可能“取消 DWIM”信息,以防万一 调用者实际上只对显式推送遥控器感兴趣。

While :remote会更短,也会更模糊, 它也会关上门,例如为了:remoteref(这将 显然请参考远程存储库中的相应参考)。


for-each-ref:让上游/推送报告远程引用名称

有时脚本想要知道不仅仅是名字 将分支推送到远程,而且还已知分支的名称 通过远程存储库.

一个例子是当一个工具想要推送到同一个分支时 它会自动从中拉出,即<remote><to> in git push <remote> <from>:<to>将由以下人员提供%(upstream:remotename) and %(upstream:remoteref), 分别。

该补丁提供了新的后缀:remoteref为了upstream and push原子,可以准确地显示这一点。例子:

$ cat .git/config
...
[remote "origin"]
    url = https://where.do.we.come/from
    fetch = refs/heads/*:refs/remote/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "develop/with/topics"]
    remote = origin
    merge = refs/heads/develop/with/topics
...

$ git for-each-ref \
    --format='%(push) %(push:remoteref)' \
    refs/heads
refs/remotes/origin/master refs/heads/master
refs/remotes/origin/develop/with/topics refs/heads/develop/with/topics
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取默认远程推送和默认远程分支 的相关文章

  • 如何修复 git 中的“警告:忽略名称损坏的引用”?

    我正在 OSX 上工作 在特定的存储库中 每当我在输入 git 命令后按 Tab 键自动完成 git diff clicks tab 我现在看到大量警告 warning ignoring ref with broken name refs
  • Git - -m 是什么意思 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions In Gi
  • 在发出拉取请求之前我应该​​使用 dev 分支进行变基吗?

    我们当前的工作流程 从 dev 创建一个功能分支 开发功能并推送分支后 执行以下操作 git checkout dev git pull rebase 开发中 git checkout my feature branch git rebas
  • 作曲家转储自动加载和 git

    为了部署实用性 我们决定将供应商目录提交到 git 存储库中 一切正常 但是每次我们运行 Composer dump autoload 时 它都会修改以下文件 这非常烦人 因为它似乎并不代表文件的特定状态 每次重新运行它时它看起来都像一个随
  • “分支”到底是什么意思?

    长话短说 据我所知 术语 分支 Git 术语 可能指的是相关但不同的事物 指向提交的非符号引用 指针 此类引用的名称 例如 master 存储库提交 DAG 的子图 由此类引用所指向的提交可到达的所有提交组成 然而 我发现这个术语显然指的是
  • Github 贡献图中未显示进度?

    我在 github 中的存储库是公开的 当我通过命令行将文件从本地系统推送到 github 时 新贡献不会显示在贡献直方图中 但是 当我将任何文件直接添加到 github 的存储库中时 贡献会显示在直方图中 这是什么原因呢 一个可能的原因是
  • 如何在 git 中使用 --work-tree 选项?我不断收到错误消息

    我有一个普通的存储库 其中有一个工作树和一个与工作树位于同一目录中的 git 文件夹 我正在尝试使用以下命令从该位置外部运行 git 命令 git git dir path to repo git work tree path to rep
  • 如何设置PS1使git和conda都可以在bash中显示?

    我的 bashrc show a short way shortwd num dirs 3 pwd symbol newPWD PWD HOME if echo n newPWD awk F print NF gt num dirs the
  • 为什么 ssh-agent 需要 root 访问权限?

    我刚刚安装了 Archbang 并尝试克隆我的 Git 项目 这需要 SSH 密钥 过去 我在 Ubuntu 和 RedHat 机器上遵循 Github 指南取得了成功 但由于某种原因 它在我的新 Arch 安装上不起作用 我已使用以下命令
  • git rebase 开发分支

    抱歉 只是另一个 变基 问题 但我对此感到困惑 我有时会将开发分支上的提交推送到远程 原始 现在 关于 rebase 总是提到的一件事是 如果您推送了更改 则永远不要 rebase 这意味着 我永远无法重新调整我的开发分支 只能合并它 在功
  • 如何通过pygit2获取当前签出的Git分支名称?

    这个问题应该与 如何获取Git中当前的分支名称 https stackoverflow com questions 6245570 how to get current branch name in git 获取 git 当前分支 标签名称
  • 以最小的努力在多台计算机之间同步代码

    我希望能够跨多台计算机 准确地说是 3 台 同步源代码和整个项目 我尝试过使用 git 但从来没有获得过无忧无虑的体验 也许是因为我从来没有投入很多精力 所以 我理想中想要的是 能够将文件夹及其所有子文件夹添加到 同步 列表 基本上 一旦我
  • Git Grep 颜色选项解释和/或比较

    我正在尝试自定义我的 Git 颜色 读完后文档 https git scm com docs git config 我找到了我想要设置的选项 除了 Grep 之外 一切都工作正常 我意识到 我过去并没有真正使用过它 我想用相同的调色板为其设
  • 如何修复 git 子模块错误 fatal: Needed a single revision Unable to find current origin/master revision in submodule path?

    我不断收到这个问题 fatal Needed a single revision Unable to find current origin master revision in submodule path coq serapy 我试过了
  • 为不同分支部署GitLab页面

    我正在使用 GitLab Pages 部署我的 React 应用程序 并且运行良好 这是我的gitlab ci yml Using the node alpine image to build the React app image nod
  • Capistrano 3 运行每个命令两次(新安装)- 配置问题

    我刚刚完成第一次 Capistrano 安装 大部分内容都保留为默认设置 我配置了我的服务器 其身份验证 远程文件夹以及对 git 存储库的访问 我使用 capistrano 将 php 代码部署到我的服务器 上限分期部署 and 上限生产
  • 从 Git 中的分支父级中提取更改

    如何从 Git 中的分支的父级中提取更改 特别是在 github 配置的项目中 例如 假设我分叉了http github com originaluser originalproject http github com originalus
  • 如何修复 GitHub 拉取请求中被 git rebase 破坏的提交顺序?

    当我编写代码时 我会将其分解为小的逻辑更改 以便轻松快速地进行审查 为此 我使用git rebase i 交互式 压缩 删除和更改提交的顺序 我注意到这有时会导致 GitHub 拉取请求的提交顺序不同 尽管该顺序保留在远程分支上 例如 co
  • 将生成的文件存储在 Git 中

    我们有一个相当大且过于混乱的代码库 我们希望使用 Git 进行迁移 目前 它是一个大的整体块 不能轻易地分割成更小的独立组件 该代码构建了大量共享库 但它们的源代码如此交错 目前无法将其干净地分离到单独的存储库中 我不太关心 Git 是否可
  • 如何在 NetBeans 中执行“git Blame”?

    NetBeans 内置了对 git 的支持 我可以做一个git blame在 NetBeans 内 如果是这样 怎么办 I googled https www google nl search q netbeans git blame它 但

随机推荐