2013-01-16 38 views
1

好的情况如下: 我在我的本地存储库中有一个名为'feature-branch'的git分支。
这个分支是git-svn启用的,它跟踪本地分支的'remotes/svn/branches/feature-branch'。
此分支正在跟踪外部存储库中的SVN分支。如何确定LOCAL追踪分支?

现在我知道如何确定跟踪哪个SVN分支,这可以使用git svn info完成。 但是,如何确定哪个LOCAL远程分支由我的功能分支进行跟踪? 也就是说。我如何确定'功能分支'是跟踪'遥控/ svn /分支/功能分支'?

通过GIT中的'正常'跟踪分支,我可以做git branch -avv,它会为每个分支显示它正在跟踪的分支。 (这也很麻烦......)

我的最终目标是能够显示尚未推送到SVN存储库的提交。我可以通过运行git log $remote..HEAD轻松完成此操作。 但后来我需要知道什么$remote是...

回答

1

您的feature-branch正在跟踪一个git提交(由SHA1散列定义)。它没有跟踪SVN分支,因为git-svn没有为SVN服务器创建一个远程(所有从SVN服务器获取/分配/标记/分支/提交功能都使用git svn ...完成)。

git-svn documentation

注意以下规则:git svn dcommit

将尝试提交的SVN的顶部

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

提交命名

...所以您在使用git svn infogit log --grep=^git-svn-id: --first-parent -1来确定SVN跟踪分支时是正确的。


要找出所有包含一定承诺(基于SHA1哈希)尝试git branch --all --contains <commit-hash>其他已知的Git分支的(例如:git branch --all --contains 856ce - 部分哈希值应该可以正常工作)。

要获得当前分支的完整提交哈希,请尝试git rev-parse HEAD。但是,您可能需要最后一次SVN提交的完整提交哈希,因此您将需要使用来自git log --grep=^git-svn-id: --first-parent -1的输出的SHA1哈希。


为了得到最后的日志提交到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 <[email protected]> 
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>命令。