我想使用德威從Python腳本執行以下命令:使用Python dulwich檢查哪些分支包含特定的git commit sha?
$ git branch --contains <myCommitSha> | wc -l
我打算是檢查如果一個特定的提交(SHA)被放置在一個以上的分支機構。
當然,我認爲我可以從Python執行上述命令並解析輸出(解析分支數量),但這是最後的解決方案。
任何其他意見/建議?提前致謝。
我想使用德威從Python腳本執行以下命令:使用Python dulwich檢查哪些分支包含特定的git commit sha?
$ git branch --contains <myCommitSha> | wc -l
我打算是檢查如果一個特定的提交(SHA)被放置在一個以上的分支機構。
當然,我認爲我可以從Python執行上述命令並解析輸出(解析分支數量),但這是最後的解決方案。
任何其他意見/建議?提前致謝。
沒有內置函數這一點,但你當然可以自己實現這一點。
你也可以這樣做(未經測試):
branches = [ref for ref in repo.refs.keys("refs/heads/") if
any((True for commit in repo.get_walker(include=[repo.refs[ref]])
if commit.id == YOURSHA))]
這會給你包含給定提交的所有分支負責人的名單,但將有Ø運行時(N * m),n beeing您的回購承諾金額,m beeing金額分行。 git實現的運行時間可能是O(n)。
感謝您的提示,您的回答給了我我正在尋找的東西。 – Blaise
由於分支只是指向隨機提交的指針,並且它們不以任何方式「描述」樹,所以沒有任何鏈接某個隨機提交到分支。
如果一個給定的提交是一個提交的祖先,那麼一些分支點將從分支頂部提交下來遍歷所有祖先鏈,這是唯一明智的方法。
換句話說,在德威我會遍歷分支和向後遍歷,看看是否在鏈上。
我確定這正是git branch --contains <myCommitSha>
所做的,因爲我不知道有任何其他捷徑。
因爲你的選擇(一)使Python這樣的迭代或(b)使C做相同的迭代,我只是去與C :)
執行命令是要走的路 - 這就是你如何使用git。 – Chronial
感謝@ddotsenko,@Chronial,只是想確保dulwich在Python代碼中提供'git branch --contains'輸出(我真的想避免執行外部進程)嗎? – Blaise