Git 那么流行,那么问题来了,你觉得 Git 有什么缺点和不足呢?

2015-11-16 21:48:42 +08:00
 Mark24

如题
Git 的各种宣传都高大上,无论是性能和设计都完爆同类版本控制工具。
那么这看似“完美”的教主的作品,又有什么缺点和不足呢?

6701 次点击
所在节点    问与答
33 条回复
Mark24
2015-11-17 10:15:26 +08:00
@caixiexin 戳中泪点
Mrun
2015-11-17 10:24:14 +08:00
没有像 SVN 一样的权限控制
skydiver
2015-11-17 11:24:17 +08:00
@caixiexin 学会了就不用了。遇到不会的还可以查 manpage
mengzhuo
2015-11-17 13:02:59 +08:00
大文件和 binary 支持~~

@wohenyingyu01 用 depth 参数
wohenyingyu01
2015-11-17 14:56:56 +08:00
@mengzhuo 我 clone 从来都是--depth=1
msg7086
2015-11-17 15:44:25 +08:00
@caixiexin 果断 gui 走起。现在已经完全被惯坏了,除了 rebase -i 以外都不用命令行了。
robot9
2015-11-17 15:54:21 +08:00
git can't handle really big repos...
YuJianrong
2015-11-17 20:42:00 +08:00
@yyfearth
其实 P4/SVN 熟的话开 branch 也还好不算麻烦,麻烦的是 merge (而且其实真的很多人不好好学怎么用 p4/svn 的,当然我相信这类人用 git 也不会好好学)。 git 的 merge/rebase 确实要强大不少。而且 branch 一定是服务器上开,自己临时本地开一个做不到也比较遗憾……

至于 p4 lock 文件,其实是可以设置的……文件设置成不要 lock 直接改的模式就和 svn 一样了, ignore 机制那么基础的东西当然也有(虽然我忘了怎么搞了)。

我们现在 git 用法和 svn 差不多( gerrit 作为提交监控),这样就更加缩小了 git 优点,感觉和 p4/svn 也差不太多了。
clino
2015-11-17 23:28:22 +08:00
@Felldeadbird gerrit
yyfearth
2015-11-18 03:10:41 +08:00
@YuJianrong 怎么设置成不自动 readonly ?目前我的 IDE 都会自动处理倒是没问题
只是远程修改文件的时候没办法自动处理 很麻烦
而且远程自动 build 和 test 的时候 有时候会尝试自动修改文件 但是由于 readonly 失败

ignore 是有 需要设置 P4IGNORE 到 p4env 而不是自动到每个目录下面找
因此一个 workspace 只能指定一个 P4IGNORE 文件 这样多项目的时候就很有问题
YuJianrong
2015-11-18 23:23:00 +08:00
@yyfearth 有段时间没用 p4 了我都忘了……隐约记得好像是对文件的设置。我们也是遇到某些文件一定得是可写状态要不软件打不开的问题就干脆全部设置成可写了。但详细哪里设置我已经忘了……

P4IGNORE 是这个行为啊……我们是单项目超多文件夹的所以没感觉到……
1000copy
2016-03-23 20:38:58 +08:00
一般流程涉及的命令还好,到需要撤销操作的时候,就有点乱。所以,没有人提到 git reset HEAD -- file.ext 这个幽灵般的子命令吗?

使用此命令,可以把 file.ext 移除暂存区。可是为什么不是 git unstage file.ext 呢。

命名应该体现语义, unstage 就是体现了语义的,在 pro git 一书中也建议通过自定义命令的方法,定义一个 unstage ,替代 reset 在此场景下的使用。 git reset HEAD -- file.ext 则是体现了它的实现。你要明白 reset 子命令是从 HEAD 之内取出 file.ext,使用此文件复写暂存区文件,从而达成把已经暂存的文件恢复成前一个版本的效果。为此,你就需要弄明白三个树的存储结构。等到钻入这个黑洞。我明白时,我已经把 tree 的三种存储搞清楚了。我就是这样任性的向偶像致敬的。

OMG ,为了连接 SQL ,你得弄明白关系数据库的存储——就是这个意思。

仿佛还不够复杂,于是还有:

1. git reset --hard HEAD
2. git reset --soft HEAD
3. git reset --mixed HEAD

可是在偶像目前,我不敢乱讲话的。所以,你不妨看看:

git reset

http://stackoverflow.com/questions/4114095/revert-git-repo-to-a-previous-commit?lq=1

原来并非我不懂。我不是一个人在战斗。

pro git 的作者也说,第一版本我没有说 reset ,是因为,我也不懂。妈蛋,把 git 这么个命令行版本工具写的和 c++ primer 差不多厚的人说我其实写完了一本书也不懂 reset 的。

另外, git add 是有多含义的,对于未跟踪的文件,可以用 add 把它变成已跟踪并且加入暂存区。对于修改的文件,可以用 add 加入暂存区。不同的场景功能是不同的。那么如何把一个未跟踪文件变成(仅仅变成已跟踪呢?我没有看到。 unix 的哲学是单一功能的命令,组合使用。一个多功能的命令未必合适。

我的意思:我对 CLi 的设计略有微词。也许我有些地方没有弄明白,请明白人指正。内部存储、暂存、分支、合并、 rebase 都很好的。
flyhelan
2021-02-23 15:54:22 +08:00
没人想重新发开一个新的版本控制系统吗?

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

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

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

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

© 2021 V2EX