2013-01-16 72 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>命令。