129

「マスター」以外のものを指すように Git リモートの HEAD 参照を設定するにはどうすればよいですか?

私のプロジェクトには、「マスター」ブランチを使用しないというポリシーがあります (すべてのブランチには意味のある名前を付ける必要があります)。さらに、正規のマスター リポジトリには ssh:// 経由でのみアクセスでき、シェル アクセスはありません (GitHub や Unfuddle など)。

私の問題は、リモート リポジトリに refs/heads/master への HEAD 参照がまだあることですが、別のブランチを指す必要があります。これにより、次の 2 つの問題が発生しています。

  1. レポをクローンするとき、そこにこれ、

    警告: リモート HEAD が存在しない参照を参照しているため、チェックアウトできません。

    それは紛らわしく、不便です。

  2. Web ベースのコード ブラウザは、ツリーを参照するためのベースとして HEAD に依存します。有効なブランチを指すには HEAD が必要です。

4

11 に答える 11

65

1 年前に GitHubでほぼ同じ質問がありました。

アイデアは、マスター ブランチの名前を変更することでした。

git branch -m master development
git branch -m published master
git push -f origin master 

マスターに人々に使ってもらいたいものを持たせ、他のすべての作業をブランチで行います。

(" git-symbolic-ref HEAD refs/head/published" はリモート リポジトリに伝播されません)

これは、「 Git で origin/master を削除するにはどうすればよいですか」に似ています。


このスレッドで述べたように:(私の強調)

" git clone" は単一のローカル ブランチのみを作成します。
そのために、リモート リポジトリの を調べて、HEAD ref参照先のリモート ブランチと同じ名前のローカル ブランチを作成します。

まとめると、レポがAあり、それをクローンします。

  • HEAD参照refs/heads/masterとそれが存在する->から始まる
    というローカルブランチを取得しますmasterorigin/master

  • HEAD が参照refs/heads/anotherBranchし、それが存在する->から始まる
    というローカル ブランチを取得します。anotherBranchorigin/anotherBranch

  • HEAD 参照refs/heads/masterであり、それが存在しない
    -> " git clone" 文句を言う

HEADrepoの ref を直接変更する方法があるかどうかはわかりません

(これがあなたの質問の要点です、私は知っています;))


