1

好的,情况如下:我的本地存储库中有一个名为“功能分支”的 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是...

4

1 回答 1

1

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

根据git-svn 文档

请注意以下规则: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 分支,请尝试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.


要从上次提交到 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

如果您使用 SHA1 哈希git log --grep=^git-svn-id: --first-parent -1而不是采取额外的运行git rev-list --date-order --max-count=1 <svn-branch>命令的步骤,您可能会获得更多有用的信息。

于 2013-08-30T22:10:00.627 回答