DataLad 是 Git 与 git-annex 之上的数据管理层。Git 跟踪数据集结构、小型文本文件与历史;git-annex 跟踪大文件内容,把每个文件存为 key,字节存放在未必位于本地仓库的位置。普通 clone 只取回 Git 历史与顶层文件清单,不下载 annex 内容,需用 datalad get 按需获取。它另一项能力是溯源:datalad run 执行命令并把结果连同命令、输入、输出的机器可读记录一并提交,datalad rerun 读回该记录重新执行。
适用场景:文件过大或总体超出协作者磁盘容量;数据分布在多台服务器、集群、S3 等位置且需知道存在哪些副本;分析须可重新执行;消费 OpenNeuro、DANDI 或 datasets.datalad.org 发布的 DataLad 数据集;项目内嵌套其他数据集且各自保留独立历史。纯代码与文本仓库用普通 Git 即可。
安装:先安装 git-annex,可用 uv pip install git-annex,或系统包 apt install git-annex、brew install git-annex;随后 uv pip install "datalad==1.6.5",容器功能需 uv pip install "datalad-container==1.2.6"。用 datalad wtf --section dependencies 确认 git-annex 版本可见。创建或保存数据集前先配置 Git 作者名与邮箱。
常用方式:datalad clone、datalad get <path>、datalad get -r .、datalad get -n -r .、datalad status --annex availability、git annex whereis、datalad save、datalad create、datalad run、datalad rerun、datalad push、datalad drop。run 需用 --input 获取并记录依赖,用 --output 先解锁或移除目标再写入;run 遇到未保存修改会拒绝启动,可用 --explicit,并可用 --dry-run basic 预检。
限制:run 记录命令与数据集状态,但不冻结主机软件或外部服务,需自行版本化环境锁文件或使用 containers-run;whereis 读取已记录状态,不实时联系远端;推送需正确配置 Git sibling 与 git-annex 特殊远端及 --publish-depends,否则他人 clone 后 get 会失败;子数据集默认不安装;drop 默认检查必需副本。DataLad 为 MIT 许可,git-annex 另有 AGPL 许可。