1. ホーム
  2. git

[解決済み] CVS から Git への移行: $Id$ 相当?

2022-07-16 08:10:17

質問

シンプルなソースコード管理ツールについて尋ねる多くの質問を読み、Git が妥当な選択であるように思えました。私はそれを立ち上げて実行し、今のところうまくいっています。私が CVS について気に入っている 1 つの側面は、バージョン番号の自動的な増加です。

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

私は Emacs を使用しています。定期的に、私はサードパーティ製パッケージの Lisp ソース ファイルの新しいバージョンを調べます。例えば、foo.el というファイルがあって、ヘッダーによるとバージョンは 1.3 です。

代わりに 40 文字のハッシュがいくつか表示された場合、どちらが後なのかわかりませんし、どのくらい後なのか見当もつきません。自分がどのくらい古いかを知るために、ChangeLog を手動でチェックしなければならないとしたら、それは絶対に嫌です。

開発者として、私は、私の出力を使用する人々 (そして、誰もがそうであるというのは冗談かもしれませんが、それは少し置いておきましょう) に対して、私が考えるこの礼儀を拡張したいのです。毎回、自分で数字をインクリメントしたり、タイムスタンプやそのようなものを覚えたりする必要はありません。それは本当に面倒なことで、私は経験からそれを知っています。

では、どのような選択肢があるのでしょうか?もし$Id:$に相当するものを得ることができないなら、他にどのようにして私が探しているものを提供することができるでしょうか?

私の予想では、エンドユーザーはGitをインストールしておらず、たとえインストールしていたとしても、ローカルリポジトリを持っていないでしょう(実際、そのように利用できるようにすることはないでしょう)と述べておくべきでしょう。

どのように解決するのですか?

SHAは(正規のものではありますが)バージョンの1つの表現に過ぎません。その git describe コマンドは他のものを提供し、非常にうまくそれを行います。

例えば、私が git describe を私の master ブランチで実行すると 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.