【问题标题】:Git: Sane branch overview (local [tracking], remote (tracking/stale/new))Git:Sane 分支概览(本地 [tracking],远程(tracking/stale/new))
【发布时间】:2017-11-28 14:26:12
【问题描述】:

我的本​​地存储库的所有分支及其所有远程及其关系是否有任何合理的概述? (内置或通过 3rd 方工具或通过命令行“hacks”/脚本)

例子:

Local           Loc. track.    Remote track.            Remote
--------------------------------------------------------------
mynewtest
development     ---[0↑0↓]--->  origin/development  -->  development [origin]
                               origin/testing      -->  testing [origin]
version0.5      --[45↑0↓]--->  origin/version0.5
                               origin/version0.6
version1.0      (-[1↑854↓]->)  origin/version1.0   -->  version1.0 [origin]
                                                        UITests [origin]
algoContestMia  --[12↑4↓]--->  mia/algo            -->  algo [mia]
algoContestBen  ---[4↑8↓]--->  ben/newalgo         -->  newalgo [ben]
algoContestMyA  ---[7↑0↓]--->  my/algoContest      -->  algoContest [my]
algoContestMyB  --[14↑10↓]-->  my/algoContest      -->  algoContest [my]
                               my/UITests          -->  UITests [my]

version1.0 是显示matching branches, that are not set as upstream but via matching names configured for pushs (not pulls) 的示例

【问题讨论】:

  • 这里的排序是随机完成的,可能是可配置的,就像过滤一样
  • git branch -vv?
  • 这是否给了我关于 a) 新远程分支的信息(在我的示例中是原点 UITests),b) 过时的远程跟踪分支(在我的示例中是 origin/version0.5origin/version0.6)和 c)未跟踪的远程跟踪分支(在我的示例中为origin/testingorigin/version0.6my/UITests)?我不这么认为

标签: git


【解决方案1】:

要使您的本地存储库保持最新,请使用 git fetch。要查看详细信息,请使用git branch -avv。要清除过时的跟踪引用,请使用git fetch --prune

如果您希望报告的格式与您在此处显示的方式完全相同,请查看git for-each-ref 上的--format 选项,以您想要的方式获得所有内容是五行区域。

您所描述的工作流程,您关心的分支在多个遥控器中出现和消失的唯一通知是它们的出现和消失,非常混乱。我自己的经验当然是有限的,但我从来没有见过这样的工作环境。尽管如此,你可以从 git 中得到你需要的东西来解决这个问题,你只需要自己整理它。

git ls-remote 显示来自任意路径或 url(或远程名称,这只是路径或 url 的本地配置简写和一组命令默认值)的所有或选择的引用。 git for-each-ref 是本地 repos 的 git ls-remote,它还可以显示本地配置中有关 refs 的内容,并且可以为每个内容打印任意格式(例如命令序列)的文本。

比如你可以

for f in `git remote`; do git ls-remote -h $f | sed s,^,$f\\t,; done

和一对git for-each-refs,一个用于参考/头部,另一个用于参考/远程,以获取本地集。请参阅git for-each-ref 文档以了解它会告诉您什么,我可能只使用三个数据集(即远程名称上的表)中的普通 unix joins 来执行此操作,或者如果它有毛的话,可能使用 sqlite 的东西。

【讨论】:

  • git branch -avv 既没有向我显示新的远程分支(在我的示例中是原点 UITests),也没有显示远程跟踪分支是否过时(因为 origin/version0.5origin/version0.6 在我的示例),也没有显示何时将分支配置为推送,因为名称匹配但未设置为上游/本地跟踪(如version1.0origin/version1.0 在我的示例中)。但至少这是我现在最接近我想要的东西
  • git fetch 在创建新的远程跟踪分支时告诉您,这就是您的 UITests 示例。 git fetch --prune 像您的 origin/version0.[56] 示例一样清除过时的 r-t-b。 git ls-remote 会告诉你在任何你有 url(或者当然是远程名称,这只是 url 和命令默认值的本地简写)的任何 repo 中的当前引用。如果您真的有一个如此混乱的工作流程,以至于您关心多个遥控器中的 refname 流失,我建议您使用 quickie sqlite db 和一些加入 magick。
  • 我同意您通常希望将所有遥控器都用作远程跟踪分支。但是,我确实想保留已经过时的远程跟踪分支,但我仍在努力(并最终合并到其他分支),我希望能够在概览中识别它们,以便我知道我无法推送对他们来说(即使在一段时间没有从事该回购/项目之后开始工作)
猜你喜欢
  • 2014-09-18
  • 2020-02-22
  • 1970-01-01
  • 2020-02-18
  • 2013-04-30
  • 2021-05-22
  • 1970-01-01
  • 2016-07-08
  • 2018-09-29
相关资源
最近更新 更多