簡體   English   中英

如何從目錄中的所有存儲庫中遞歸刪除損壞的git remote?

[英]How to recursively remove a broken git remote from all repos in a directory?

我有一個文件夾,其中充滿了舊的git存儲庫,位於任意文件夾深度。 其中許多回購協議是在我使用不再存在的舊git主機時創建的。 我需要找到所有引用該舊遠程服務器的本地存儲庫,並將其從我的本地存儲庫中刪除。

Linux的:

find . -name .git -type d -prune -exec sh -c 'git --git-dir "{}" remote -v | grep bad.domain | cut -f1 | uniq | xargs -r -n 1 git --git-dir "{}" remote rm' \;

Windows PowerShell:

find . -name .git -type d -prune -exec sh -c 'git --git-dir ''{}'' remote -v | grep bad.domain | cut -f1 | uniq | xargs -r -n 1 git --git-dir ''{}'' remote rm' ";"

Windows中的轉義序列很奇怪...


工作原理:

  1. 在當前目錄中find所有git倉庫(查找.git文件夾)
    • -prune阻止find遞歸到找到的.git目錄中,從而提高了性能
  2. 對於找到的每個存儲庫,提取遠程git ... remote -v
  3. grepbad.domain
  4. cut為遠程名稱
  5. 使用uniq過濾重復的遠程名稱
  6. 使用xargs為找到的每個遠程運行git remote rm
    • -r表示如果在該存儲庫上未找到不良的遠程,則不要運行git remote rm
    • -L 1意味着對存儲庫中的每個不良遠程運行一次git remote rm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM