【问题标题】:Advises on the gestion of a website via Git : Images and other big files建议通过 Git 管理网站:图像和其他大文件
【发布时间】:2014-08-11 04:42:05
【问题描述】:

我有一个完全由 Git 管理的网站。总之,我在本地开发我的网站,当我得到一个值得在线的结果时,我只需输入git push(由于公钥或其他任何东西没有密码),3 秒后我的新网站在线。

事实上,我非常喜欢这个系统,我想尽可能多地、尽可能聪明地使用 Git(我正在学习它大约 4 天)。对于很多事情。

对于网站主题,困扰我的是我需要“大”文件(= 不是源代码),例如图像(徽标、背景……)或 PDF 文件(简历、科学论文)。如果我理解得很好,这些文件只是从一个版本保存到下一个版本,因为“增量”不准确。事实上,旧的通常是无用的(谁在乎旧的背景或从现在开始不完整的简历?)并且很可能会占用大量内存(如果我在每个事件中更新我的简历,一个例子)随着时间的推移。

所以对于这个项目以及之后的更多项目,我想要一个带有 IN IT 的 git 目录:
- 项目的文件(主要是源代码)我想用作存储库的所有常见 git 文件,并有可能备份它的回溯
- 一个目录(我们称他为data/),它在每个commit + push 处更新,但从那时起,其中以前的文件肯定会在遥远的 git repo 上丢失

这个想法是:
- 避免内存爆炸
- 允许拉动的人(即使是前分支)通过这一事实拥有一个有效的本地项目,但使用最新的data/(我们研究案例的前网站上的新徽标和新简历)
- 让我的生活更简单,让我的女朋友更快乐

欢迎所有想法,但请注意,我的理念是更喜欢高级解决方案。

【问题讨论】:

    标签: git file memory web


    【解决方案1】:

    这就是artifact referential like Nexus 可以派上用场的地方。

    • 您可以从 Git 存储库管理和交付源代码
    • 但您将工件(大图片、文档等)存储在工件中(甚至是 snapshot one,因为您不保留历史记录)

    这个想法是:

    • 很容易从工件存储库中清理或删除数据(它只是共享文件夹的集合,具有命名约定),
    • 虽然在 DVCS(分布式版本控制系统)中很难做到这一点,但 设计 可以随着时间的推移保留数据,并且应该足够精简以进行克隆(不会因大型二进制数据而膨胀)。

    【讨论】:

    • 好的,这是一个想法,谢谢。有什么建议将它包含在我的 git 存储库中,以便在每次 git pull 时下载 data(如果可能的话,在每次 git push 或任何脚本时更新)?
    • @Nilexys 获取工件意味着运行基于pom.xml 的 maven 命令(文本文件在您的 git 存储库中进行版本控制)。您可以添加一个涂抹脚本(如stackoverflow.com/a/25217391/6309),以便该脚本将检出的 pom.xml 内容与私有副本进行比较:如果该内容已更改,它将运行 maven 命令(如@987654324 @)。如果没有检测到变化,它什么也不做。
    • 在深入研究 Maven 和 Nexus 之后,考虑到我是这些项目的唯一开发人员,它似乎比我需要的要复杂一些。
    • @Nilexys 当然,那么 git-annex 可能更合适。
    【解决方案2】:

    可以使用git-annex 找到另一个解决方案(供读者使用),该解决方案旨在管理繁重的内容,但是:
    - 需要更多的命令和管理
    - 似乎可能不允许删除文件,因为它们没有被复制到某个地方(不是我想要的)

    但作为 git 的扩展,它可以非常方便地用于很多用途。

    【讨论】:

    【解决方案3】:

    我的最终解决方案不保留历史记录(但我可以稍后在附件文件中这样做),但非常简单和高效,带有小巧但简单可靠的rsync。我只是在我的本地计算机上拥有与服务器同名的网站。

    这是我添加的.bashrc 的一部分:

    upload() {
    local var=`basename $PWD`
    rsync -az --del --progress -e ssh ~/www/$var/files/ admin@domain:/var/www/$var/files/
    }
    
    deploy() {
    upload
    git push
    }
    

    它非常适合我个人使用,它是我网页的一个孤独的手势。

    但是我阅读了很多关于 Nexus 的信息,并且我会记住它以用于更大的项目。

    对于读者:您有很多针对中型项目的解决方案,例如git-annex git-fat git-media git-annex git-data...您没有更多的借口不正确处理您的大文件!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-12
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2013-07-13
      相关资源
      最近更新 更多