私は(git svnを介して)Subversionのフロントエンドとしてgitを使用しています。
したがって、すべてのsvnトランク/ブランチについて、gitに「remotes/xxx」というリモートブランチがあります。たとえば、「remotes/trunk」、「remotes/coolfeature」。
ここで、dcommitに使用するために、すべてのリモートブランチに1つの「デフォルト」ローカルブランチが必要です。問題は、「trunk」、「coolfeature」などのSubversionブランチにちなんでこのようなブランチに名前を付けたいことです。そのため、gitには次のブランチがあります。
trunk
coolfeature
remotes/trunk
remotes/coolfeature
問題は、「trunk」または「coolfeature」を参照するたびに、gitがブランチ名があいまいであると文句を言うことです。大したことではありませんが、私は不快に感じます。
問題は、ブランチの名前を変更するだけでは自分がやりたいことではないと仮定して、その警告にどう対処できるかです。そのような場合のベストプラクティスは何ですか?
--prefix=svn/
フラグをgit svn clone
コマンドに渡すと、すべてのSubversionブランチはremotes/svn/branchname
のような名前になります。これが許容できる場合は、「refname is ambiguous」という警告が修正されます。また、たとえば、ローカルトラッキングブランチを作成する場合、次のようなリモートsvnブランチを参照するための素晴らしい方法を提供します。
$ git checkout -b branchname svn/branchname
ローカルブランチの名前はリモートsvnブランチと同じで、あいまいなrefnameの問題はありません。
警告を取り除きたい場合は、core.warnAmbiguousRefs
をfalse
に設定します。
git config --global core.warnambiguousrefs false
単一のリポジトリのみにこの動作が必要な場合は、--global
フラグを省略します。
タグとして別の「トランク」と「coolfeature」を持っている可能性があります。この場合、ブランチまたはタグのどちらを参照しているかはgitにはわかりません。タグの名前を変更し、gitが「あいまいな」名前を報告していないかどうかを確認します
競合メッセージを回避するには、ローカルブランチを参照するときに、プレフィックスにheads/
を付けます
たとえば、競合するブランチtopic
$ git diff topic remotes/topic
warning: reframe 'topic' is ambiguous.
...
なる
$ git diff heads/topic remotes/topic
...