8

我在 github 中保留了一些LaTex 课程笔记。我的同事不知道如何使用 LaTex,并要求我将最终的 PDF 放在 repo 中。

将二进制构建结果保存在存储库中通常是一个坏主意,并且在每次推送后将PDF 作为外部文件上传并不方便。

有没有办法在 repo 中只保留最新版本的 PDF?

4

3 回答 3

3

如果您已经在 github 上,则有一个名为“下载”的面板,您可以在其中添加您拥有的任何文件。如果您想在推送时将其添加到挂钩中,则可能有一个 API 调用。您也可能只是构建 + 将 pdf 复制到您的保管箱帐户/rsync 到一个公共文件夹/使用另一个 share-my-files-API/..

您最好生成 pdf + 通过电子邮件将其发送给他们,这也是由钩子触发的。

如果您最终构建,将 pdf 添加到 repo,然后大量更新该文件,repo 将变得非常大,因为它必须坚持的差异将占用大量不必要的空间。

于 2012-08-30T06:41:04.013 回答
3

没有从存储库中删除旧版本文件的好方法。每个提交都是安全的,这意味着提交的标识符是使用每个文件的内容构建的。有很多方法可以重写git 存储库的历史,但这样做会完全破坏任何协作的机会,因为每次重写历史时基本上都是在创建一个新的存储库。

另一种方法是使用专门为此目标设计的git 附件:在小型存储库中管理大文件。不幸的是,这是一个相当新的特性,而且它不是官方 Git 的一部分,所以对它的支持不是很好。

于 2012-08-30T07:01:51.770 回答
1

我有完全相同的问题。几年过去了,我认为现有的答案不再是最佳的。如果我理解正确的话,github 下载不再是免费功能——只有在您为 github 帐户付费时才能获得此功能。

尽管 Sergiu Dumitriu 的回答指出了用 git 重写历史的缺点是正确的,但我和 OP 都在进行单独的项目,对于这样的项目,重写历史实际上并不是什么大不了的事。

以下是截至 2022 年对我来说效果很好的解决方案。我在 docs/ 子目录中为我的项目制作了一个 Github Pages 网页。当我将我的乳胶文件编译为 pdf 时,我的 makefile 会将 pdf 复制到该目录中。pdf 文件受版本控制。随着时间的推移,这个 pdf 文件的二进制差异会大大增加我的目录树的大小。但是,我可以使用 git filter-repo(第三方工具)从我的项目历史记录中删除该文件。然后我的 makefile 脚本将文件的最新版本复制回 docs/ 子目录。这是我的 makefile 的相关部分的样子:

forget_pdf_history:
    test -e $(BOOK).pdf || exit 1
    git commit --allow-empty -a -m "updating before erasing history of docs/$(BOOK).pdf"
    git filter-repo --path docs/$(BOOK).pdf --invert-paths
    make reconfigure_git
    cp $(BOOK).pdf docs
    git add docs/$(BOOK).pdf
    git push --force -u origin master

reconfigure_git:
    git remote add origin https://github.com/bcrowell/ransom.git
    git config remote.origin.url git@github.com:bcrowell/ransom.git

无可否认,我必须重新构建 git 的配置非常难看,但它确实有效,并且它允许我在不使用 github 以外的任何资源的情况下为这本书提供一个合理的网站。

于 2022-01-01T23:50:53.663 回答