縮小したCSSをGitに保存する必要がありますか?


10

私はGulpを使用して、取り組んでいるプロジェクトのSASSコードから縮小されたCSSを生成します。

Gitからライブ配信するときに、この縮小されたCSSを再生成するのがベストプラクティスと考えられるかどうか疑問に思いました...

または

縮小されたCSSファイルをGitに保存して、サーバー側で追加の作業をせずに、自動的に本番環境にプッシュする方法は?

これについての人々の考えに感謝します。ありがとう!


縮小されたcss / js / etcが1か所だけあります。保存する必要があります:/dev/null
R .. GitHub ICE HELPING ICE STOP 2016

(これは、お使いのウェブサーバーがgzip転送を完全に使用できるため
です

圧縮されたCSSと圧縮されていないCSSの両方を保存すると、同じものの2つのバージョンができるようになります。正規バージョンはどれですか?ある開発者が圧縮CSSを更新し、別の開発者が非圧縮CSSを更新するシナリオを想定するのは簡単です。2つの資産が分岐しました。もちろん、プロセスはこれを防ぐべきですが、たとえばチームの新しい開発者がいる現実的な見通しです。
Qwerky

回答:


13

"場合によります。" 通常の開発追跡では、ありません。ただし、クラウドおよびDevOpsの導入では、多くの場合、便利であり、必要な場合さえあります。

ほとんどの場合@ ptyxが正しいです。確かに、彼の「いいえ」はもう少し強調して述べることができます。「No. No!OMG NO!」のようなもの

縮小または圧縮されたアセットをGitのようなソース管理システムに保存しないのはなぜですか?

  1. それらは、ソースコードからオンザフライでビルドプロセスによってほぼ簡単に再生成できます。圧縮されたアセットを保存することは、基本的に同じ論理コンテンツを2回保存することです。これは、「自分を繰り返さないでください」(別名DRY)の原則に違反しています。

  2. 哲学的ではありませんが、より実用的な理由は、Gitに保存すると、圧縮/圧縮されたアセットの圧縮率が非常に低くなることです。ソース管理システムは、保存されている各ファイルの異なるバージョン間の変更(「デルタ」)を認識することによって機能します。これを行うには、最新のファイルを以前のバージョンと「差分」し、これらの差分を使用して、ファイルのすべてのバージョンの完全なコピーを保存しないようにします。しかし、minify / optimizeステップで行われた変換は、diff / deltaアルゴリズムが使用する類似点とウェイポイントをしばしば削除します。最も簡単な例は、改行やその他の空白を削除することです。結果として生じる資産は、多くの場合、1つの長い行にすぎません。ウェブビルドプロセスの多くの部分-のようなツールバベルUglifyJSBrowserifyLessSass / SCSS-アセットを積極的に変換します。それらの出力は不安定です。入力がわずかに変化すると、出力に大きな変化が生じる可能性があります。その結果、diffアルゴリズムは、毎回ほぼ完全に異なるファイルを参照すると信じることがよくあります。その結果、リポジトリはより速く成長します。ディスクは十分な大きさであり、ネットワークは十分に高速である可能性があります。特に、縮小/最適化されたアセットを2回保存する価値がある場合は、ポイント1に基づいて、余分なコピーは100%無意味である可能性があります。膨満。

ただし、これには大きな例外があります。DevOps /クラウドデプロイメントです。多くのクラウドベンダーとDevOpsチームは、Gitなどを使用して、開発の更新を追跡するだけでなく、アプリケーションとアセットをテストサーバーと運用サーバーに積極的に展開しています。この役割では、Gitが「変更されたファイル」を効率的に判断する機能。「各ファイル内で何が変更されたか」を判断するためのより詳細な機能と同じくらい重要です。Gitが縮小/最適化されたアセットのほぼ完全なファイルコピーを実行する必要がある場合、それ以外の場合よりも少し時間がかかりますが、それぞれの「プロジェクト内のすべてのファイル」のコピーを回避するのに役立つ優れた作業を行っているため、大したことはありません。展開サイクル。

デプロイエンジンとしてGitを使用している場合、縮小/最適化されたアセットをGitに保存すると、「いいえ」から切り替わることがあります。望ましい。実際に、デプロイするサーバー/サービスでの堅牢なビルド/後処理の機会がない場合などに必要になることがあります。(その場合の開発資産と配備資産を分割する方法は、別のワームの缶です。現時点では、単一の統合リポジトリ、複数のブランチ、サブリポジトリ、または複数の重複するリポジトリなど、いくつかの方法で管理できることを知っていれば十分です。 )


1
これありがとう!大変感謝いたします。よく説明されているように見えるので、これを答えとしてマークしました。
Connor Gurney

1
gitはデルタのみを保存しません。SVNにはありますが、gitはファイルを格納するためにはるかに複雑なメカニズムを使用します。すべてのファイルの完全なコピーが保存されると言う人もいますが、私が理解している限りでは、これも誤りです。私はそれが何であるかを理解しようとはしません。
jpmc26

「新しいデルタのみを保存する」を変更して「これらのデルタを使用して、ファイルのすべてのバージョンの完全なコピーを保存しないようにする」ことで、ニュアンスを実現できると思います。それはあなたの主張を明らかにし、事実を正確にし、特定のソース管理システムでそれがどのように行われるかという問題を掘り下げることを避けます。
jpmc26

DevOpsはgitフックを使用して、デプロイされたサーバー上で自動的にミニファイをトリガーし、両方の利点を活用できますか?
Buttle Butkus

@ButtleButkusはデプロイされたサーバーによって異なります。ポストフックに依存するには、1 /ターゲットに適切なトランスパイラー、ミニファイア、およびオプティマイザが存在すると想定するか、2 /ポストフックを実行する前にそれらをロードする必要があります。1 /は危険です。2 /は、デプロイごとにロードコスト/レイテンシを課します。また、可能性のある新しい障害モードと、リモートの不透明な一時的な環境でポストフックをデバッグするための要件が​​導入されています。理想的ではありません。したがって、フックは特効薬ではありません。アセットの事前変換/最適化は洗練されていない場合がありますが、堅牢で実用的です。
Jonathan Eunice

17

番号。

ソース管理にはソースのみを含める必要があります。ソースから生成された場合、それはそこに属していません-ビルドプロセスで生成する必要があります。

中間ビルドアーティファクトをソース管理したくない基本的な理由は、実行すると、実行しているものが変更したばかりのソースからのものか、再構築に失敗した中間製品からのものであるかを信頼することが非常に難しくなるためです。 。


3
生成されたコードは、実行可能コードと同じように考えてください。
candied_orange

3
この原則は常に正しいとは限りません。ユーザーが期待できないヘビー級のツールで生成されたファイルがある場合、生成されたファイルをgitに配置することは理にかなっています。configureこのため、多くの人が生成されたautoconf スクリプトをgitに入れています。
R .. GitHub ICE HELPING ICE STOP 2016

@R ..:理想的には、それらのために個別のアーティファクトリポジトリを維持しますが、現実はめったに理想的ではありません。
ケビン

@Rあなたは妥協することができます-しかし、それはそれだけです。また、CSSの縮小化の場合、ツールが「重い」、「遅い」、「不便」であるとは思いません。また、適切に機能し、生成されたコードをソース管理に置く必要がない代替の依存性注入メカニズム(maven、ivy ...)もあります。
ptyx 2016

1
@ButtleButkus私はdevops事件についての専門知識があまりありません。私が見たのは、純粋にソース管理としてではなく、(非常に便利で柔軟な)トランスポート/リリース/デプロイメントのメカニズムとして使用されているgitです。「ソース」のgitと「配信」のgitが分離していない限り(別個のリポジトリまたは別個のブランチ)、これは、ソース->ビルド->配信可能なチェーンを多少妥協する必要があることを意味します。余分なブランチがあり、未使用のバイナリ製品を使用して開発しています。それは実際的な妥協ですが、できる限り懸念を分離することを好みます。
ptyx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.