iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 22
0
自我挑戰組

30 天的 ShellScript 教室解決開發者的困擾系列 第 22

[鐵人賽第22天] 實戰:清理 git repo 遠端分支

今天繼續做東西吧

本來 cargo 只有我們公司要弄,所以我們也沒什麼限制的狂開分支(看看那精美的分之數量),但是有一天,忽然有人覺得 github 上面的分支太多,有點亂,怎辦?

417 個分支耶,我才不要手動砍!

以下開始用最懶惰的方法,一口氣清空所有分支只留 develope 跟 master。

首先我們知道如果要刪除一個遠端分支,要打下面的指令:

git push origin :$BRANCH

除此之外,我們可以打這個指令列出所有分支:

git branch -a

不過要直接把 git branch -a 的結果塞進去 for 迴圈嗎?這不太妙,畢竟這樣的話連 master 跟 develope 分支也會被刪掉。

所以這裡,我們用比較省事的方法:先產生清單,然後編輯清單。

git branch -a > branch.txt

接著打開慣用的文字編輯器,把沒有要刪掉的分支從清單內拿掉,並且把前面的 remotes/cargo-demo/ 拿掉( sed 不熟就用文字編輯器的搜尋取代) ,讓 branch.txt 變成這樣:

  add/ScentTable
  add/tracer
  admin
  auth
  (下略)

接著,稍微試試看 for 迴圈正常不正常吧:

for branch in `cat branch.txt`; do
    echo remote $branch will delete
done

為了避免指令錯誤,我們把指令前面加個 echo 試試看:

for branch in `cat branch.txt`; do
    echo git push origin :$branch
done

接著隨便複製一條,試試看能不能跑:

git push origin :vue-useage

如果你發現要輸入帳號密碼,嗯……輸入 400 次帳號密碼?!算了吧,這裡有兩種解法:

  1. 改用 ssh 認證
  2. 修改 https 連結加入驗證資訊

加入驗證資訊其實也不難,就是標準的 http auth 而已,像是原本的:

https://github.com/dd-han/cargocms

假如我的帳號是 dd-han ,密碼是 myPass1001 ,那就改成這樣:

https://dd-han:myPass1001@github.com/dd-han/cargocms

如果帳號是 E-Mail 呢?兩個 @ 號並不會正常運作,用 \ 跳脫也不行。那很簡單啊,用 URL 的編碼方式跳脫就好啦,在 URL 的編碼方式裡面, @ 會被跳脫成 %40 ,所以假如帳號是 han@dd-han ,那就這樣改:

https://han%40dd-han.tw:myPass1001@github.com/dd-han/cargocms

到這裡我們解決了要打一對帳號密碼的問題,那就把 echo 拿掉,真的執行這個 for 迴圈吧:

for branch in `cat branch.txt`; do
    git push origin :$branch
done

跑玩之後,記得把 branch.txt 刪掉,因為可能會需要一點時間執行,所以這時候當然不要等他啊,繼續寫其他 Code 啊!


我是誰?
我是 dd-han ,可以叫我呆翰,是國立臺中科技大學的延畢生 與 創科資訊的時習生。


上一篇
[鐵人賽第21天] 實戰:快速建立開發環境
下一篇
[鐵人賽原訂第23天] Shell 的多執行緒
系列文
30 天的 ShellScript 教室解決開發者的困擾23

尚未有邦友留言

立即登入留言