使用DVC管理大文件变更历史(基于git)

DVC(Data Version Control) 是一个专门用于管理数据和二进制文件版本控制 的工具,它特别适合那些需要处理大量非文本文件(如图像、视频、模型、数据集等)的项目。

一般地,如果项目中有大文件或者二进制文件,我们会用LFS。DVC 和 Git LFS 都是用于处理大文件和二进制文件的工具,但它们的设计目标、使用场景和功能有显著差异 。

Git LFS 是 Git 的一个扩展,对 Git 用户来说上手更容易。

对于几十 MB 到几百 MB 的文件,LFS 表现良好。如果文件太大(比如 GB 级别),DVC 通常更高效。

但不像 Git LFS 那样仅限于 GitHub 或 GitLab,DVC 更加开放和灵活。可以直接对接 S3、GCS、Azure、SSH 等,非常适合云端开发和协作。

通常LFS就足够了。如果需要追踪数据与脚本的关系、想把数据放在云上、更精细的版本控制可以考虑切换到 DVC。

安装

通过命令 brew install dvc安装。

有些地方说要用pip3 install dvc,我试了试不行。

然后用dvc --version验证一下是否可用了。

例子

创建项目目录并初始化:

bash 复制代码
mkdir my-dvc-project
cd my-dvc-project
git init
dvc init

会看到 .dvc 目录和 .gitignore 文件被创建了。

.dvc目录和.git目录一样,会记录每次提交的快照等信息,.gitignore文件是必须要有的,因为DVC会把自己跟踪的文件加入git的忽略列表。

接下来准备一个数据文件:

bash 复制代码
echo "name,age" > data.csv
echo "Alice,30" >> data.csv
echo "Bob,25" >> data.csv
echo "Charlie,35" >> data.csv

dvc add data.csv来跟踪到DVC,这样会生成一个 data.csv.dvc 文件,记录文件的哈希值,而不是实际文件内容:

把这个文件提交到git:

bash 复制代码
git add data.csv.dvc .gitignore
git commit -m "Add data file with DVC"

注意:data.csv 不会被提交到 Git,只会在本地缓存或远程存储中保存。

如果要更新文件的内容,使用dvc pull。比如git切换了分支或checkout,就需要更新DVC跟踪的内容:

每次提交变更,.dvc都会记录完整的文件快照,所以变更了几次,文件还是挺占地方的。这时候就需要放到云上的,也方便合作者下拉文件。例如 AWS S3:

bash 复制代码
dvc remote add -d myremote s3://mybucket/myproject
dvc push

合作者设置好remote就可以pull下来了。

相关推荐
解道Jdon1 小时前
JDK 27发布:紧凑对象头、G1默认、量子安全TLS
ide·windows·git·svn·eclipse·github·visual studio
天天喝旺仔4 小时前
Git 内部原理深度解析:从 blob/tree/commit 对象到 packfile 与垃圾回收
数据结构·数据库·git·算法·哈希
艾莉丝努力练剑4 小时前
【Git:综合复盘】Git 原理与使用
大数据·人工智能·git·elasticsearch·面试
ShineWinsu1 天前
对于Git:远程操作的超详细保姆级解析
linux·git·gitee·github·远程仓库·分布式版本控制系统·远程操作
梦帮科技1 天前
从 Guest 到 Platinum:Prompt 配额、API Key 与访问控制的安全闭环
javascript·git·架构·node.js·reactjs·html5·visual studio
zho_uzhou2 天前
Git入门概念
git
爱奥尼欧2 天前
【Git】远程分支删了本地还在、两个分支历史不相干?两招故障排解
开发语言·git
Java后端的Ai之路2 天前
Git冲突完整排查与实战:本地修改覆盖报错到成功推送全流程复盘
开发语言·人工智能·git·python·pop
一个心烑2 天前
配置项目git的 SSL 证书
git·网络协议·ssl
IT从业者张某某2 天前
【鸿蒙PC命令行适配】GitUI 移植的工程实践:双 Git 引擎(libgit2/gitoxide)的鸿蒙适配之路
git·华为·harmonyos