好的情况如下: 我在我的本地存储库中有一个名为“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
是什么......
答案 0 :(得分:1)
您的feature-branch
正在跟踪git提交(由SHA1哈希定义)。它不跟踪SVN分支,因为git-svn没有为SVN服务器创建远程(所有到/从SVN服务器的fetch / rebase / tag / branch / commit函数都是使用git svn ...
完成的)。
请注意以下规则:
git svn dcommit
将尝试在
中指定的SVN提交之上提交<强>
git log --grep=^git-svn-id: --first-parent -1
强>
...所以您使用git svn info
或git 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>
命令的额外步骤,您可能会获得更多有用的信息。