質問

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

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

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

  1. リポジトリのクローンを作成すると、次のようになります。

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

    それは混乱するし不便です。

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

役に立ちましたか?

解決

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

そこで考えられたのが、master ブランチの名前を変更することでした。

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

マスターにユーザーに使用してもらいたいものを持たせ、他のすべての作業をブランチで実行します。

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

これは「」に似ています。Git でオリジン/マスターを削除するにはどうすればよいですか".


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

"git clone" はローカル ブランチを 1 つだけ作成します。
そのためには、 HEAD ref リモート リポジトリのローカル ブランチを参照し、それが参照するリモート ブランチと同じ名前のローカル ブランチを作成します。

以上をまとめると、リポジトリ A を作成してクローンを作成します。

  • HEAD 参考文献 refs/heads/master そしてそれは存在します
    -> オリジン/マスターから始まるマスターと呼ばれるローカルブランチを取得します。

  • ヘッドリファレンス refs/heads/anotherBranch そしてそれは存在します
    -> というローカルブランチが作成されます。 anotherBranch, 、 から始まる origin/anotherBranch

  • ヘッドリファレンス refs/heads/master そしてそれは存在しない
    -> 「git clone」が不平を言う

直接変更する方法があるかどうかはわかりません HEAD リポジトリ内の参照.

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


多分 唯一の方法は 「貧しい人のための出版物」, 、ここで、次のことを行います。

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

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


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

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

他のヒント

アップデート: これは、リポジトリのローカル コピー (「クライアント」) に対してのみ機能します。以下の他の人のコメントをご覧ください。

git の最新バージョン (2014 年 2 月) では、正しい手順は次のようになります。

git remote set-head $REMOTE_NAME $BRANCH

たとえば、リモコンのヘッドを切り替えると、 origin 分岐する develop だろう:

git remote set-head origin develop

あなたはGitHubのに言及しているので、あなたのプロジェクトに自分のサイト上で簡単に行くが、それを行うには、その後...

admin > Default Branch > (choose something)

完了ます。

を参照してください:にhttp:// WWW .kernel.org /パブ/ソフトウェア/ SCM / gitの/ docsに/のgit-シンボリック-ref.htmlする

これは、gitリポジトリのデフォルトのブランチを設定します。あなたは裸またはミラーリポジトリでこれを実行することができます。

使用方法:

$ git symbolic-ref HEAD refs/heads/<branch name>

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

ただし、さまざまな git "ファーム" (複数のユーザーが制限されたインターフェイスを通じて git リポジトリを管理できる場所) については、具体的な答えがあります。http および ssh 経由): http://Github.com, http://Gitorious.org, http://repo.or.cz, ジラル (http://git.altlinux.org).

これらの具体的な回答は、このページを読んでこれらの特定のサービスについて考えている人にとって役立つかもしれません。

あなたは、シェルからリモートリポジトリへのアクセス権を持っている場合は、

、ちょうど.git(またはメインDIRその場合は、裸のレポ)に入り、正しいヘッドを指し示すようにHEADファイルを変更します。たとえば、デフォルトでは常に「レフリー:レフリー/ヘッド/マスター」が含まれていますが、あなたの代わりにHEADするFOOが必要な場合は、単にHEADファイルを編集し、「レフリー:レフリー/ヘッド/ fooの」に内容を変更します。

分離型を作成できます マスター 磁器の Git コマンドのみを使用してブランチします。

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

それは私たちに マスター 失礼なメッセージを含むブランチ (より丁寧な方がよいかもしれません)。ここで、「実際の」ブランチを作成します (これをブランチと呼びます) トランク SVNに敬意を表して)そして離婚する マスター:

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

おい、プレスト! gitk --all 見せます マスター そして トランク それらの間には何のつながりもありません。

ここで言う「魔法」とは、 - 修正する 原因 gitコミット 現在の HEAD と同じ親を持つ新しいコミットを作成し、HEAD がそれを指すようにします。ただし、現在の HEAD はリポジトリ内の最初のコミットであるため親を持たないため、新しい HEAD も親を取得せず、相互に分離されます。

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

--allow-empty flag は空のツリーをコミットする場合にのみ必要です。いくつかあったとしたら git addの後に gitrm それなら必要ないでしょう。

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

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

まず、デフォルトとして設定する新しいブランチを作成します。例:

$>git branch main

次に、そのブランチを 起源:

$>git push origin main

GitHub アカウントにログインすると、リポジトリに移動し、[設定] > [デフォルト ブランチ] を選択して、[主要."

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

$>git push origin :master

それを待つ - - symbolic-ref

は、gitoliteの人にとって、gitoliteと呼ばれるコマンドをサポートしています。それはあなたがレポにW(書き込み)権限を持っている場合は、リモートでそのコマンドを実行することができます。

検索するときに

問題に関連して、私はここで終わっます:

私はGitHubの上で変更デフォルトブランチのローカルレポを認識させるにはどうすればよい

完全については、答えを追加します:

git remote set-head origin -a

シンプルちょうどあなたGitHubのアカウントにログインして、ナビゲーションメニューの右端にある[設定を選択したの [設定]タブを選択したのデフォルト支店と私のためのトリックをしたリポジトリのメインページに戻ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top