Gitは分散バージョン管理システムであるため、「プッシュ日付」によって何を意味するかを慎重に定義する必要があります。たとえば、ユーザーAがいくつかのコミットをユーザーBのリポジトリにプッシュするとします。しばらくして、ユーザーBは同じコミットを3番目のリポジトリにプッシュします。どの日付に興味がありますか?
共有リポジトリがあり、その共有リポジトリのユーザーが何かがリポジトリにいつ公開されたかを判断できるようにしたいと思っています。それが本当の場合は、共有リポジトリでその情報を収集する必要があります。
悪い知らせ
残念ながら、コミットメッセージに日付を追加する方法はありません。これにより、コミットID(コンテンツのSHA1ハッシュ)が変更され、あらゆる種類の問題が発生します。
良いニュース
幸い、Gitには(比較的新しい)notesという機能があります。この機能を使用すると、git log
表示可能なコミットに任意のテキストを添付できます。メモは編集して他のユーザーと共有できます。
メモ機能を使用して、「このコミットは[日付]に受信されました」というメッセージを、共有リポジトリによって受信された各コミットに添付できます。
詳細git help notes
については、を参照してください。
日付を記録する方法
ここに私がお勧めするアプローチがあります:
post-receive
共有リポジトリのフックを変更して、更新された参照ごとに新しく到達可能な各コミットをウォークします。
コミットごとに、「[user] of [repository_url] added to this commit to [ref] on [date]」のようなものをコミットのメモに追加します。
refs/notes/received-on
デフォルトではなく、この目的に特化したノート参照(など)を使用することもできます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
これらのケースを処理するために、フックに「[日付]に削除された」というメモを追加することもできます。
git reflog --date=local origin/master
(注origin/
)ことを追加したいと思います。それ以外の場合は、コミット、チェックアウト、プルのみがリストに含まれていました(これも便利です)。実際、@ JonathanDayの回答で指摘されました。