git annex add与git add行为不一致,我的配置哪里有误?
我的git-annex版本:
ii git-annex 8.20210223-2ubuntu2
根据git-annex官方文档说明:
一旦你告诉git-annex哪些文件是大文件,
git annex add和git add/git commit -a都会将大文件添加到annex,小文件添加到git。
我配置了.gitattributes文件:
*.gz annex.largefiles=(largerthan=0) *.tar annex.largefiles=(largerthan=0) *.zip annex.largefiles=(largerthan=0) *.bin annex.largefiles=(largerthan=50mb)
执行git annex add *.gz时,所有文件均转为符号链接;但执行git add *.gz时,文件被复制到.git/annex却未生成符号链接,请问哪里操作或配置错误?
核心原因
你的git-annex版本(8.20210223)属于较旧版本,文档描述的git add自动将大文件转为annex符号链接的行为,依赖git-annex的Git钩子生效。如果钩子未安装或未正确触发,就会出现文件被复制到.git/annex但未生成符号链接的情况。另外,旧版本中git add本身不会即时生成符号链接,而是需要配合git commit触发钩子完成最终转换。
解决步骤
确保Git钩子已安装
执行git annex init(已初始化的仓库执行此命令不会破坏现有内容,仅会补全缺失的钩子文件)。该命令会在.git/hooks目录下生成pre-commit等钩子脚本,让Git提交流程能识别annex的大文件规则。按完整流程操作
执行git add *.gz后,必须执行git commit -m "提交gz文件",此时pre-commit钩子会自动将已添加的文件替换为annex符号链接,并提交符号链接到Git仓库。验证钩子有效性
检查.git/hooks/pre-commit文件是否存在,且内容包含git-annex的处理逻辑。如果钩子存在但不生效,执行git annex upgrade升级仓库的钩子配置,适配当前版本的annex规则。简化规则语法(可选)
你的.gitattributes中(largerthan=0)的括号是多余的,可简化为*.gz annex.largefiles=largerthan=0,不过这不是导致当前问题的原因(git annex add能正常工作已证明规则有效)。
内容的提问来源于stack exchange,提问作者Wang

