Subgit を使用して Subversion リポジトリにアクセスしています。これはうまく機能しますが、特に通常の Subversion クライアントを使用してリポジトリにアクセスするユーザーと通信する場合、特定の変更セットがどの SVN リビジョンに対応するかを知りたいと思うことがあります。
git
SVN リビジョン番号をローカル リポジトリのどこかで検索できますか?
はい、簡単にできます。.git/config
クローンされた Git リポジトリのファイルを変更して追加するだけです。
[remote "origin"]
...
fetch = +refs/svn/map:refs/notes/commits
SubGit bookgit fetch
の「推奨されるクライアント側 Git 構成」セクションで説明されているように、オプションを選択してから実行します。その後、複製されたリポジトリでコマンドを実行すると、リビジョン番号が表示されます。git log
サーバー側でそれを行いたい場合 (およびプロジェクトで他の目的に Git ノートを使用しない場合) は、サーバー マシンで実行できます。
$ git update-ref refs/notes/commits refs/svn/map
1 回限りの Git ノート作成用、またはそのリポジトリで実行できます
$ cd refs
$ mkdir notes
$ echo "refs: refs/svn/map" > notes/commits
refs/notes/commits が SubGit によって更新され、最新のリビジョン <-> SHA-1 マッピングを格納する refs/svn/map に従うようにします。その後git log
、サーバーにはリビジョン番号も表示されます。
スクリプトでリビジョンを SHA-1 ハッシュに変換する場合 (上記の方法で Git ノートを設定した後)、このコマンドを使用できます。
$ git log --format="%H %N" --all
行解析関数と組み合わせて。たとえば、まれなケース (例: "r$REV branch" という名前のブランチ名) をあまり気にしない場合、SHA-1 と変更されたブランチ名をリビジョン REV で取得するには、実行できます
$ git log --format="%H %N" --all | grep "r$REV "
同様に、ここで SHA-1 またはブランチ名を grep できます。