You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

批量修改所有本地Git仓库远程URL的方法求助

批量更新本地Git仓库远程URL(HTTP转HTTPS)

必须有高效的批量解决方案啊!手动改60个仓库确实太折磨人,下面分享两种靠谱的方法,分分钟搞定:

方法一:Shell脚本(适用于Linux/macOS/WSL/Git Bash)

这种方法适合类Unix环境或者Windows下用Git Bash/WSL的朋友:

  • 先把所有本地仓库集中放到同一个父目录下,比如~/all-git-repos/,方便脚本统一遍历
  • 创建一个名为update-remote-url.sh的脚本文件,复制下面的内容进去:
#!/bin/bash

# 替换成你的Stash服务器旧HTTP前缀和新HTTPS前缀
OLD_HTTP="http://your-stash-server.com"
NEW_HTTPS="https://your-stash-server.com"

# 遍历父目录下的所有Git仓库
for repo in */.git; do
    repo_folder=$(dirname "$repo")
    echo "正在处理仓库: $repo_folder"
    cd "$repo_folder" || continue
    
    # 获取当前origin的远程URL
    current_url=$(git config --get remote.origin.url)
    
    # 替换HTTP为HTTPS
    updated_url=${current_url//$OLD_HTTP/$NEW_HTTPS}
    
    # 更新远程URL
    git config remote.origin.url "$updated_url"
    
    # 输出更新后的结果确认
    echo "更新完成,新URL: $(git config --get remote.origin.url)"
    cd ..
done
  • 给脚本添加执行权限:chmod +x update-remote-url.sh
  • 切换到存放所有仓库的父目录,运行脚本:./update-remote-url.sh

方法二:PowerShell脚本(适用于Windows)

如果是Windows用户,用PowerShell脚本更顺手:

  • 同样先把所有仓库放到同一个父文件夹,比如D:\GitRepos\
  • 创建Update-GitRemote.ps1脚本文件,内容如下:
# 替换成你的Stash服务器旧HTTP前缀和新HTTPS前缀
$oldPrefix = "http://your-stash-server.com"
$newPrefix = "https://your-stash-server.com"

# 遍历当前目录下的所有Git仓库
Get-ChildItem -Directory | ForEach-Object {
    $gitDir = Join-Path $_.FullName ".git"
    if (Test-Path $gitDir) {
        Write-Host "正在处理仓库: $($_.Name)"
        Set-Location $_.FullName
        
        # 获取当前远程URL
        $currentUrl = git config --get remote.origin.url
        
        # 替换前缀(用正则转义避免特殊字符问题)
        $updatedUrl = $currentUrl -replace [regex]::Escape($oldPrefix), $newPrefix
        
        # 更新远程URL
        git config remote.origin.url $updatedUrl
        
        # 确认更新结果
        Write-Host "更新完成,新URL: $(git config --get remote.origin.url)"
        Set-Location ..
    }
}
  • 打开PowerShell,切换到仓库父目录,运行脚本:.\Update-GitRemote.ps1

关键注意事项

  • 先拿1-2个仓库测试脚本,确保替换的前缀和逻辑正确,避免批量出错
  • 如果你的远程仓库名称不是origin(比如用了upstream),需要把脚本里的remote.origin改成对应的远程名称
  • 脚本会自动跳过非Git仓库的文件夹,因为只检测.git目录的存在

内容的提问来源于stack exchange,提问作者EJo

火山引擎 最新活动