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
Gitバージョン2.28より前ではHEAD
、ハードコードされたを指す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 [...]
何らかの理由で、git は、 を作成する必要があったかどうかではなく、HEAD
内のファイルの存在に基づいてこのメッセージを使用するかどうかを決定します。ただし、表示されるメッセージが何であっても問題ではありません。git-init のマニュアル ページから:.git
.git
既存のリポジトリで実行するの
git init
は安全です。すでに存在するものは上書きされません。再実行の主な理由は、git init
新しく追加されたテンプレートを取得することです (または、指定されている場合はリポジトリを別の場所に移動するためです--separate-git-dir
)。
つまり、テンプレートに入力したgit init
ものが上書きされないことが保証されておりHEAD
、テンプレートを使用してHEAD
既存のものを上書きすることHEAD
もありません。これは明示的に文書化されているため、信頼できます。
さらに、次のようにも書かれています。
テンプレート ディレクトリ内の、名前がドットで始まらないファイルとディレクトリは、
$GIT_DIR
作成後に にコピーされます。
つまり、テンプレートは.git
、後ではなく、 の作成直後にコピーされることにも依存できます。
(もちろん、これはマニュアルに対する私の個人的な解釈です。git 開発者が同意しない可能性も十分にあります。)
答え4
前述のように、HEAD はマスターを指すようにハードコードされています。ただし、シェル エイリアスを作成して、git init
好きなように動作させることができます。シェルとして bash を使用している場合は、.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