【问题标题】:git: keep only the latest version of a specific filegit:只保留特定文件的最新版本
【发布时间】:2012-08-30 06:24:57
【问题描述】:

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

将二进制构建结果保存在存储库中通常是个坏主意,每次推送后上传PDF as an extenal file 并不方便。

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

【问题讨论】:

    标签: git pdf version-control github binaryfiles


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        我也有同样的问题。几年过去了,我认为现有的答案不再是最佳的。如果我理解正确的话,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 以外的任何资源的情况下为这本书提供一个合理的网站。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-15
          • 2014-02-23
          • 2020-05-06
          • 1970-01-01
          • 2019-12-11
          • 2020-08-15
          • 1970-01-01
          • 2018-11-05
          相关资源
          最近更新 更多