我有一个 git 存储库,我在其中定义了设置数据库的工作流程(脚本 + 文档):从数据下载到数据格式到数据出版物。
由于下载阶段,我有一组 (JSON) 文件,总计约 150MB(我可以将其压缩为约 40MB 的 tarball)。然后这些文件在管道上移动,最终构建一个数据库集合。
这是我的问题:我想包括的结果下载在我的存储库中一起分阶段,但我不需要这些数据文件由 git 进行版本控制。换句话说,我不需要diff
将来更新这些文件时使用 Git —— 希望我永远不会使用这些文件,但如果我用到了,我只需要最新版本,而不必关心它们的历史记录。
那可能吗?
“我为什么想这么做?”-- 假设下载的文件从一次提交到另一次提交完全改变,旧版本会毫无理由地保留在历史记录中占用空间,因为我只关心最新版本;这就是我选择这条路线的原因。这有意义吗?
干杯。
答案1
不是。Git 历史记录不是基于文件的(如 SVN 或 Hg)——它是基于提交的,每个提交 ID 都是整个“工作树”(即当时跟踪的所有文件)的不可变快照。仅跟踪最新版本意味着每次进行新提交时都要重建上一个提交,这将是乐趣分支和合并。
然而,许多拥有大量资产的存储库使用附加组件,例如git-annex 或 Git-LFS 不会首先跟踪 Git 中的文件 - 它们只会让 Git 跟踪指向外部存储的指针。这些插件通常可以选择丢弃最近提交中未使用的对象。
但是,用户始终需要安装插件才能检索大型文件。(工作树所需的文件要么在签出时从指定服务器下载,要么使用类似命令git annex {get,drop}
按需执行。)
答案2
您可以使用git LFS(大文件支持)就是这样的。您的用例正是为此而设计的。