【问题标题】:Rename all Git branch names to lowercase on Windows (GitHub remote)在 Windows 上将所有 Git 分支名称重命名为小写(GitHub 远程)
【发布时间】:2017-02-05 07:32:52
【问题描述】:

我们的团队正在使用 Git for Windows 和带有 GitHub 的 Git Extensions 作为远程存储库。人们创建了大小写不一致的分支,当两个人为同一个分支使用不同的名称(仅区分大小写)时,这会导致一些问题。

我们希望对所有分支名称都使用小写进行标准化以避免这个问题,但是我们如何将所有现有的分支名称转换为小写呢?有很多分支,包括本地和远程的,有些还有未完成的拉取请求。我只关心“活跃”的分支,即人们会再次推送的分支。

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

更严重的问题是我们在分支中有“文件夹名称”,例如“测试/重命名测试”。当我将本地分支重命名为“test/renametest”时,它似乎可以工作,但随后推送它失败并显示fatal: test/renametest cannot be resolved to branch. 我认为这是因为我还有其他名为“Test/Whatever”的分支,所以“文件夹名称”仍然存在“测试”,而不是“测试”。必须手动重命名每台机器上签出的每个分支是一个令人生畏的前景。我希望有更好的解决方案。

【问题讨论】:

  • 是否有不能删除所有非活动分支的原因?
  • 我们可以 - 他们不是问题。所有活动的分支都是问题。
  • 哦,好吧。 “必须手动重命名曾经在每台机器上签出的每个分支”听起来像是包含了不活动的分支。
  • 实际上,我认为非活动分支是一个问题,因为它们在 .git/refs 目录下设置了文件夹名称。因此,如果有人签出了“Test/One”(非活动),当他们尝试重命名并推送“Test/Two”(活动)时,仍然会出现问题。

标签: git github branch git-branch case-sensitive


【解决方案1】:

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

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 终端有可用的 grepsedcut 命令,您可能可以一次完成所有操作。从这样的东西开始,一旦它看起来不错,将其输出通过管道传输到它自己的 shell 脚本(例如,sh script_below.sh > my_big_git_rename.sh),然后运行它!

#!/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\/\1:refs\/heads\/\1/' | 

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

【讨论】:

  • 好的,它似乎可以在一个工作副本中工作,例如我重命名了“测试/重命名测试”->“测试/重命名测试”。但是,当我在另一个工作副本中尝试git pull 时(已签出“Test/RenameTest”分支),我得到“您的配置指定与远程的 ref 'refs/heads/Test/RenameTest' 合并,但是没有获取这样的参考。”我不明白这是在哪里配置的。我尝试使用git branch -m 将本地分支重命名为小写。我什至尝试在 Git 扩展远程存储库对话框中手动设置“默认合并”,但我仍然遇到同样的错误。
  • 好的,看来我确实需要每个分支 4 个命令来完成重命名:git push origin origin/OLD_BRANCH_NAME:refs/heads/NEW_BRANCH_NAME ; git push --delete origin OLD_BRANCH_NAME ; git branch -m OLD_BRANCH_NAME NEW_BRANCH_NAME ; git branch --set-upstream-to=origin/NEW_BRANCH_NAME NEW_BRANCH_NAME ;
  • 这似乎可行 - 再次感谢!进一步测试后澄清:重命名远程分支的命令只需要为存储库运行一次(所以由一个人),而重命名本地分支的命令需要为每个工作副本运行(所以每个人)。跨度>
  • 很高兴听到一切正常!是的,你最后的澄清是正确的。我可能应该更新我的答案...
  • 我现在不记得了,但我记得的是人们在重命名当地分支机构时遇到了问题,一个人几乎失去了一周的工作价值。如果我要再次这样做,我会告诉每个人推送他们想要保留的所有代码,重命名远程分支,然后让每个人重新克隆存储库(保留他们本地的备份以防万一)。
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 2011-06-12
  • 2015-08-15
  • 2020-04-28
  • 2016-05-15
相关资源
最近更新 更多