为了找出答案,首先建立一个符号链接:
$ ln -s /Path/referenced/by/symlink symlink
Run Code Online (Sandbox Code Playgroud)
Git尚不知道此文件。git ls-files可让您检查索引(-s打印类似stat的输出):
$ git ls-files -s ./symlink
$
Run Code Online (Sandbox Code Playgroud)
现在,通过将符号链接的内容添加到索引中,将其添加到Git对象存储中。将文件添加到索引时,Git会将其内容存储在Git对象存储中。
$ git add ./symlink
Run Code Online (Sandbox Code Playgroud)
那么,增加了什么呢?
$ git ls-files -s ./symlink
120000 1596f9db1b9610f238b78dd168ae33faa2dec15c 0 symlink
$
Run Code Online (Sandbox Code Playgroud)
哈希是对在Git对象存储中创建的打包对象的引用。如果查看.git / objects / 15 / 96f9db1b9610f238b78dd168ae33faa2dec15c,则可以检查该对象。
120000是文件模式。对于常规文件,它将类似于100644,并且是链接的特殊模式。从man git-config中:
核心符号链接
如果为false,则将符号链接检出为包含链接文本的小型纯文件。git-update-index(1)和git-add(1)不会将记录的类型更改为常规文件。
Use git cat-file -p漂亮地打印内容:
$ git cat-file -p 1596f9db1
/Path/referenced/by/symlink
Run Code Online (Sandbox Code Playgroud)
因此,这就是Git对符号链接的作用:当git checkout符号链接时,根据配置,您将获得一个参考完整文件系统路径的文本文件或一个符号链接。由符号链接引用的数据未存储在资源库中。
您可以在 Git 存储库中存储符号链接(特殊条目 12000),但是,如本测试所示,这将使GitLab 管道失败。
请参阅gitlab-ce 问题 27542(尽管它是针对特定情况 .gitlab-ci.yml (尽管它是针对符号链接
最好是管道首先重新创建符号链接,然后在后续步骤中使用正常构建进行处理:重新生成它似乎比存储它更好。