有没有一种方法可以禁止本地创建具有特定名称的 git 分支?

6

我的一些项目使用"master",另一些项目使用"main",我经常会不小心检出其中一个。最大的问题在于当我在一个使用"main"的项目上,同时还使用了Heroku,而Heroku使用"master"时,git checkout master看起来是成功的,但却不正常。

有没有一种本地配置方式可以使创建这个分支失败?


2
如果你的项目已经同时使用了 mainmaster,而你的问题是不小心检出了错误的分支,那么这个方法对你有帮助吗?(如果这不是你的问题,我可能没有理解你的情况) - mkrieger1
还有什么大不了的呢?无论远程仓库有什么,没有任何法律要求你必须拥有本地的“master”。 - matt
虽然我不完全理解你的问题,但你是否研究过 git 钩子? - Marcello Romani
你可以在.git/refs/heads目录下创建一个符号链接(或符号引用),将其中一个链接到另一个。这样,无论使用哪个名称,它都将有效地指向同一个分支。 - Jeff Mercado
请参考@JeffMercado建议的https://dev59.com/53RB5IYBdhLWcg3wr48V。 - mkrieger1
2个回答

3

以下是我在 .git/hooks/post-checkout 中得出的结果

if [ `git branch --show-current` == "master" ]; then
  echo "DO NOT USE MASTER"
  git checkout main
  git branch -d master
fi

分支名称仅在存储库本地,您还可以使用 git checkout -tb master origin/main; git symbolic-ref refs/heads/{master,main} 命令,现在您的主分支和 main 分支是相同的。 - jthill

1
我不知道有没有集成到git中的方法可以做到这一点。
您可以编写post-checkout钩子,该钩子将防止自动切换到另一个分支,或在检测到您处于“坏”分支时在屏幕上显示足够大的警告;再加上一个pre-push钩子,它将防止将“坏”分支推送到远程。

两个快速而不太规范的解决方案:

  • .git/refs/heads下创建一个空文件,并将该文件设置为只读:
# under linux :
touch .git/refs/heads/main
chmod a-rwx .git/refs/heads/main

文件似乎即使在运行git pack-refs时也会保留在那里,但我还没有检查它是否会在所有情况下都保留。
  • 在本地仓库中创建一个名为main/dontcreate的分支
在当前实现中,git不允许同时拥有命名为mainmain/something的分支-- git仍希望能够创建位于.git/refs/heads下的文件来表示分支,并且这将创建一个同名的文件和目录。
请注意,这两种方法都依赖于当前实现的git(目前为git v2.33),未来版本可能会发生变化。

“post-checkout”和“pre-push”钩子正是我正在寻找的 - 我该怎么做? - John Bachir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接