Git は分散バージョン管理システムであるため、「プッシュ日」の意味を慎重に定義する必要があります。たとえば、ユーザー A がいくつかのコミットをユーザー B のリポジトリにプッシュするとします。しばらくして、ユーザー B が同じコミットを 3 番目のリポジトリにプッシュします。気になる日付は?
あなたは共有リポジトリを持っていて、その共有リポジトリのユーザーがいつ何かがリポジトリに公開されたかを判断できるようにしたいと考えています。そうであれば、共有リポジトリでその情報を収集する必要があります。
悪いニュース
残念ながら、コミット メッセージに日付を追加する方法はありません。これにより、コミット ID (コンテンツの SHA1 ハッシュ) が変更され、あらゆる種類の問題が発生します。
良いニュース
幸いなことに、Git にはnotesという (比較的新しい) 機能があります。この機能を使用すると、任意のテキストをコミットに添付してgit log
表示できます。メモは編集して他のユーザーと共有できます。
メモ機能を使用して、共有リポジトリが受信した各コミットに「このコミットは [日付] に受信されました」というメッセージを添付できます。
詳細git help notes
については、を参照してください。
日付の書き方
私がお勧めするアプローチは次のとおりです。
post-receive
共有リポジトリのフックを変更して、更新された参照ごとに新しく到達可能な各コミットを実行します。
コミットごとに、「[repository_url] の [user] が [date] にこのコミットを [ref] に追加しました」などをコミットのメモに追加します。
refs/notes/received-on
デフォルトの の代わりに、この目的専用の notes ref ( など) を使用することもできますrefs/notes/commits
。これにより、他の目的で作成されたメモとの競合を防ぐことができます。
- メモ参照の更新を拒否するようにフックを変更します
receive
(ユーザーが誤ってまたは意図的にメモをいじらないようにするため)。
すべてのユーザーに、作業ツリー内から次のコマンドを実行するように伝えます。
# Fetch all notes from the shared repository.
# Assumes the shared repository remote is named 'origin'.
git config --add remote.origin.fetch '+refs/notes/*:refs/remote-notes/origin/*'
# Show all notes from the shared repository when running 'git log'
git config --add notes.displayRef 'refs/remote-notes/origin/*'
Git はデフォルトでアップストリーム リポジトリの非ブランチ、非タグ参照を無視するため、この手順が必要です。
上記は、参照が高度なだけであり、削除または強制更新されていないことを前提としています。post-receive
これらのケースを処理するために、フックに「[date] に削除されました」というメモも追加することをお勧めします。