1. ホーム
  2. ギット

[解決済み】Git: ベアリポジトリのActive Branchを変更する正しい方法?

2022-04-09 20:06:02

質問

私のプロジェクトのセントラルストアとして使用されているベアリポジトリがあります。 すべての開発者は git clone <repo> で共有しています。 クローンを作成すると、master ブランチのチェックアウトが行われます (このときに git clone -n ) なぜなら repo.git/HEAD には ref: refs/heads/master であるため、これを アクティブブランチ .

問題は、どのように アクティブブランチ を正しく表示できますか? 単純に repo.git/HEAD ファイルに直接書き込めばいいのですが、それは面倒だし、まあ、ハチャメチャな感じがします。

をやってみた。 git checkout <otherbranch> レポに .git ディレクトリに移動しましたが、作業ツリーにいなかったので失敗しました。

試しに git update-ref HEAD refs/heads/otherbranch が、これは refs/heads/master を refs/heads/otherbranch と同じに更新しただけです (そう、これは本番用ではなくダミーリポジトリで行ったのです!)。

試しに git update-ref --no-deref HEAD refs/heads/otherbranch で、これはほぼ成功しました。 それは HEAD ファイルを作成しましたが、このファイルには refs/heads/otherbranch .

gitバージョンでテストしています 1.7.0.2.msysgit.0 .

を通して行う方法はないのでしょうかね。 git push というのも、デフォルトのブランチを誰でも変更できるようにするのは、ちょっと危険な気がするからです (!)。 .git ディレクトリを直接ハックするよりも HEAD ファイルを作成します。

解決方法は?

リモートベアレポにアクセスできる場合は、この の記事を参照してください。 :

git symbolic-ref HEAD refs/heads/mybranch

これは、あなたのリポジトリの HEAD ファイルを更新して、それを含むようにします。

ref: refs/heads/mybranch

で説明されているように git-symbolic-ref


リモートリポにアクセスできない場合は、以下を参照してください。 前回の回答 .


のようなコマンドは git remote set-head :

  • のデフォルトブランチは変更されません。 リモート レポを作成します。

    を変更するだけです。 リモートトラッキングブランチ に格納されている ローカル レポを refs/remotes/<name>/HEAD

  • は変わりません HEAD 自体(繰り返しますが refs/remotes/<name>/HEAD が必要です。 git symbolic-ref .

だから git remote set-head が答えです。

git symbolic-ref HEAD は、リモートリポに直接アクセスできる場合です。