[解決済み] Git は ZIP ファイルをディレクトリとして扱い、ZIP 内のファイルを blob として扱うことができますか?
質問
シナリオについて
の中に常に保存されているファイルを使って作業することを強いられるとします。
.zip
ファイル内に常に格納されているファイルを扱うことを余儀なくされたとします。ZIP ファイル内のファイルの中には、小さなテキスト ファイルで頻繁に変更されるものもあれば、大きなファイルでありながら幸運にもどちらかといえば静的なもの (たとえば、画像) もあります。
これらの ZIP ファイルを Git リポジトリの中に置きたい場合、それぞれの ZIP は blob として扱われるので、私がコミットするたびにリポジトリは ZIP ファイルのサイズだけ大きくなります...たとえ中の小さなテキストファイルがひとつだけ変化したとしてもです!
このような ZIP ファイルを Git リポジトリの中に置きたい場合、ZIP ファイルを 1 つの blob として扱い、ZIP ファイルのサイズだけ大きくする必要があります。
なぜこれが現実的なのか
マイクロソフト ワード 2007
/
2010
.docx
とエクセル
.xlsx
のファイルはZIPファイルです...
欲しいもの
ひょっとして、ZIPファイルをファイルとして扱わず、ディレクトリとして扱い、その中身をファイルとして扱うようにGitに指示する方法がありますか?
利点は
- リポジトリサイズが非常に小さく、転送やバックアップが速い。
- Git による変更点を ZIP ファイルに表示 は自動的に動作します
しかし、うまくいくはずがない、と?
私は、追加のメタデータがなければ、これがある程度の曖昧さにつながることを理解しています。
git checkout
を作成するかどうかを決定しなければなりません。
foo.zip/bar.txt
を通常のディレクトリにあるファイルとして作成するのか、それともZIPファイルとして作成するのかを決めなければなりません。しかし、これは設定オプションで解決できるのではないでしょうか。
それがどのように行われ得るかについての2つのアイデア (まだ存在しないのであれば)
-
などのライブラリを使って
minizip
またはIO::Compress::Zip
Gitの内部 - ファイルシステムのレイヤーを追加して、Git が ZIP ファイルをディレクトリとして認識するようにする。
どのように解決するのですか?
これは存在しませんが、現在のフレームワークでは容易に存在し得ます。Git が diff を実行するときにバイナリやASCIIファイルを表示して異なる動作をするように、設定インターフェイスを通じて特定のファイル形式に対して特別な処理を提供するよう指示することができます。
コードベースを変更したくない場合 (これはちょっとクールなアイデアですが)、次のようにして自分用にスクリプト化することもできます。
プリコミットおよびポストチェックアウトフック
を使用して、ファイルを解凍して保存し、チェックアウト時に .zip の状態に戻すこともできます。で指定されたファイル blob / インデックスのみへのアクションを制限する必要があります。
git add
.
どちらの方法でも、ちょっとした作業です。他のGitコマンドが、何が起こっているのかを認識してうまく立ち回れるかどうかが問題なのです。
関連
-
[解決済み】Git リポジトリから .DS_Store ファイルを削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] Gitでユーザー名とパスワードを保存するには?
-
[解決済み] Git のコミットで変更点を確認するには?
-
[解決済み] git のコミットを削除しても、変更は維持できますか?
-
[解決済み】Gitで複数のコミットの著者名やコミッター名、Eメールを変更する方法は?
-
[解決済み] Gitブランチの名前をローカルとリモートで変更できますか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決策 このリポジトリでは、別の git プロセスが実行されているようです。たとえば、「git commit」によって開かれたエディタなどです。
-
Gitで「このリポジトリでは別のgitプロセスが実行されているようです...」と表示される問題
-
git push は最新の解決策を提供します。
-
git push issues
-
[解決済み] JenkinsのGitプラグイン。特定のタグをビルドするには?
-
[解決済み] gitにもsvnのような無視コマンドはありますか?
-
[解決済み] GitHubで2つのブランチの差分を取るには?
-
[解決済み] チェリーピックのコンフリクトを解決するにはどうしたらいいですか?
-
[解決済み] Git のリモート HEAD を master 以外に指定するように変更する
-
[解決済み] 非標準のポートでリモートリポジトリを使用する