CVS から Git への移行: $Id$ と同等ですか? 質問する

CVS から Git への移行: $Id$ と同等ですか? 質問する

シンプルなソース コード管理ツールに関する質問をたくさん読んでみたところ、Git が妥当な選択のように思えました。Git を稼働させていて、今のところうまく機能しています。CVS で気に入っている点の 1 つは、バージョン番号が自動的に増加することです。

分散リポジトリではこれがあまり意味をなさないことは理解していますが、開発者としてはこのようなものが欲しい/必要です。その理由を説明しましょう。

私は Emacs を使用しています。定期的に、サードパーティ パッケージの Lisp ソース ファイルの新しいバージョンを調べています。たとえば、foo.el というファイルがあり、ヘッダーによるとバージョンは 1.3 です。最新バージョンを調べて、1.143 や 2.6 などだとわかれば、かなり遅れていることがわかります。

代わりに 40 文字のハッシュがいくつか表示された場合、どれが新しいのか、またどれくらい新しいのかもわかりません。自分がどれだけ古いのかを知るために ChangeLogs を手動で確認しなければならないとしたら、それは絶対に嫌です。

開発者として、私は自分の成果物を使用する人々に対して、この礼儀を尽くしたいと思っています (おそらく、誰かがそうしていると思っているかもしれませんが、それはしばらく置いておきます)。毎回自分で数字やタイムスタンプなどを増やすことを覚えておきたくはありません。それは本当に面倒なことで、私は経験からそれを知っています。

では、どのような代替手段があるのでしょうか? $Id:$ に相当するものを取得できない場合、他にどのような方法で探しているものを提供できますか?

エンド ユーザーに Git がインストールされていないこと、またインストールされていたとしてもローカル リポジトリがない (実際、そのように利用できるようにはしないつもりです) ことが私の予想であることを述べておきます。

ベストアンサー1

SHA は、バージョンを表す 1 つの表現にすぎません (ただし、正規表現です)。git describeコマンドは他の表現も提供しており、非常にうまく機能します。

例えば、git describe私のマスターブランチでJava memcached クライアントソースから、次のことがわかります:

2.2-16-gc0cd61a

それは2つの重要なことを示しています:

  1. このツリーには2.2以降、ちょうど16回のコミットがありました。
  2. ちょうどソースツリーは他の誰かのクローン上に表示できます。

たとえば、その番号を表示するために、ソースを含むファイルをパッケージ化した(または配布用にすべてのコンテンツを書き換えた)とします。パッケージ化されたバージョンは(リリースではなく、有効なバージョン)versionであるとします。2.2-12-g6c4ae7a

自分がどれだけ遅れているか(4コミット)を正確に確認できるようになりました。そして正確にどの 4 つのコミットか確認できます。

# The RHS of the .. can be origin/master or empty, or whatever you want.
% git log --pretty=format:"%h %an %s" 2.2-12-g6c4ae7a..2.2-16-gc0cd61a
c0cd61a Dustin Sallings More tries to get a timeout.
8c489ff Dustin Sallings Made the timeout test run on every protocol on every bui
fb326d5 Dustin Sallings Added a test for bug 35.
fba04e9 Valeri Felberg Support passing an expiration date into CAS operations.

おすすめ記事