Visual Studio 中的 Git 系统是如何进行文件对比的?

2017-09-11 10:47:43 +08:00
 UnknownR

目前在用 vs 中的 git 来做版本控制,不过有些问题不是很明白,git 的话是有修改标记的,比如 sd edit+文件,就能标记要修改的文件,保存快照或者其他之类的,还好理解一点,因为已经提前对要修改的内容做了标记。

现在用 vs,同步完 repo 之后直接用编辑器编辑项目文件, 保存后在 vs 里能检测到修改的文件,还能对比源文件,检测修改倒好解释,核对 checksum 值就行,但是不太理解它是如何保存源文件的,如果是文件描述符的话, 在保存文件并且关闭编辑器之后,文件偏移量等信息还会在内存中驻留吗?编辑前我没有告诉 vs 我要修改哪个文件,编辑文件时也是把 vs 关闭着的, 修改完成保存后内存也应该 release 了,再打开 vs 或者说 git,他怎么能对比源文件?或者说能够单凭 checksum 值就检测出修改了哪些内容?还是说有后台程序实时监测内存内打开的文件,有 repo 目录下的就保存该文件快照?

5580 次点击
所在节点    git
28 条回复
momocraft
2017-09-11 12:15:17 +08:00
上一个版本在上一个 commit 里 (.git 下面)。程序只需要比较上一 commit 中的 tree 和你的 work tree (你修改的 **结果**),不需要知道你中间做了什么,也不需要监视你的修改 **行为**。
yanhejihe
2017-09-11 12:29:55 +08:00
修正下,vs 启动时,是用自己文件对比,而不是 git 的。在你没 git add 前,是会有 local history 的(哪个时间点,改了什么,类似快照),我是从 Android studio 推论出的。
UnknownR
2017-09-11 12:30:16 +08:00
@fyl00
@yanhejihe
@momocraft
@CEBBCAT
@oott123
@also24
@clino
@AlphaTr
十分感谢各位的回复,查看目录后发现,确实 git 又相当于复制了一份用于检测对比的 repo 在.git 的暂存区中
LioMore
2017-09-11 13:09:53 +08:00
和 vs 有什么关系?
xomix
2017-09-11 13:13:32 +08:00
fc 1.txt 2.txt >3.txt
………………我觉得你肯定不是很清楚这是在做啥。
UnknownR
2017-09-11 14:02:20 +08:00
@xomix 我一般用 windiff
xomix
2017-09-11 14:26:31 +08:00
@UnknownR 外部命令需要另外加载,fc 是内部命令。
heimeil
2017-09-11 18:10:12 +08:00
@UnknownR #23 并不是复制了一份 repo 在.git 中用于检测对比,而是.git 存储了所有历史记录,检测是否改变就是拿历史里的最后一个版本和没有提交的版本做对比而已,检测改变只是对版本控制工具的一个扩展应用。

你 clone 了别人的 repo 不是单单下载了最新的代码,最主要的.git 文件夹,别人的所作所为全都在里面,可以随意查看这个 repo 从无到有的所有历史修改,这就是版本控制的核心。

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

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

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

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

© 2021 V2EX