我有一个文件夹,其中充满了旧的git存储库,位于任意文件夹深度。其中许多回购协议是在我使用不再存在的旧git主机时创建的。我需要找到所有引用该旧远程服务器的本地存储库,并将其从我的本地存储库中删除。
答案 0 :(得分:0)
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中的转义序列很奇怪...
这是如何工作的:
find
当前目录中的所有git repos(查找.git
文件夹)
-prune
阻止find
递归到找到的.git
目录中,从而提高了性能git ... remote -v
grep
代表bad.domain
。cut
直到远程名称uniq
过滤重复的远程名称xargs
为找到的每个遥控器运行git remote rm
-r
表示如果在该存储库上未发现任何不良的远程操作,请不要运行git remote rm
-L 1
意味着对存储库中的每个不良远程运行一次git remote rm