猿问

Git如何处理符号链接?

Git如何处理符号链接?

如果我有一个文件或目录是一个符号链接,并将它提交到一个Git存储库,那么它会发生什么呢?

我假设它将保留为一个符号链接,直到文件被删除,然后如果您从旧版本中提取该文件,它只会创建一个正常的文件。

当我删除它引用的文件时,它会做什么?它只是提交了悬空链接吗?


湖上湖
浏览 2662回答 3
3回答

米琪卡哇伊

符号链接引用的数据没有存储在存储库中。当您将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配置。无论哪种方式,符号链接引用的数据都不会存储在存储库中。
随时随地看视频慕课网APP
我要回答