如何将C:\code下所有本地Git仓库迁移至另一台设备?
解决方案:批量清理Git仓库以简化迁移
针对你的场景,我们可以通过批量清理每个Git仓库的冗余数据、本地分支和未跟踪文件来大幅减少文件数量和体积,同时保留目录结构。以下是可直接运行的脚本和操作说明:
核心清理逻辑(单仓库)
每个Git仓库需要执行三类操作来瘦身:
- 仅保留当前检出的本地分支,删除其余冗余分支
- 清理Git数据库中的未引用对象,压缩存储体积
- 删除工作区的未跟踪文件、临时产物和.gitignore忽略的文件
Windows PowerShell 批量脚本
将以下代码保存为Clean-GitRepos.ps1,放在C:\code目录下运行:
# 遍历C:\code下所有Git仓库的根目录(通过查找.git子目录定位) Get-ChildItem -Path "C:\code" -Name ".git" -Recurse -Directory | ForEach-Object { $repoPath = $_.FullName | Split-Path -Parent Write-Host "=== 正在清理仓库: $repoPath ===" # 切换到当前仓库目录 Set-Location -Path $repoPath # 1. 获取当前分支,仅保留该分支 $currentBranch = git rev-parse --abbrev-ref HEAD Write-Host "当前保留分支: $currentBranch" # 删除所有非当前本地分支 git branch | ForEach-Object { $branch = $_.Trim() if ($branch -ne $currentBranch -and $branch -notmatch "\*") { Write-Host "删除本地分支: $branch" git branch -D $branch } } # 2. 彻底清理Git数据库,移除所有未被引用的历史对象 git gc --prune=all --aggressive # 3. 删除工作区未跟踪文件、目录及忽略的构建产物 git clean -fdx Write-Host "=== 仓库 $repoPath 清理完成 ===" Write-Host "" } Write-Host "所有仓库清理完成!"
操作注意事项
- 前置确认:确保所有仓库的远程地址有效且可访问,清理后本地仅保留当前分支,其余分支需从远程拉取。
- 脚本权限:右键以管理员身份运行PowerShell,首次运行需执行
Set-ExecutionPolicy RemoteSigned允许本地脚本执行。 - 效果预期:
- 每个仓库的文件数量会大幅减少(移除临时文件、冗余分支的本地数据)
.git目录体积会被压缩,减少存储占用
迁移后恢复操作
将清理后的C:\code复制到新电脑后,进入每个仓库目录执行以下命令同步远程最新内容:
git pull
若需要其他分支,直接从远程拉取即可:
git checkout -b 目标分支名 origin/目标分支名
内容的提问来源于stack exchange,提问作者Matt Frear
相关产品推荐
相关产品推荐

