9

特定の時点で git リポジトリに存在していたバージョンを確認するにはどうすればよいですか?

複数のユーザーが変更をプッシュできる共有リポジトリがあり、過去のある日の 12:00 にスナップショットをフリーズしたいとします。

誰かが 11:30 にローカル コミットを行い、12:30 にのみ中央リポジトリにプッシュした場合、後でそれを検出できますか?

誰かが 12:00 以降に行動して、記録されたコミット日が 11:30 になるようにローカル コミットを改ざんし、それをアップストリームにプッシュしたかどうかを検出できますか?

4

3 に答える 3

10

Git 自体はこの情報を追跡しませんが、サーバー自体の git リポジトリの「objects」ディレクトリにあるコミット オブジェクト ファイルのファイル作成タイムスタンプを確認できました。

于 2012-06-14T10:20:46.987 に答える
2

フック、おそらくpost-receive フックを使用して必要な情報を自分のどこかに保存するか、単に reflog を有効にすることができます (ベア リポジトリではデフォルトで無効になっています)。reflog は、ブランチのローカル履歴を自動的に追跡します。git reflog -1 --format=%H master@{12:00}12:00 にマスター ref が指していたコミットを教えてくれます。

reflog は期限切れになることに注意してください。有効期限はgc.reflogexpireで構成できます。

于 2012-06-13T13:29:14.853 に答える
1

git物事がリポジトリにプッシュされた(またはフェッチされた)ときにログに記録せず、コミット自体の2つのタイムスタンプのみを記録するため、追加のメタデータをどこかに保存するフックを作成せずにこれを行う信頼できる方法はないと思いますプッシュ/フェッチに使用される方法に応じて、git-daemon、ssh、または http サーバーによって行われるログに依存します。

于 2012-06-13T13:59:47.660 に答える