git CLI 设计太烂

2021-12-08 07:18:37 +08:00
 AndyAO

自己用 git 之后,感到由于知识不系统,很多问题都解决不了,就照着《 Git 权威指南》学完。

回想起自己没这么干之前,最大的误解就是认为 git 是 linus 的伟大作品设计是很好的,但是仅从命令行的设计来看,这个东西是极烂的。

如果你上手之后发现总是很难用,有时候很让人困惑,那么不要感到很自卑,本来就很难用,本来就很复杂。

StackOverFlow 上排名前 5 的问题中有 3 个和 Git 有关,这说明大多数工程师在使用中经常会感到困惑。

如果你感觉很简单,那么要不就是「专家谬误」,要不就是你天赋异禀,异于常人。

具体来讲,最容易被看到的设计硬伤是:

实际上,工具越出名,越底层,改进的空间越小。

像编程语言这种东西,基本上就是没有后期修改的,稍微动动就是鬼哭狼嚎的。

例如,Java 字节码自从诞生之后就基本上没改过,连向后兼容的更改都没有。

git 这些 cli 不是精心设计的,被精心设计的只是核心原理,cli 的各种功能是堆出来的,可以说基本上就没有什么设计可言,这个鬼样子也是可以理解的。

等到感到不改不行的时候,往往就已经晚了。

7840 次点击
所在节点    程序员
82 条回复
justrand
2021-12-08 09:40:09 +08:00
无语,你可以完全用 alias 命令设置一套你熟悉的命令不就可以解决?!
Narcissu5
2021-12-08 09:40:25 +08:00
git checkout -b 这个有什么难记的,我一次就记住了。实在记不住下个 ohmyzsh 帮你自动补完。实在不行还有一大堆 GUI 工具。

git 最优秀的地方在于分布式仓库的设计思路,分布式嘛,一定很麻烦的。如果你学了半天 git 最后的感想就是 cli 难用,那就真是如入宝山空手回了
cyrivlclth
2021-12-08 09:47:08 +08:00
如果只是这些的话,你为啥不 alias 或者包一层。。。
FengMubai
2021-12-08 09:48:58 +08:00
git checkout 承担的功能太多了, 已经再改了. 比如切换分支现在用 git switch (建议直接去和 Linus 对线
dangyuluo
2021-12-08 09:50:19 +08:00
你要知道 Git 最初版本连 commit ,stash 什么都没有,干什么都要手动修改历史树。

话说熟能生巧,这些东西应该靠的是肌肉记忆。如果实在不想打一长串命令,用 git alias
zjsxwc
2021-12-08 09:54:29 +08:00
用刀叉影响我吃满汉全席吗?

楼主的意思是由于使用了刀叉,所以满汉全席就是垃圾。
Cbdy
2021-12-08 10:00:21 +08:00
我觉得还行
adoal
2021-12-08 10:04:32 +08:00
楼主,又见楼主 ^_^
SimonOne
2021-12-08 10:06:13 +08:00
@zjsxwc #26 楼主说的是满汉全席(git)很好,但是配套的工具(git CLI)有点难用,所以工具设计(git CLI)太烂。
charmToby
2021-12-08 10:09:07 +08:00
又不是不能用 (逃
yuuko
2021-12-08 10:09:56 +08:00
用了几年 git ,常用的无非几个,git pull git push git checkout git commit git rebase git merge git tag
zxxufo008
2021-12-08 10:14:37 +08:00
一般说太烂的都是能搬出来新东西,来推翻的.可惜没在 op 身上看到这点
zooeymango
2021-12-08 10:17:51 +08:00
git alias 在官方文档的 book 里第二章就有,属于基础知识,感觉你连文档都没有扫过就来评价,这也不太好吧
bnm965321
2021-12-08 10:19:09 +08:00
git checkout -b

为什么可以说明是参数设置随意?

另外 Git 不好学的原因我觉得很大一部分是新人不熟悉源码版本控制的数据模型,不知道为什么要这么做。
Reficul
2021-12-08 10:21:25 +08:00
我是觉得 git 比 GUI 有的场景下好多了。。

总是交换着一起用
Volekingsg
2021-12-08 10:21:55 +08:00
https://stevelosh.com/blog/2013/04/git-koans/

在上面套一层套的最好的就是 magit 了吧
guyeu
2021-12-08 10:25:33 +08:00
linus 设计的时候 git 只是一套底层命令,现在的 commit 、branch 都是基于这套底层命令封装的,你也可以封装一套,跟社区对着干
alexsunxl
2021-12-08 10:28:48 +08:00
git cli 很庞大的。 这么多年,很多老的 api 一直兼容着,很难动。 不喜欢套一层就好。
git show-ref git update-ref git unpack-objects git remote 这些你都没用过吧。
git 还能通过 remote-helper 搞私有协议。非常强大的。
楼主你说这些点真的是太小太小的一部分了。
cc666
2021-12-08 10:41:10 +08:00
@461da73c 学了几年的语文,建议提高自己的语文水平,从你抨击 OP 看书学 git 大概知道你的水平了,而不是做无脑的抨击 OP ,喷不到点上。

作者没有说 git 不好,说的是 git CLI 设计有失误,具体包括子命令功能是名不副实、某些命令功能过多以及部分名词混用,作者提的几点都是实打实存在的,怎么会和你所说的"git 水平"有什么关系,只能说,你用多了,已经避坑了,但是依然掩盖不了问题存在,如 19L 所说,git 在 2.23 中引入了 git switch 和 git restore ,用以替代现在的 git checkout 。并说明了现有的软件难以更改,这是确实存在的问题,至于 git alias 和套壳,也正是解决这一问题的可行方法而已。
Accessing
2021-12-08 10:46:14 +08:00
这只是单纯的讨论设计问题,但是在很多楼层看到了饭圈味道,哪个软件合适,用哪个,没那个必要啊。那种评论有时候很吸引眼球,但是非常浅薄,没有提供任何有用的信息。

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

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

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

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

© 2021 V2EX