web-dev-qa-db-ja.com

サブツリープッシュを強制してリモートの変更を上書きするにはどうすればよいですか?

Yeoman プロジェクトのサブディレクトリを展開するには、lá this Gist のサブツリー展開を使用します。この例では、ブランチはproductionと呼ばれ、gh-pagesではありません。

これは、Gitサーバーがgit subtree Push --prefix dist Origin productionコマンドを拒否した昨日まで完全に機能しました。

 ! [rejected]        9fe1683aa574eae33ee6754aad702488e0bd37df -> production (non-fast-forward)
error: failed to Push some refs to '[email protected]:web-and-new-media/graduation2015.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart.

本番ブランチにローカルに切り替えると(クリーンです)、git pullオプションを使用しても、Your branch is up-to-date with 'Origin/production'.--rebaseを返します。

私たちのウェブUIを介してサーバー上の本番ブランチの内容を見ることができますが、そうするべきではありません。予想どおりdistディレクトリのコンパイル済み出力だけです。

そのためには、これらのファイルの上書きを安全に強制できるように思えますが、どのようにすればよいのでしょうか? git subtree Pushには--forceオプションがありません。

34
ele

トリックは、サブツリー分割を強制プッシュにチェーンすることでした:

git Push Origin `git subtree split --prefix dist master`:production --force

これは、 http://clontz.org/blog/2014/05/08/git-subtree-Push-for-deployment/ 、実際にスタックオーバーフローに関する回答 this を参照するユーザー。私は以前にこれをざっと読みましたが、Steve Clontzの投稿は私にクリックをさせてくれました。

58
ele

実際には、はるかに単純なソリューションがあります。

ソース: https://Gist.github.com/cobyism/4730490#gistcomment-233746

セットアップ

$ rm -rf dist
$ echo "dist/" >> .gitignore
$ git worktree add dist gh-pages

変更を加える

$ make # or what ever you run to populate dist
$ cd dist
$ git add --all
$ git commit -m "$(git log '--format=format:%H' master -1)"
$ git Push Origin production --force
$ cd ..
2
binarymason