私のアプリとその .git リポジトリのローカル コピーを持っている顧客がいます。彼女はそれを使用して、変更を元に戻したり、パッチをテストしたりします。しかし、ファイアウォールやその他のルールが原因で、最新の変更をリモートにプルする簡単な方法はありません。 . そこで、「圧縮された新しい完全な .git リポジトリをダウンロードさせてください」と考えました。しかし、リポジトリは快適に動き回る大きなママなので、増分変更 (オブジェクト、参照など) の圧縮された .git を彼女に送信して、ローカルの .git ディレクトリ内で解凍することをお勧めします。
ファイルのタイムスタンプに基づいて、次のワークフロー (ソフトウェア内から自動化) を試しました。
- 彼女の .git/objects ディレクトリで最新のタイムスタンプを取得する
- そのタイムスタンプで始まるファイルの .git ディレクトリから zip を作成します
- zipファイルをメールで送信
- お客様の .git 内の zip を解凍します (一部のファイルが上書きされても問題ありません)。
git checkout -f master
(または必要なブランチ/タグ)およびgit clean -d -f
彼女の作業ツリーと .git ディレクトリはローカルで変更されることはなく、1 つのブランチからタグなどにチェックアウトされるだけなので、問題なく動作します。しかし、ファイルのタイムスタンプは明らかに信頼できません...つまり、touch
バックアップなどによってすべて取得される可能性があるため、何らかのコミットを使用してこの増分zipを作成するよりエレガントな方法を探しています。
では、顧客のローカル .git からの情報がある場合、.git ディレクトリの増分 zip ファイルをプログラムで作成するにはどうすればよいでしょうか? これは、リモートから段階的にプルするために git が内部的に行うことと非常によく似ていると思います。正しいファイルを選択するアルゴリズムは何ですか? インクリメンタル zip をビルドするために顧客のリポジトリからベースライン コミットを決定するにはどうすればよいですか?