亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用bash腳本遍歷所有git分支

如何使用bash腳本遍歷所有git分支

Git
至尊寶的傳說 2019-10-16 13:15:17
如何使用bash腳本遍歷存儲庫中的所有本地分支。我需要進行迭代,并檢查分支和某些遠程分支之間是否有任何區別。防爆for branch in $(git branch); do    git log --oneline $branch ^remotes/origin/master;done我需要做上面給出的事情,但是我面臨的問題是$(git branch)給了我存儲庫文件夾中的文件夾以及存儲庫中存在的分支。這是解決此問題的正確方法嗎?還是有其他方法可以做到?謝謝
查看完整描述

3 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

編寫腳本時,不應使用git branch。Git提供了一個“管道”接口,該接口專門用于腳本編寫(普通Git命令的許多當前和歷史實現(添加,簽出,合并等)都使用同一接口)。


您想要的管道命令是git for-each-ref:


git for-each-ref --shell \

  --format='git log --oneline %(refname) ^origin/master' \

  refs/heads/

注意:您不需要remotes/遠程引用上的前綴,除非您有其他引用導致origin/master與引用名稱搜索路徑中的多個位置匹配(請參閱git-rev-parse的 “ 指定修訂”部分中的 “符號引用名稱...”)。(1))。如果您試圖明確避免歧義,請使用完整的ref名稱:refs/remotes/origin/master。


您將獲得如下輸出:


git log --oneline 'refs/heads/master' ^origin/master

git log --oneline 'refs/heads/other' ^origin/master

git log --oneline 'refs/heads/pu' ^origin/master

您可以將此輸出通過管道傳遞到sh。


如果您不喜歡生成shell代碼的想法,則可以放棄一些健壯性*,然后執行以下操作:


for branch in $(git for-each-ref --format='%(refname)' refs/heads/); do

    git log --oneline "$branch" ^origin/master

done

*引用名稱應該是安全的,不要使用shell的單詞拆分(請參閱git-check-ref-format(1))。我個人會堅持使用以前的版本(生成的shell代碼);我更有信心,不會發生任何不當行為。


由于您指定了bash并且它支持數組,因此您可以保持安全性并且仍然避免生成循環的膽量:


branches=()

eval "$(git for-each-ref --shell --format='branches+=(%(refname))' refs/heads/)"

for branch in "${branches[@]}"; do

    # …

done

$@如果不使用支持數組的外殼(set --初始化和set -- "$@" %(refname)添加元素),則可以執行類似的操作。


查看完整回答
反對 回復 2019-10-16
  • 3 回答
  • 0 關注
  • 1468 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號