更改 git init 默认分支名称

Son*_*Ex2 103 git

我试图弄清楚如何git init使用不同的默认分支名称而不是master第一次提交,但我找不到它的 git 配置或任何允许我这样做的东西(例如别名仅适用于命令,而不是分支名称)。

有没有办法更改设置的默认第一个分支名称git init

T. *_*ley 159

从 Git 2.28(2020 年 7 月 27 日发布)开始,您现在可以配置在初始化新存储库时创建的分支的名称

$ git config --global init.defaultBranch main
Run Code Online (Sandbox Code Playgroud)

设置此变量后,运行git init将生成一个存储库,其初始分支为main

$ git init
Initialised empty Git repository in /home/thomas/test-git-repo/.git/
$ git status
On branch main

No commits yet

nothing to commit (create/copy files and use "git add" to track)
Run Code Online (Sandbox Code Playgroud)

发行说明:https : //lore.kernel.org/git/xmqq5za8hpir.fsf@gitster.c.googlers.com/

  • 从 git 2.25.1 开始它不起作用 (4认同)
  • @SayanDey 是的,不幸的是,正如答案中所述,此功能是在 2.28 中引入的,因此这不适用于旧版本。考虑检查 [this answer](https://superuser.com/a/1559582/212762) 以获取解决方法。 (3认同)

小智 13

设置默认分支的一种方法是编辑文件~/.gitconfig。添加以下行:

[init]
  defaultBranch = main
Run Code Online (Sandbox Code Playgroud)

现在,当您运行时git initmain将成为您的默认分支。这类似于git config --global init.defaultBranch main@t-kiley 提到的跑步。

  • 当有简单的命令以更一致的方式给出完全相同的结果时,手动 git 配置文件操作似乎不是一个好主意。 (2认同)

Son*_*Ex2 12

更改默认 HEAD 的一种简单方法是在 git 模板目录中创建一个 HEAD。首先,将您的模板目录配置为~/Templates/git.git(或您喜欢的任何内容):

$ git config --global init.templateDir '~/Templates/git.git'
$ cp -r /usr/share/git-core/templates ~/Templates/git.git
Run Code Online (Sandbox Code Playgroud)

然后,HEAD在模板目录中创建文件:

$ echo 'ref: refs/heads/default' > ~/Templates/git.git/HEAD
Run Code Online (Sandbox Code Playgroud)

一切顺利!每当您运行时git init,您现在都会收到以下消息:

$ git init
Reinitialized existing Git repository in [...]
Run Code Online (Sandbox Code Playgroud)

出于某种原因,git 根据HEAD文件在 中的存在来决定是否使用此消息.git,而不是依赖于是否.git必须创建。但是,它向您显示什么消息实际上并不重要。从 git-init 手册页:

git init在现有存储库中运行是安全的。它不会覆盖已经存在的东西。重新运行的主要原因git init是选择新添加的模板(或者将存储库移动到另一个地方,如果有的话--separate-git-dir)。

也就是说,git init保证不会覆盖HEAD你放在模板中的,也不会使用模板的HEAD覆盖现有的HEAD。由于这是明确记录的,因此您可以依赖它。

此外,它还说:

模板目录中名称不以点开头的文件和目录在$GIT_DIR创建后会被复制到.

这意味着您还可以依赖模板在创建后立即复制.git,而不是稍后复制。

(当然,这是我个人对手册的解释。git 开发人员完全有可能不同意。)


Ikk*_*kke 11

在早于2.28版本的Git,HEAD硬编码到点refs/heads/master

if (create_symref("HEAD", "refs/heads/master", NULL) < 0)
Run Code Online (Sandbox Code Playgroud)

因此,您无法传递任何配置设置或选项以git init将其更改为其他内容。

什么可能的,虽然是改一下HEAD后指向正确git init的帮助下git symbolic-ref

$ git init
$ git symbolic-ref HEAD refs/heads/test
Run Code Online (Sandbox Code Playgroud)

这将更HEAD改为指向名为test. 然后,当您创建第一个提交时,将调用分支test而不是master.