在 git 分支名上面加斜杠真的太恶心了

61 天前
 itskingname

不知道谁开的头,git 分支名写成这样:feature/xxx

这样写会让人有时候分不清楚 git 命令自带的斜杠和这个手动加的斜杠。例如:

git merge origin/feature/xxx 
git push origin feature/xxx:feature/xxx

直接使用下划线甚至驼峰明明都比乱加斜杠好:

git merge origin/feature_xxx
git push origin featTest:featTest
9779 次点击
所在节点    git
100 条回复
my3157
61 天前
git flow 工具默认的分支规则就是这样,feature/*,release/*,hotfix/*,support/*
Alliot
61 天前
这是 git flow 的做法。。有什么不合理的吗
fxjson
61 天前
有逗号、&符都很恶心
NotFoundEgg
61 天前
不光 git 分支名的斜杠支持文件夹折叠,redis 的 key 也是这样(在某些 gui 里
simen513
60 天前
/ 代表文件夹,如果是大项目,有很多人一起提交代码,包括 review 代码等,不同的人创建的分支都放到自己名字的目录下,这样好管理和查找。如果是小项目自然是无所谓了。
est
60 天前
哈哈哈哈,恭喜 LZ 被一群 GUI 工具党教育了。。。。。。

我也是习惯 CLI ,但是的确这个命令对有歧义的地方处理得很糟糕。。。
DesnLee
60 天前
@est 我觉得 GUI 不 GUI 并没有什么高低,用 GUI 也不一定不会命令行,只是有些操作 GUI 确实很方便就是。

我在用 Gitkraken ,支持内建终端,可以 GUI 配合命令行操作 git ,过于好用入了正版,我就在它里面同时用 GUI 和命令行。
est
60 天前
@DesnLee 就从分支名字包含斜杠来说,GUI 就直观的多,CLI 就遭罪,这明显是有高低的。

我 10 年前见过最搞笑的是有人把本地 hg 仓库起了个中文分支名字,推到服务端,hg web 挂了。。。233333
m1nm13
60 天前
这...真不是 GUI 的 BUG,结果被当 feature 吗
loveyu
60 天前
之前用斜杠,后来起名字困难,改为分支名直接使用需求 id
jinliming2
60 天前
感觉 git 本身就是这么设计的啊,分支就是文件夹。
分支分为本地分支和远程分支,本地分支在 .git/refs/heads 下,以斜杠为目录存储,比如 main 、feat/feat1 ;远程分支在 .git/refs/remotes 下,以远程名与分支名用斜杠分隔,按目录来存,比如 origin/main 、upstream/feat/feat1 。
远程名里也是可以包含斜杠的,所以你的上游不仅可以叫 origin 、upstream ,也可以叫 upstream/cn 、upstream/us 。
所以远程分支也可以是 upstream/cn/feat/feat1 ,其中 upstream/cn 是远程名,feat/feat1 是分支名。

不过,这个确实可能会存在冲突的问题,比如你本地一个分支名就可以叫做 origin/main ,这样就会和 remotes/origin/main 冲突,在 git checkout origin/main 的时候就会收到警告:warning: refname 'origin/main' is ambiguous.。这时候实际上切换到的是本地的分支,要切换到远程分支进入 detached HEAD 状态,需要指定 git checkout remotes/origin/main 。
而如果本地有个分支叫做 remotes/origin/main 的话,又会冲突,那要切到远程分支就要指定 refs/remotes/origin/main 。
如果本地又有了 refs/remotes/origin/main 分支了,emmmm ,应该就没办法直接用分支名来切换了。
fpk5
60 天前
@allplay #13 git 包含/,在文件系统里面就是作为路径存的,`feature/abc`就是一个 feature 目录底下一个 abc 文件,文件里面是 commit 的 hash
fpk5
60 天前
@est #46 包含/的 ref 表示为目录,这是 git 自己的设计
fpk5
60 天前
@jinliming2 #51 实际上你不能创建 refs/remotes/origin/main ,因为这个已经存在了。
dobelee
60 天前
斜杠不是自己加的,git flow 的默认规范,CLI 和 GUI 都能自动创建。
geelaw
60 天前
按照这个逻辑分支的名字同时可以是文件名也恶心,毕竟无法区分 git checkout master 的意思是提取当前 commit 里当前目录下叫做 master 这个文件,还是指切换到 master 这个分支,尤其是在最近的改名浪潮下,master 并不一定是存在的分支呢~

建议以后分支都取不能是文件名的名字,但很可惜 Git 支持的分支名全是 Linux 下合法的文件名,所以推荐不要使用 Git ,免得造成歧义。
jinliming2
60 天前
@fpk5 #54 刚试了,是可以的
skydiver
60 天前
有的公司禁止用斜杠,因为会给服务器创建太多目录…有的设计不好的服务端还会崩
Trim21
60 天前
不说 guicli 的问题了,origin/feature-xxx 跟 feature/xxx 里面这两个斜杠的语义是相同的啊…
infoscope
60 天前
idea 按/生成多个仓库的目录,按规范命名,一次就可以找到一个需求所有的仓库

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1035964

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX