Trac と git は異なるパラダイムで動作します。Git は、コミットを元に戻したり、リビジョンを並べ替えたりすることで、履歴を変更できることを非常に喜んでいます。Trac は、直線的で不変のタイムラインを前提としています (Subversion で使用するために設計されたことを思い出してください)。チケットを閉じるメッセージでコミットすると、チケットは Trac のデータベース内で閉じられます。コミットをリセットすると、Trac は戻って新しい git タイムラインに一致するように独自のタイムラインを更新しません。再同期は骨の折れるプロセスですが (ご存じのとおり)、タイムラインが変更されたことを Trac に伝える唯一の方法です。
この問題を回避する 1 つの方法は、開発作業に使用するリポジトリとは異なるリポジトリを Trac で監視することです。変更をテストして、元に戻す必要がないことを十分に確信できる場合にのみ、Trac のリポジトリに変更をプッシュしてください。これにより、タイムラインは Trac の観点からは線形に保たれますが、git のすべての機能を通常どおり使用することができます。
これは実際には、どのシステムでも解決するのが難しい問題です。チケットのオープン/クローズ コマンド (たとえば) を使用してコミットに影響を与える方法で git リポジトリのタイムラインを変更すると、チケットのチケット番号またはチケット コメントの順序が変更されるリスクがあります。これにより、それらのアイテムへの既存のリンクまたは参照が壊れます。
リポジトリの変更が課題トラッカーと同期されていることを確認する 1 つの方法は、どこでもバグのようなシステムを使用して、バグ リスト/詳細をリポジトリ内に保存することです。このようなツールは通常、Trac ほどフル機能ではありませんが、その分散型の性質は、分散バージョン管理システムにより適している場合があります。