如何确定LOCAL跟踪分支?

时间:2013-01-16 14:01:32

标签: git svn git-svn

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

现在我知道如何确定跟踪哪个SVN分支,可以使用git svn info来完成。 但是,如何确定功能分支跟踪哪个LOCAL远程分支? IE浏览器。我怎样才能确定'feature-branch'是跟踪'remotes / svn / branches / feature-branch'?

使用GIT中的“普通”跟踪分支,我可以git branch -avv,它将显示每个分支,它正在跟踪分支。 (这也很麻烦......)

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

1 个答案:

答案 0 :(得分:1)

您的feature-branch正在跟踪git提交(由SHA1哈希定义)。它不跟踪SVN分支,因为git-svn没有为SVN服务器创建远程(所有到/从SVN服务器的fetch / rebase / tag / branch / commit函数都是使用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跟踪分支是正确的。


要查找包含特定提交的所有其他已知Git分支(基于SHA1哈希),请尝试git branch --all --contains <commit-hash>(例如: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 <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>命令的额外步骤,您可能会获得更多有用的信息。