用git也有日子了才发现git原来这么智能……

2012-09-06 01:14:09 +08:00
 feiandxs
我move 2.py to 1.py 并且进行了一些修改
它居然不告诉我,说我是delete了2.py added 1.py
而是告诉我,灭哈哈,你rename了2.py1.py,并且insert了东西……

然而如果我是把图片对应换一下它就告诉我,你rewrite了这个文件……

似乎是根据文件差异百分比来认的么。。
3932 次点击
所在节点    程序员
7 条回复
dndx
2012-09-06 03:26:58 +08:00
实际上原因很简单,你在shell里运行 ls -i
就会发现,你mv文件只是改了文件名,inode number还是一样的,
所以git能轻而易举的识破你的小动作 :)
fly2never
2012-09-06 08:51:41 +08:00
是这样的.提交到stash之前是delete和add两个操作.提交到stash区之后就变成rename了 哈哈
yangg
2012-09-06 09:17:44 +08:00
@dndx 不是根据inode吧,我记得改动大的时候也有识别不了的,
而且 cp test test2 && rm test
这样添加后,依然是rename
yuelang85
2012-09-06 09:38:28 +08:00
git是跟踪文件,不是文件名。。。。
ivenvd
2012-09-06 10:09:58 +08:00
@dndx 确实不是通过 inode ,git 内部有一套神奇的内容比较算法……
lightening
2012-09-06 23:59:47 +08:00
Git是靠文件Hash来比较文件的啊……
xatest
2012-09-07 01:35:56 +08:00
git的原理就是一个小型文件系统,推荐阅读《Pro Git》~

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

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

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

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

© 2021 V2EX