【问题标题】:What parts of git have special / default behaviours for a branch named "master"?对于名为“master”的分支,git 的哪些部分具有特殊/默认行为?
【发布时间】:2018-06-11 19:40:16
【问题描述】:

鉴于the semantics of master 上有no wide agreement,我们正在考虑在我们的origin 服务器上根本没有名为master 的分支。

就标准git 命令行客户端内置的默认值而言,这会产生什么后果?它如何将名为 master 的分支与其他分支(本地和远程)区别对待?

【问题讨论】:

  • 据我所知,除了实际上将新存储库默认为拥有一个名为 master 的分支,该分支也被“签出”(据我所知,它被认为是在空存储库中签出) ,对这个分支名根本没有特殊处理。

标签: git branch


【解决方案1】:

根据我对代码库的调查以及我对没有 master 分支的存储库的经验,我会说你很清楚。

在最坏的情况下,有几个边缘情况不明确会导致命令失败,而不是退回到master 分支。


  • git clone 在未找到远程引用且未指定 --bare 标志时默认设置 master 分支 (builtin/clone.c)
  • 带有--anonymize 标志的git fast export 单独留下master,因为它是众所周知的默认值,并且不传达任何信息(built-in/fast-export.c)
  • 根据目标分支自定义合并提交消息(即“Merge branchx”与“Merge branchx into branchy”)(builtin/fmt-merge-msg.c)
  • git init 使用 master 作为默认分支名称 (builtin/init-db.c)
  • 当未指定分支名称时,git submodule 默认为 master (builtin/submodule--helper.c)

(下面的git-remote.cfiles-backend.c 输出实际上不与master 分支交互)


上面的列表是在git repository 上使用以下git grep 编译的。

# Look for string literals within *.c files containing "master" 
# with 10 lines of context, excluding the t/ and contrib/ directories
$ git grep -C 10 -E -e \".*master.*\" -- :**/*.c :^t/ :^contrib/

【讨论】:

    【解决方案2】:

    master 在某些地方被用作默认值。

    • 空存储库中的第一个分支在 master 分支中完成。
    • 当 y != master 时,合并提交消息要么是“合并分支 x”,要么是“合并分支 x 到 y”

    但是除了这类东西之外,一个名为master 的分支并不是真正需要的。

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2010-10-31
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 2016-07-11
      • 2012-02-04
      相关资源
      最近更新 更多