我在 github 中保留了一些LaTex 课程笔记。我的同事不知道如何使用 LaTex,并要求我将最终的 PDF 放在 repo 中。
将二进制构建结果保存在存储库中通常是一个坏主意,并且在每次推送后将PDF 作为外部文件上传并不方便。
有没有办法在 repo 中只保留最新版本的 PDF?
我在 github 中保留了一些LaTex 课程笔记。我的同事不知道如何使用 LaTex,并要求我将最终的 PDF 放在 repo 中。
将二进制构建结果保存在存储库中通常是一个坏主意,并且在每次推送后将PDF 作为外部文件上传并不方便。
有没有办法在 repo 中只保留最新版本的 PDF?
如果您已经在 github 上,则有一个名为“下载”的面板,您可以在其中添加您拥有的任何文件。如果您想在推送时将其添加到挂钩中,则可能有一个 API 调用。您也可能只是构建 + 将 pdf 复制到您的保管箱帐户/rsync 到一个公共文件夹/使用另一个 share-my-files-API/..
您最好生成 pdf + 通过电子邮件将其发送给他们,这也是由钩子触发的。
如果您最终构建,将 pdf 添加到 repo,然后大量更新该文件,repo 将变得非常大,因为它必须坚持的差异将占用大量不必要的空间。
没有从存储库中删除旧版本文件的好方法。每个提交都是安全的,这意味着提交的标识符是使用每个文件的内容构建的。有很多方法可以重写git 存储库的历史,但这样做会完全破坏任何协作的机会,因为每次重写历史时基本上都是在创建一个新的存储库。
另一种方法是使用专门为此目标设计的git 附件:在小型存储库中管理大文件。不幸的是,这是一个相当新的特性,而且它不是官方 Git 的一部分,所以对它的支持不是很好。
我有完全相同的问题。几年过去了,我认为现有的答案不再是最佳的。如果我理解正确的话,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 以外的任何资源的情况下为这本书提供一个合理的网站。