GitHubでホストされているjQueryプラグインを開発しています。デモが含まれていて、手動でブランチgh-pages
にコピーしてプッシュしています。これを行うには、変更をmaster
にプッシュすると、自動的にプッシュされますgh-pages
、または少なくともそれらがミラーリングされているセットアップに。
私はすでにこれを見ました question しかし、それがこれらの要件に関する私の質問に本当に答えるかどうかはわかりません:
乾杯
git checkout gh-pages
git merge master
git Push Origin gh-pages
[remote "Origin"]
の.git/config
セクションに次の2行を追加します。
Push = +refs/heads/master:refs/heads/gh-pages
Push = +refs/heads/master:refs/heads/master
Push
を実行するたびに、自動的にマスターもghページにプッシュされます。これを jQuery Lifestreamプロジェクト に使用しています。
上記のデンバズが示唆することをしないでください !!プッシュの+(プラス記号)は、非早送りの更新を静かに受け入れます。これが原因でコミットがぶら下がってしまい、取り返しのつかないほど作業が失われる可能性があることがわかりました。プラス記号を削除するだけで、これがより安全なアプローチになります。
Push = refs/heads/master:refs/heads/gh-pages
Push = refs/heads/master:refs/heads/master
今、強制更新を引き起こす代わりに、これは警告とプル提案を引き起こします
To https://github.com/someuser/repo.git
! [rejected] master -> gh-pages (fetch first)
! [rejected] master -> master (fetch first)
error: failed to Push some refs to 'https://github.com/someuser/repo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git Push --help' for details.
@ denbuzze および @ MCSDWVL の回答にさらに説明を追加します。
gh-pages
を実行するたびに両方を自動的にmaster
とgit Push Origin
にプッシュする場合は、レポのgit構成にRefspecを追加する必要があります。
したがって、 git-scm book によると、2つのPush
値をリポジトリ設定ファイル.git/config
に追加することで、2つの RefSpecs を追加できます。 :
[remote "Origin"]
url = https://github.com/<github_user>/<repo_name>
fetch = +refs/heads/*:refs/remotes/Origin/*
Push = refs/heads/master:refs/heads/master
Push = refs/heads/master:refs/heads/gh-pages
これにより、git Push Origin
は次のようになります。
master
ブランチをリモートmaster
ブランチにプッシュするmaster
ブランチをリモートgh-pages
ブランチにプッシュするデフォルトでは。
注:仕様の前に+
を使用すると、強制的にリポジトリにプッシュされます。注意して使用してください:
Refspecの形式は、オプションの
+
の後に<src>:<dst>
が続きます。ここで、<src>
はリモート側の参照のパターンであり、<dst>
はそれらの参照が書き込まれる場所ですローカル。+
は、早送りでなくても参照を更新するようにGitに指示します。
私は個人的にこれをエイリアスでラップするのが好きです:
alias gpogh="git checkout gh-pages && git merge master && git Push Origin gh-pages && git checkout -"
これにより、マスターがgh-pages
にミラーリングされ、githubにプッシュされます。次に、作業していた以前のブランチに戻ります。
または、以下のコマンドを使用するだけで、ローカルマスターブランチがgh-pagesマスターブランチにプッシュされます。 git Push -f Origin master:gh-pages
commitおよびPushマスターする。
次に:
git checkout gh-pages // -> go to gh-pages branch
git rebase master // bring gh-pages up to date with master
git Push Origin gh-pages // commit the changes
git checkout master // return to the master branch
[〜#〜] update [〜#〜]: GitHubでは、必要なブランチとディレクトリからページを公開できるようになりました。
gh-pages
ブランチをマスターとして使用する方がはるかに簡単でした。 「マスター」に魔法はありません。それは単なる別のブランチ名です。そこにisgh-pagesの魔法のようなものがあります。それは、GitHubがあなたのページを提供するためにindex.htmlを探しているからです。
詳しくは このトピックに関する他の回答 を参照してください。
gh-pages
をマスターとして使用することは、サブツリーよりも簡単で、ミラーリングよりも簡単です。説明されているようにgit subtree
を使用できます here または here :デモを含むディレクトリがある場合は、そのディレクトリをgh-branch
にプッシュできます。 1つのコマンドで。わかりやすくするために、ディレクトリにgh-pages
という名前を付けたとします。次に、変更をコミットしてmaster
にプッシュした後、これを実行してgh-pagesを更新します。
git subtree Push --prefix gh-pages Origin gh-pages
問題は、gh-pages
内のファイルがその外部の他のディレクトリ内のファイルを参照している場合です。シンボリックリンクは機能しないため、gh-pagesとして機能するディレクトリ内のファイルをcopyする必要があります。
gh-pages
をマスターとして使用の場合、この問題は発生しません。