在 Windows 上将所有 Git 分支名称重命名为小写(GitHub 远程)

Rename all Git branch names to lowercase on Windows (GitHub remote)

我们的团队将 Git 用于 Windows 和 Git 扩展,并将 GitHub 作为远程存储库。人们创建了大小写不一致的 b运行ches,当两个人对同一个 b运行ch 使用不同的名称(仅大小写不同)时,这会导致一些问题。

我们希望对所有 b运行ch 名称使用小写进行标准化以避免此问题,但我们如何将所有现有 b运行ch 名称转换为小写?有很多 b运行ches,本地的和远程的,有些有未完成的拉取请求。我只真正关心 "active" b运行ches,即人们会再次推动的那些。

我尝试了 https://gist.github.com/lttlrck/9628955 中列出的步骤,但 运行 遇到了一些问题。首先,我无法在 Windows 中将 "BranchName" 直接重命名为 "branchname",但是可以,这可以通过临时名称解决。

更严重的问题是我们在 b运行 中有 "folder names",例如"Test/RenameTest"。当我将本地 b运行ch 重命名为 "test/renametest" 时,它似乎可以工作,但随后推送失败并显示 fatal: test/renametest cannot be resolved to branch. 我认为这是因为我还有其他 b运行ches 命名"Test/Whatever",所以 "folder name" 仍然是 "Test",而不是 "test"。必须手动重命名在每台机器上检出的每个 b运行ch 是一个令人生畏的前景。我希望有更好的解决方案。

您可以一步创建基于另一个远程分支的远程分支:

git push origin origin/PATH/TO/MY_BRANCH:refs/heads/path/to/my_branch

注意语法:

git push [remote] [REF]:refs/heads/[BRANCH]

并且由于 origin/PATH/TO/MY_BRANCH 是一个有效的引用,它可以用于 git push 命令。

然后删除错误命名的远程分支,像这样:

git push --delete origin PATH/TO/MY_BRANCH

如果您的 Windows Git Bash 终端有 grepsed 以及 cut 命令可用,您可以在一次。从这样的事情开始,一旦它看起来不错,将其输出通过管道传输到它自己的 shell 脚本(例如,sh script_below.sh > my_big_git_rename.sh),然后 运行 that!

#!/bin/sh
git branch --remotes   | # list all remote branches
grep '[A-Z]'           | # only list branches with upper-case in their name
cut -b 10-             | # cut first 10 chars (assumes remote named 'origin')

# build "git push" command:
sed 's/\(^.*$\)/git push origin origin\/:refs\/heads\//' | 

sed 's/:\(.*\)/:\L/'   # lower-case the branch name