git-svnとgit reposの違いをプログラムで教えてください
-
03-07-2019 - |
質問
CWDに含まれるVCリポジトリの種類に応じてエイリアスを動的に定義するシェルをセットアップしました。たとえば、「d」は「svn diff」または「git diff」を実行します。 (このブログ投稿に基づく、誰かが興味を持っている場合...)
Gitリポジトリとgit-svnリポジトリのどちらにいるかに応じて、いくつかのエイリアスを別々に定義したいと思います。 2つの違いを簡単に伝える方法はありますか?
解決
どのリポジトリがgit-svnリポジトリであるかを正確に決定する際には、少し注意が必要です。リポジトリには複数のsvnリポジトリが含まれる場合があります。
Kafkaのソリューションは、svnリポジトリが-sまたは--std-layoutオプションを使用してクローン化された場合にのみ機能します。実際にはブランチ trunk
があります。
Codelogicの答えは、 svn
と呼ばれるsvnリポジトリがある場合にのみ機能します-それが真実であるという要件はありません。
構成内にsvn-remoteがあるかどうかを確認する最も簡単な方法は、次のとおりです。
$ git config --get-regexp ^svn-remote
これは、構成されたgit-svnリポジトリを、それらが呼び出されたものに関係なく見つけます。一致する場合はステータス0で終了し、一致しない場合は1で終了します。
しかし、これはsvnリポジトリが実際に使用されるという意味ではありません。また、誰かがsvnリポジトリをインポートしたが、サブモジュールとして、またはサブツリーのマージとして、またはまったく使用しないこともあります。 git-svnリポジトリのメタデータが有効になっている場合、次のようなものを使用して、現在のHEADでsvnリビジョンが使用されているかどうかを確認できます。
$ git rev-list -1 --grep='git-svn-id' HEAD
しかし、それはおそらく少し複雑すぎます。あなたが決めます。
他のヒント
git config
コマンドの出力を使用して、gitとgit-svnリポジトリを区別できます。
git config --get svn-remote.svn.url
同期されているsvn URLがあれば、それを返します。
trunkというブランチと、trunk @ [REV]というブランチもあります。 ただし、codelogicsのアプローチは簡単でわかりやすいと思います。