我试图弄清楚如何使用git init
除master
第一次提交之外的其他默认分支名称,但我找不到它的 git 配置或任何允许我这样做的东西(例如别名仅适用于命令,而不是分支名称)。
git init
有什么办法可以改变设置的默认第一个分支名称吗?
答案1
从 Git 2.28(2020 年 7 月 27 日发布)开始,您现在可以配置初始化新存储库时创建的分支的名称:
$ git config --global init.defaultBranch main
设置此变量后,运行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)
答案2
HEAD
在2.28 之前的 Git 版本中,硬编码指向refs/heads/master
。
if (create_symref("HEAD", "refs/heads/master", NULL) < 0)
因此,没有配置设置或选项可供您传递git init
以将其更改为其他内容。
什么是不过,也可以HEAD
借助git init
git symbolic-ref
:
$ git init
$ git symbolic-ref HEAD refs/heads/test
这将更改为HEAD
指向一个名为 的(尚不存在)分支test
。然后,当您创建第一个提交时,将调用该分支test
而不是master
。
答案3
更改默认 HEAD 的一个简单方法是在 git 模板目录中创建一个 HEAD。首先,将模板目录配置为~/Templates/git.git
(或您喜欢的任何内容):
$ git config --global init.templateDir '~/Templates/git.git'
$ cp -r /usr/share/git-core/templates ~/Templates/git.git
HEAD
然后,在模板目录中创建文件:
$ echo 'ref: refs/heads/default' > ~/Templates/git.git/HEAD
现在一切就绪!每次运行git init
,您都会收到以下消息:
$ git init
Reinitialized existing Git repository in [...]
HEAD
出于某种原因,git 根据中文件的存在来决定是否使用此消息.git
,而不是依赖于是否.git
必须创建。但是,它向您显示什么消息实际上并不重要。来自 git-init 手册页:
在现有存储库中运行
git init
是安全的。它不会覆盖已存在的内容。重新运行的主要原因git init
是获取新添加的模板(或将存储库移至其他位置(如果--separate-git-dir
指定))。
也就是说,git init
保证不会覆盖HEAD
您放入模板中的,也不会使用模板的HEAD
覆盖现有的HEAD
。由于这已明确记录,因此您可以依赖它。
此外,它还说:
模板目录中名称不以点开头的文件和目录将在
$GIT_DIR
创建后复制到其中。
这意味着您还可以依赖在创建后立即复制的模板.git
,而不是在稍后复制。
(当然,这是我对手册的个人解读。git 开发人员完全有可能不同意。)
答案4
如上所述,HEAD 被硬编码为指向 master。但是,您可以创建一个 shell 别名,以便按照git init
您喜欢的方式操作。如果您使用 bash 作为 shell,请在 .bashrc 中输入如下内容:
function git_init_fnc () {
default_branch="main"
if [[ $1 == "init" ]] && [[ $# -eq 1 ]];then
git init
if [[ ! -z $(git branch -a | grep $default_branch) ]]; then
git checkout "$default_branch"
else
git checkout -b "$default_branch"
fi
else
/usr/bin/git "$@"
fi
}
alias "git"=git_init_fnc
git
这将用函数 替换命令。除非您调用时没有其他参数,否则此函数将使命令git
以完全相同的方式运行。当您调用它时,它将初始化存储库。接下来,它将检查分支“daddy”是否已存在。如果存在,它将检出该分支,否则它将创建该分支并将您移至该分支。git init
git init