0

Javascript を使用して開発している間、練習として縮小した JS をサーバーにアップロードするため、ローカル (プライベート) ブランチに変更を加える間、縮小した JS のみをマスター ブランチに保持したいと考えています。縮小された JS のみをローカル ブランチからマスターにマージする簡単な方法はありますか?

プライベート コミットからすべてのファイルをマージしたくないので、Cherry Pick コミットは機能しません。この方法は、あるブランチから特定のファイルを取得して別のブランチにコミットすることを提案しています。これを自動化する設定/代替方法があるかどうか疑問に思っていました。つまり、マージは縮小された js ファイル (*.min.js) のみを取得しますか?

4

1 に答える 1

1

ドキュメントルートにリモートリポジトリがあり、それをプッシュして、ライブサイトへの展開メカニズムとして使用しているようです。ドキュメント ルートに git リポジトリを配置するのは、良いデプロイ方法とは言えません。(コミット履歴全体と、潜在的に恥ずかしい未リリースのコードを含む、誰でもレポ全体を複製できます。) 設定が異なる可能性がありますが、私はあなたが書いたものに基づいてこの仮定に従います。

代わりに、post-receive フックを使用してドキュメント ルートに抽出masterし、git リポジトリを別の場所に置いておくと、圧縮された JS ソースと圧縮されていない JS ソースを恐れることなく保存できます。

ステージング サーバーのドキュメント ルートから git リポジトリを移動します。

.git/hooks/post-receiveステージング Web サーバーで:

#!/bin/sh
GIT_WORK_TREE=/path/to/your/docroot git archive master --format tar | tar -x "*.min.js"

これにより、選択したディレクトリにブランチgitのクリーン コピーがエクスポートされます。masterを介してパイプすることtarでこれを行います。これを使用して、送信したいファイルと送信しないファイルを正確にフィルタリングできます。post-receiveはシェル スクリプトであるため、ここで実際に使用して、展開後に必要なハウスキーピングを行うために後続の行を追加できます。

そこで、おすすめしたいのが上記です。それでも先に進み、マスター ブランチにファイルのサブセットのみを保持したい場合は、リンク先の方法をシェル スクリプトで使用できます。

ローカル ブランチ名がlocalであり、「デプロイ」したいものはすべてmaster既にコミットされていると仮定して、次のようにしますdeploy.sh(必要に応じて追加し.gitignoreます):

#!/bin/sh
git checkout master
git diff-tree --name-only -r local | grep ".min.js$" > temp_file_list.txt
git checkout local `sed 'N;s/\n/ /' temp_file_list.txt`
git commit -m "Selective 'merge' of minified js from my local branch"

次にdeploy.sh、変更された .min.js ファイルで master を更新するたびに実行します。Windows を使用していて、ローカル ファイルを DOS 形式のままにしている場合は、上記のコマンド\r\nだけ\nでなくsed、bash ベースのコマンド ライン git ツールをインストールする必要があります。

于 2013-02-08T20:00:31.573 に答える