在 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 终端有 grep
和 sed
以及 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
我们的团队将 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 终端有 grep
和 sed
以及 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