おそらく唯一の方法は、「貧しい人々のための出版物」です。

 $ git-symbolic-ref HEAD refs/head/published
 $ git-update-server-info
 $ rsync -az .git/* server:/local_path_to/git/myRepo.git/

しかし、それにはサーバーへの書き込みアクセスが必要であり、常に可能であるとは限りません。


Git: ベア リポジトリで Active Branch を変更する正しい方法は?」で説明したようgit remote set-headに、リモート リポジトリでは何も変更されません。

ローカル レポジトリにローカルに保存されているリモート トラッキング ブランチのみが変更されますremotes/<name>/HEAD


Git 2.29 (2020 年第 4 四半期) では、失敗した " ( man ) " は、操作が完了したことを示唆する何かを言っていましたが、これは誤解を招くものでした。git remote set-head

Christian Schlack ( )によるcommit 5a07c6c (2020 年 9 月 17 日)を参照してください。( 2020 年 9 月 22 日コミット 39149dfJunio C Hamanoによってマージされました)cschlack
gitster

remoteset-head:失敗時に成功メッセージを表示しない

署名者: Christian Schlack

エラーが発生した場合に、「origin/HEAD set to master」というメッセージを抑制します。

$ git remote set-head origin -a
error: Not a valid ref: refs/remotes/origin/master
origin/HEAD set to master
于 2009-09-28T05:49:37.093 に答える
36

あなたがGitHubについて言及しているので、彼らのサイトでそれを行うには、単にあなたのプロジェクトに入り、そして...

admin > Default Branch > (choose something)

終わり。

于 2012-06-22T06:30:47.317 に答える
17

参照: http://www.kernel.org/pub/software/scm/git/docs/git-symbolic-ref.html

これにより、git リポジトリのデフォルト ブランチが設定されます。これは、ベア リポジトリまたはミラー リポジトリで実行できます。

使用法:

$ git symbolic-ref HEAD refs/heads/<branch name>
于 2010-11-09T13:48:44.097 に答える
10

(基本的に同じ質問「リモートリポジトリにgitシンボリック参照を作成する」がありましたが、普遍的な答えはありませんでした。)

ただし、さまざまなgit「ファーム」(複数のユーザーが制限されたインターフェイスを介してgitリポジトリを管理できる場合:httpおよびssh経由)には特定の回答があります:http://Github.com、http ://Gitorious.org、http / /repo.or.cz、Girar(http://git.altlinux.org)。_ _ _

これらの特定の回答は、このページを読んでこれらの特定のサービスについて考えている人に役立つ可能性があります。

于 2010-06-03T01:08:25.813 に答える
7

シェルからリモート リポジトリにアクセスできる場合は、.git (ベア リポジトリの場合はメイン ディレクトリ) に移動し、HEAD ファイルが正しいヘッドを指すように変更します。たとえば、デフォルトでは常に「refs: refs/heads/master」が含まれていますが、代わりに foo を HEAD にする必要がある場合は、HEAD ファイルを編集して内容を「refs: refs/heads/foo」に変更します。

于 2011-10-03T16:24:00.230 に答える
6

磁器の Git コマンドのみを使用して、デタッチされたマスターブランチを作成できます。

git init
touch GO_AWAY
git add GO_AWAY
git commit -m "GO AWAY - this branch is detached from reality"

これにより、失礼なメッセージを含むmasterブランチが作成されます (もっと礼儀正しくしたい場合があります)。次に、「実際の」ブランチ ( SVN にちなんでトランクと呼びましょう) を作成し、 masterから切り離します。

git checkout -b trunk
git rm GO_AWAY
git commit --amend --allow-empty -m "initial commit on detached trunk"

ちょっと、プレスト! gitk --allマスタートランクを表示し、それらの間にリンクはありません。

ここでの「魔法」は、--amendによってgit commitが現在の HEAD と同じ親を持つ新しいコミットを作成し、HEAD がそれを指すようにすることです。しかし、現在の HEAD はリポジトリでの最初のコミットであるため、親を持たないため、新しい HEAD も親を取得せず、互いに切り離されます。

refs/heads/master がまだそれを指しているため、古い HEAD コミットはgit-gcによって削除されません。

--allow-emptyフラグが必要なのは、空のツリーをコミットしているためです。git rmの後にいくつかのgit addがあった場合、それは必要ありません。

実際には、リポジトリ内の最初のコミットをブランチし、そのツリーを削除し、デタッチされたツリーを追加してから、 git commit --amend を実行することで、いつでもデタッチされたブランチを作成できます。

これは、リモート リポジトリのデフォルト ブランチを変更する方法についての質問には答えていませんが、切り離されたブランチを作成する方法については明確な答えが得られます。

于 2010-07-22T14:14:47.830 に答える
2

まず、デフォルトとして設定する新しいブランチを作成します。たとえば、次のようになります。

$>git branch main

次に、そのブランチをoriginにプッシュします。

$>git push origin main

GitHub アカウントにログインすると、リポジトリに移動し、[設定] > [デフォルト ブランチ] を選択して、「main 」を選択できます。

その後、必要に応じて master ブランチを削除できます。

$>git push origin :master

于 2012-12-21T18:05:38.343 に答える
0

ギトライトの人々のために、ギトライトは-それを待つ-と呼ばれるコマンドをサポートしsymbolic-refます。リポジトリへのW(書き込み)権限がある場合は、そのコマンドをリモートで実行できます。

于 2012-11-30T03:55:52.707 に答える
-1

GitHubアカウントにログインし、ナビゲーションメニューの右端にある[設定]を選択し、[設定]タブで[デフォルトのブランチ]を選択して、私のためにトリックを行ったリポジトリのメインページに戻るだけです。

于 2013-01-27T18:44:34.193 に答える