第 19.5 节 Git 大败局

Git 用的越久觉得有欠缺的地方越多,设计就是反人类。我恐怕他自己也不知道设计的什么。和那套 gcc 语法一样反人类。

Git 的合并就是一例,一件事得干三次,add commit merge,有什么意义?命令得允许缩写。

Git 有一大堆乱七八糟没人能说清的东西,Git 就和 Linux 一样,全是缺陷。我知道有这个用,但是什么意思呢,没人说得清。


  • 得能支持各种代理,而且默认情况下跟随系统代理。

  • 需要兼容 Windows,和 bash 解耦合。加入 NTFS 兼容设置,默认开启,凡是 NTFS 下禁止事项均要实现,比如不要往文件名里加英文逗号,应该以代替参数自动转换;奇葩软链接改用类似子模块的方式。提高平台兼容性。得支持 gbk,windows 下都是乱码。甚至没有一款全功能的 GUI 软件。

  • 要简单易懂。不要整一堆没人看懂的什么 merge rebase 还有一堆乱七八糟的命令。rebase merge 我至今没见过一个人说得清楚。要重新设计语法增加快速回退,现在回退还分四个参数,hard soft mix keep 什么的:这些乱七八糟参数谁知道到底什么意思?

  • 优化二进制文件存储方式。Git 不只保存差异,他每次改都保留一份原本。他现在 1M 的文本改一次,只加一个逗号,也重新多一个 1M 的记录。改十次就是多 10M 记录文件。Git 的差异存储是依赖于 gc 的,而 gc 是伪功能。

  • 版本控制工具自己的数据要能自动清除和压缩。Git 的 gc 就是假的。除非整个项目只有你一个人。 你不知道的是,任何二进制文件在 Git 项目中根本移不出去,除非把整个项目下载下来,删掉旧仓库再新建再把文件放回去。但是这样没意义,版本控制没了。任何删除二进制和精简的项目都没用。你以为你能删掉,你什么也删不掉。二进制放进去就永远也删不掉了,你本地可以,但是你推不到 main。原理很简单啊,你这边删了, 别人一合并,就回来了。而且你只能改你的分支,PR、tag 的分支你根本动不了。除非你删掉所有 PR tag。删了还算什么版本控制。而且 Github PR 是不能删除的。 Github 网站管理员要你列出删除原因,你得符合,你说太大了你看他理你不 我试过不搭理我。BFG Repo Cleaner、git filter-repo 之类的也是没用的东西。你无法重写已经 fork 和 PR 的部分。推上去拉回来你就发现大小压根没变。你重写了,删了,他 fork 一推回来就完啦。只要你用 GitHub 并且有 pull 你就压根 gc 不了也删不了任何提交错误的机密信息。 gc 也是个骗局,只要你有任何分支或者 tag 你就没办法 gc。

  • 提交要学 SVN,用数字表示版本。但是也允许 sha 索引。应该按数字排序提交 ,整一堆 sha256 人类不可读。每次还得反查看提交时间。SVN 比大小就知道谁先谁后 Git 的提交是按 sha256 判断的。比如下载东西可以指定版本下载,Git 的你知道第 103 次提交叫什么吗?怎么拉取?SVN 直接 checkout 103。

  • 要支持断点续传。从 Git 不支持断点续传我就知道他其他设计也是反人类。

  • 要支持索引目录变化。竟然默认不允许仅新建目录?

  • 要用 BSD 许可证或者更宽容的许可证。

  • 不要用 python

  • 根据仓库大小自动执行推荐性参数,现在的 Git 仓库一大就要东调西调。

  • 支持备份同步功能。Git 的备份一直很麻烦。你只能自己建立一个脚本定时拉取(拉取裸仓库吗?这对吗?)这是防止 GitHub 云端丢失,我找了很多都没有能用的。Gitlab 是可以备份,要收费。就是定时拉取到本地,做备份用,即镜像。

  • 支持 SVN 的特定目录加密功能 。用 Git 就等于全开源了,得允许加密访问, 每个人开发一部分。

  • 拉取效率太低,速度太慢。Git 的拉回来再解压也是无语,太吃 CPU 了,应该允许不解压直接拉的参数。git log 写的也是不是给人看的 。Git 的日志全是 Merge branch 'XXX' of xxx into XXX”

  • 要允许 git checkout 单个目录或文件。多人协作也是伪分布式,应该只允许拉单个目录和文件,别人改其他地方关我什么事。

  • 要支持自动同步上游——子模块也一样。

  • 要允许命令行密码提交。

  • 现在的个人信息就名字和邮件,明显不够用,应该做冗余设计。

最后更新于

这有帮助吗?