git Resource Identifier Scheme允许我引用一个特定的git仓库。
然而,我正在寻找一个URI方案,让我可以在特定的git repo中,在特定的提交中引用特定的文件/文件夹。例如,在提交a30d8a39f0571425a459816ed8680e987a2ff279
时,可以使用形象的URI git://github.com/torvalds/linux.git:usr/Makefile@a30d8a39f0571425a459816ed8680e987a2ff279
来引用存储库git://github.com/torvalds/linux.git
中的文件usr/Makefile
。
需要说明的是,我感兴趣的是适用于所有git服务器的URI方案,而不是只适用于GitHub或GitLab的HTTP URL。
3条答案
按热度按时间tvmytwxo1#
我不知道有什么广为接受的方法可以做到这一点,但我多年前提出了一个方案:http://www.nuke24.net/docs/2014/GitObjectURIScheme.html.
通常,格式为
x-git-object:ef967a26bcd39ca62dd687e929ba4eba0ae66e81
,它引用由Git散列标识的**对象(在这种情况下是Linux的Makefile的内容,但也可以是提交或树,它们不能直接表示为字符串/字节序列)。该文档还指定了建议存储库以及在树或提交内的命名分支或路径上引用最新存储库的方法,所以你可以说x-git-object:latest?branch=master&repository=git://github.com/torvalds/linux.git#Makefile
来引用master分支上最近提交的Makefile,不管它是什么。ozxc1zmp2#
Git本身与文件无关;它是关于提交的。所以Git的主要命令是关于与另一个仓库对话并获得提交。Git理解的URL就是为了实现这一点,它们确实做到了,但也就到此为止了。
有一个 * the
git archive
command,它和--remote *url*
一起,可以从一个 * 特定 * 提交中提取部分或所有文件的存档,只要服务器允许。这不是一个特定的 file URL/URI:这是一个Git命令,它可以访问Git服务器(同样,它通常提供 commits),然后询问Git服务器是否愿意准备单个提交或其子集作为tar或zip存档。通过提供单个文件的路径作为子集,你 * 也许 * 能够从特定Git服务器上的特定提交中提取单个文件,但这是Git为实现你的目标所做的努力--您提供给git archive
的参数也不是URL/URI。cwtwac6a3#
SoftWareHeritage初始化定义了可用于唯一识别软件档案中元素的ID(swhid)。
它允许向下指向存储库、文件夹、文件甚至行。
请参见https://docs.softwareheritage.org/devel/swh-model/persistent-identifiers.html#persistent-identifiers
即使它不是一个URL,也有一些可用的解析器,或者您可以强制使用“源”。
对于私有软件(SWH上不存在),您可以使用CLI(https://www.softwareheritage.org/faq/?lang=fr#33_How_can_I_get_a_SWHID_for_my_software)在本地生成您自己的ID