Git リモート HEAD をマスター以外を指すように変更します。
-
18-09-2019 - |
質問
Git リモートの HEAD 参照が「マスター」以外を指すように設定するにはどうすればよいですか?
私のプロジェクトには「マスター」ブランチを使用しないというポリシーがあります (すべてのブランチには意味のある名前が付けられます)。さらに、正規マスター リポジトリには ssh:// 経由でのみアクセスでき、シェル アクセス (GitHub や Unfuddle など) はありません。
私の問題は、リモート リポジトリにまだ refs/heads/master への HEAD 参照があるのですが、それが別のブランチを指すようにする必要があることです。これにより、次の 2 つの問題が発生します。
リポジトリのクローンを作成すると、次のようになります。
警告:リモート HEAD が存在しない参照を参照しているため、チェックアウトできません。
それは混乱するし不便です。
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).
これらの具体的な回答は、このページを読んでこれらの特定のサービスについて考えている人にとって役立つかもしれません。
- HEAD ブランチを選択するためのドロップダウン メニューが追加されました。 http://repo.or.cz (例: http://repo.or.cz/editproj.cgi?name=for-me-and-for-all_imz.git);
- そしてで http://gitorious.org, も同様です(設定のどこかを見てください)。
- そしてで http://GitHub.com:管理者 > デフォルト ブランチ > (何かを選択) (@srcspider の回答のおかげで);
- 以来 v2.6, 、デフォルトのブランチは 「プロジェクト」 > 「リスト」 > > 「ブランチ」の Web インターフェース. 。v2.12 では、ゲリット 新しい set-head コマンドを追加しました それはあり得る SSH経由で使用される.
- そしてで ジラル (実行中 http://git.altlinux.org ALT のディストリビューション用のパッケージを構築する場合)、これには ssh インターフェイスを使用できます。
$ ssh git.alt help | fgrep branch default-branch <path to git repository> [<branch>] $
例えばssh git.alt default-branch packages/autosshd.git sisyphus
リモート リポジトリの HEAD を変更するにはautosshd.git
を指すsisyphus
支店。
、ちょうど.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のアカウントにログインして、ナビゲーションメニューの右端にある[設定を選択したの [設定]タブを選択したのデフォルト支店強い中>と私のためのトリックをしたリポジトリのメインページに戻ります。