web-dev-qa-db-ja.com

Github:マスターへのghページのミラーリング

GitHubでホストされているjQueryプラグインを開発しています。デモが含まれていて、手動でブランチgh-pagesにコピーしてプッシュしています。これを行うには、変更をmasterにプッシュすると、自動的にプッシュされますgh-pages、または少なくともそれらがミラーリングされているセットアップに。

私はすでにこれを見ました question しかし、それがこれらの要件に関する私の質問に本当に答えるかどうかはわかりません:

  1. 私は Tower を使用します。このGUIでソリューションが機能する限り、ターミナル(Mac)を使用して構成を変更してもかまいません。
  2. この「ミラーリング」が必要なのは、私のマシン上のすべてのリポジトリではなく、特定のリポジトリのみです。

乾杯

67
Ben Everard
git checkout gh-pages
git merge master
git Push Origin gh-pages
66
Steve

[remote "Origin"].git/configセクションに次の2行を追加します。

Push = +refs/heads/master:refs/heads/gh-pages
Push = +refs/heads/master:refs/heads/master

Pushを実行するたびに、自動的にマスターもghページにプッシュされます。これを jQuery Lifestreamプロジェクト に使用しています。

106

上記のデンバズが示唆することをしないでください !!プッシュの+(プラス記号)は、非早送りの更新を静かに受け入れます。これが原因でコミットがぶら下がってしまい、取り返しのつかないほど作業が失われる可能性があることがわかりました。プラス記号を削除するだけで、これがより安全なアプローチになります。

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.
27
MCSDWVL

@ denbuzze および @ MCSDWVL の回答にさらに説明を追加します。

gh-pagesを実行するたびに両方を自動的にmastergit 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は次のようになります。

  1. ローカルmasterブランチをリモートmasterブランチにプッシュする
  2. ローカルmasterブランチをリモートgh-pagesブランチにプッシュする

デフォルトでは。

:仕様の前に+を使用すると、強制的にリポジトリにプッシュされます。注意して使用してください:

Refspecの形式は、オプションの+の後に<src>:<dst>が続きます。ここで、<src>はリモート側の参照のパターンであり、<dst>はそれらの参照が書き込まれる場所ですローカル。 +は、早送りでなくても参照を更新するようにGitに指示します。

9
raviolicode

私は個人的にこれをエイリアスでラップするのが好きです:

alias gpogh="git checkout gh-pages && git merge master && git Push Origin gh-pages && git checkout -"

これにより、マスターがgh-pagesにミラーリングされ、githubにプッシュされます。次に、作業していた以前のブランチに戻ります。

2
dhulihan

または、以下のコマンドを使用するだけで、ローカルマスターブランチがgh-pagesマスターブランチにプッシュされます。 git Push -f Origin master:gh-pages

2
DJ Jaiswal

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
1
azl

[〜#〜] 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をマスターとして使用の場合、この問題は発生しません。

1
Dan Dascalescu