更改 git init 預設分支名稱

更改 git init 預設分支名稱

我試圖弄清楚如何使用第一次提交git init之外master的不同預設分支名稱,但我找不到它的 git config 或任何允許我執行此操作的內容(例如別名僅適用於命令,而不是分支名稱) 。

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)

發行說明:https://lore.kernel.org/git/[電子郵件受保護]/

答案2

在 2.28 之前的 Git 版本中,HEAD硬編碼的指向refs/heads/master.

if (create_symref("HEAD", "refs/heads/master", NULL) < 0)

因此,沒有可以傳遞的配置設定或選項來git init將其變更為其他內容。

什麼但可能的是在以下的幫助下改變HEAD後面指向的內容git initgit 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 [...]

由於某種原因,git 根據HEAD文件中是否存在來決定是否使用此訊息.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運行完全相同,除非您git init在沒有任何其他參數的情況下呼叫。當您調用git init它將初始化存儲庫。接下來它將檢查分支“daddy”是否已經存在。如果是,它將檢查該分支,否則它將建立該分支並將您移至該分支。

相關內容