1

状況は次のとおりです。ローカル リポジトリに「feature-branch」という名前の git ブランチがあります。
このブランチは git-svn 対応で、ローカル ブランチ 'remotes/svn/branches/feature-branch' を追跡しています。
そして、このブランチは外部リポジトリの SVN ブランチを追跡しています。

これで、どの SVN ブランチが追跡されているかを判断する方法がわかりました。これはgit svn info. ただし、フィーチャー ブランチによって追跡されているローカル リモート ブランチを特定するにはどうすればよいですか? すなわち。「feature-branch」が「remotes/svn/branches/feature-branch」を追跡していると判断するにはどうすればよいですか?

GITの「通常の」追跡ブランチを使用するgit branch -avvと、追跡しているブランチを持つ各ブランチが表示されます。(これもかなり面倒…)

私の最終目標は、SVN リポジトリにまだプッシュされていないコミットを表示できるようにすることです。を実行することで、これを簡単に実行できますgit log $remote..HEAD。しかし、私は何が何で$remoteあるかを知る必要があります...

4

1 に答える 1

1

あなたfeature-branchはgitコミットを追跡しています(SHA1ハッシュで定義されています)。git-svn は SVN サーバーのリモートを作成しないため、SVN ブランチを追跡していません (SVN サーバーとの間のすべてのフェッチ/リベース/タグ/ブランチ/コミット機能は を使用して行われますgit svn ...)。

git -svn ドキュメントによると:

次の規則に注意してください。git svn dcommit

で指定された SVN コミットの上にコミットしようとします

git log --grep=^git-svn-id: --first-parent -1

...だから、SVN追跡ブランチを使用git svn infoまたは決定するのは正しかった。git log --grep=^git-svn-id: --first-parent -1


特定のコミット (SHA1 ハッシュに基づく) を含む他の既知の Git ブランチをすべて見つけるには、git branch --all --contains <commit-hash>(例: git branch --all --contains 856ce-- 部分ハッシュは正常に動作するはずです) を試してください。

現在のブランチの完全なコミット ハッシュを取得するには、 を試してくださいgit rev-parse HEAD。ただし、代わりに最後の SVN コミットの完全なコミット ハッシュが必要になる可能性が高いため、 からの出力の SHA1 ハッシュを使用することをお勧めしますgit log --grep=^git-svn-id: --first-parent -1


HEAD への最後のコミットからログを取得するには、SVN 追跡ブランチを見つけて (方法は既に理解しています)、次の場所にプラグインする必要があります。

git rev-list --date-order --max-count=1 <svn-tracked-branch>
git log <above-returned-hash>..HEAD

ex(gitでは、部分ハッシュはほとんど常に機能します):

$ git rev-list --date-order --max-count=1 trunk
117bbf6390a6cd62b47e9335be6a6d93c99d88e7
$ git log 117bbf..HEAD
commit f071e1781a98c33c2b36c21aedce4a9ab2311d47
Author: Me <me@myemail.com>
Date:   Fri Aug 30 15:19:27 2013 -0700

    test

git log --grep=^git-svn-id: --first-parent -1コマンドを実行する余分な手順を実行するのではなく、SHA1 ハッシュを使用すると、おそらくより有用な情報が得られますgit rev-list --date-order --max-count=1 <svn-branch>

于 2013-08-30T22:10:00.627 に答える