为了账号安全,请及时绑定邮箱和手机立即绑定

Git如何处理符号链接?

Git如何处理符号链接?

Git
湖上湖 2019-06-23 15:28:17
Git如何处理符号链接?如果我有一个文件或目录是一个符号链接,并将它提交到一个Git存储库,那么它会发生什么呢?我假设它将保留为一个符号链接,直到文件被删除,然后如果您从旧版本中提取该文件,它只会创建一个正常的文件。当我删除它引用的文件时,它会做什么?它只是提交了悬空链接吗?
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

符号链接引用的数据没有存储在存储库中。


当您将Git添加到索引中时,您可以通过查看它所做的事情来了解Git对文件所做的事情。索引就像预提交。提交索引后,可以使用git checkout将索引中的所有内容带回工作目录。那么,当您向索引添加一个符号链接时,Git会做什么呢?

要找出答案,首先,创建一个符号链接:

$ ln -s /path/referenced/by/symlink symlink

盖特还不知道这个文件。git ls-files允许您检查索引(-s版画stat-类似产出):

$ git ls-files -s ./symlink
[nothing]

现在,通过将符号链接添加到索引中,将其内容添加到Git对象存储中。将文件添加到索引时,Git将其内容存储在Git对象存储中。

$ git add ./symlink

那么,添加了什么?

$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0       symlink

哈希是对在Git对象存储中创建的打包对象的引用。如果您查看,可以检查此对象。.git/objects/15/96f9db1b9610f238b78dd168ae33faa2dec15c在存储库的根中。这是Git存储在存储库中的文件,稍后您可以查看该文件。如果你检查这个文件,你会发现它很小。它不存储链接文件的内容。

(注120000中列出的模式是ls-files输出。就像100644)

但是,当您从存储库中签出这个对象并进入您的文件系统时,Git会如何处理它呢?这取决于core.symlinks配置。从…man git-config:

核心.符号链接

如果为false,则将符号链接签出为包含链接文本的小型普通文件。

因此,在存储库中有一个符号链接时,签出后可以得到一个文本文件,其中包含对完整文件系统路径的引用,或者获得一个适当的符号链接,具体取决于core.symlinks配置。

无论哪种方式,符号链接引用的数据都不会存储在存储库中。


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 2639 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信