如何将symlink文件添加到gitlab repo

时间:2017-10-01 07:27:23

标签: git gitlab symlink gitlab-ci

如何将符号链接添加到文件到gitlab存储库?

每次从gitlab运行管道时,本地符号链接都会被破坏。

关于如何为位于gitlab repo内部的文件夹创建符号链接的任何建议都会很棒。

2 个答案:

答案 0 :(得分:2)

首先,要找出符号链接:

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

Git还不知道这个文件。 git ls-files允许你检查你的索引(-s打印类似于stat的输出):

$ git ls-files -s ./symlink
$

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

$ git add ./symlink

那么,添加了什么?

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

哈希是对在Git对象库中创建的压缩对象的引用。如果你查看.git / objects / 15 / 96f9db1b9610f238b78dd168ae33faa2dec15c,你可以检查这个对象。

120000是文件模式。对于常规文件,它将类似于100644,并且是链接的特殊模式。来自man git-config:

core.symlinks

如果为false,则将符号链接签出为包含链接文本的小型普通文件。 git-update-index(1)和git-add(1)不会将记录的类型更改为常规文件。 Use git cat-file -p打印内容:

$ git cat-file -p 1596f9db1
/Path/referenced/by/symlink

那么,Git对符号链接做了什么:当你git checkout符号链接时,你要么得到一个文本文件,其中包含对完整文件系统路径的引用,要么是一个符号链接,具体取决于配置。 符号链接引用的数据不存储在存储库中。

答案 1 :(得分:0)

您可以在Git仓库中存储symlink (special entry 12000),但是,如this test所示,这会导致GitLab pipeline失败。
请参阅gitlab-ce issue 27542(尽管这是.gitlab-ci.yml作为符号链接的特定情况)。

最好是管道首先重新创建符号链接,然后在后续步骤中使用正常构建进行处理:重新生成它似乎比存储它更好。