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

Sha*_*nde 2 git symlink gitlab gitlab-ci

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

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

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

gel*_*hal 5

为了找出答案,首先建立一个符号链接:

$ 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符号链接时,根据配置,您将获得一个参考完整文件系统路径的文本文件或一个符号链接。由符号链接引用的数据未存储在资源库中。


Von*_*onC 3

您可以在 Git 存储库中存储符号链接(特殊条目 12000),但是,如本测试所示,这将使GitLab 管道失败。
请参阅gitlab-ce 问题 27542(尽管它是针对特定情况 .gitlab-ci.yml (尽管它是针对符号链接

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