我正在寻找一种方法,让用户可以通过 raw.githubusercontent.com 访问特定版本存储库的数据,而无需大幅增加已经非常大的存储库的大小。
上下文:我有一个 GitHub 存储库,其中包含由文本重用算法创建的大量数据。 相同的算法每年在发生变化的文本语料库上运行两次,因此此存储库中的数据每年更改两次。
为了允许访问特定版本的文本重用数据,我正在考虑使用标签;根据我的理解,标签只是指向特定提交的指针,因此它不应该显着增加存储库的大小。
但是,根据我运行的实验(见下文),情况似乎并非如此:当我将标签推送到 GitHub 时,它还会创建一个包含提交时的完整数据的 zip 文件。即使我还没有将该提交推送到 GitHub,即使我使用轻量级标签格式,它也会执行此操作。看来这会极大地增加我的 GitHub 存储库的大小。
有没有办法在不创建 .zip 文件的情况下添加标签?
如果没有,我正在考虑在每次运行算法时创建一个新分支;该分支不会被更新,而仅充当指向该特定提交的指针。这会增加存储库的大小吗?使用分支还有其他缺点吗?
实验:
设置实验:
- 创建一个测试存储库并克隆它
- 在其中创建一个文件,内容为“DUMMY DATA – V1”
- 添加并提交
第 1 步:带注释的标签
- 创建带注释的标签:
git tag -a v1.0 -m "First version with dummy data"
- 将存储库推送到 GitHub:
git push origin main
- 这仅将新文件推送到存储库,而不是标签;标签必须单独推送:
git push origin v1.0
- 现在该标 checkout 现在 GitHub 上;它与一个 zip 文件关联,该文件包含内容为“DUMMY DATA – V1”的文件
- 检查是否可以使用 raw.githubusercontent 访问该文件(几分钟后即可正常工作):https://raw.githubusercontent.com////
第2步:带注释的标签,先推送标签
- 更改文件:将内容更改为“DUMMY DATA – V2”
- 添加并提交文件
- 添加新的带注释标签:
git tag -a v2.0 -m "Second version with new dummy data"
- 这一次,我们将在推送提交之前推送标签:
git push origin v2.0
- 新标 checkout 现在 GitHub 上,并且与一个 .zip 文件关联,该文件包含内容为“DUMMY DATA – V2”的文件;在GitHub上的repo中,该文件仍然具有原始内容“DUMMY DATA – V1” => 因此,zip 文件不是由 GitHub 在服务器上创建的,而是在推送标签的过程中创建的!
- 推送提交:
git push origin main
第 3 步:轻量级标签
- 更改文件:将内容更改为“DUMMY DATA – V3”
- 添加并提交文件
- 创建一个所谓的轻量级标签(省略“-a”标志和消息):
git tag v3.0
- 再次,我们在推送提交之前推送标签:
git push origin v3.0
- 与步骤 2 中发生的情况相同:新标 checkout 现在 GitHub 上,并且与包含内容为“DUMMY DATA – V3”的文件的 .zip 文件关联;在 GitHub 上的存储库中,该文件仍然包含内容“DUMMY DATA – V2”=> 轻量级标签并不那么轻量级:它们还会创建一个 zip 文件!
最佳答案
GitHub 提供了下载 tarball 或 zip 文件的功能,该文件是根据给定状态的存储库快照自动生成的。这些链接会在网络界面中自动提供,并且这些文件是按需创建的:如果没有人请求它们,那么它们将永远不会被生成。
当您标记某个提交并推送该标记但不推送该提交的分支时,该提交仍会被推送。如果您不这样做,标签将悬空并指向不存在的提交,并且存储库将被损坏。因此,在每种情况下,您总是会推送属于标记一部分的提交。
您可以使用 git archive
在您自己的计算机上创建这些文件。例如,如果您想创建 v1 的存档,您可以执行 git archive --format=zip -o v1.zip --prefix=v1/ v1.0
.
关于GitHub git 标签而不创建 zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72025963/