Published on

获取gitlab仓库的文件存储路径

Authors

现有一个需求,从gitlab的文件系统,读取git的提交信息。但gitlab文件路径做了hash,文件系统的路径名称跟仓库名称不一致,无法直接获取仓库的路径。

hash路径存储规则

# Project's repository:
"@hashed/#{hash[0..1]}/#{hash[2..3]}/#{hash}.git"

# Wiki's repository:
"@hashed/#{hash[0..1]}/#{hash[2..3]}/#{hash}.wiki.git"

gitlab的hash路径生成规则是SHA256(project.id),将projectId做SHA256,得到哈希前两位做为第一级目录,第三第四位作为第二级目录,最后就是完整的hash拼上.git作为目录。

现在已经得到了git仓库的真实文件系统路径了,可以cat下${hash}.git下面的config, 可以看到fullpath,就是仓库的hash前的地址。

获取ProjectId

1. 通过gitlab api

具体就不说了,每种语言有对应的api

2. 直接上仓库的页面

直接curl上仓库的页面,HTML里面就有projectID,这应该是最暴力和最简单的方法了。

<input type="hidden" name="project_id" id="project_id" value="335" />

例子Example

echo -n $projectId | sha256sum

引用Reference

Official doc

How to find hashed storage path

How to find project id for gitlab