git - 如何检查所有 git-lfs 跟踪和提交的文件都是指针?

标签 git continuous-integration pull-request git-lfs

由于 git-lfs 需要一些手动设置(安装 git-lfs,运行 git lfs install 一次),这可能导致开发人员无法正确提交 git-lfs 跟踪的文件类型。我想在我们的持续集成系统上检查 pull 请求。

如何检查所有 git-lfs 跟踪和提交的文件都是指针? There is a check这是运行例如当 rebase 时,但这不能作为 cli 命令使用。

我想要这样的东西:

$ git clone https://...
$ [git lfs check-for-pointers]
Encountered 35 file(s) that should have been pointers, but weren't:
    file1.png
    ...

最佳答案

Git LFS 没有办法在本地执行此操作,但如果您希望获得支持,可以在 GitHub 存储库上提出问题。同时,您可以使用如下技术实现此目的:

git ls-files | git check-attr --stdin filter | \
awk -F': ' '$3 ~ /lfs/ { print $1}' | \
xargs -L1 sh -c 'git cat-file blob "HEAD:$0" | \
    git lfs pointer --check --stdin || { echo "$0"; false; }'

如果此命令产生任何输出,则存在无效指针文件,它应该打印出它是哪个文件。如果一切正常,它也会退出零,如果文件损坏,它也会退出非零。

这确实有一个限制,即它不处理其中包含冒号空格或换行符的文件名;如果这很重要,你将不得不使用 -z选项并通过 perl 运行或 ruby而不是 awk .

关于git - 如何检查所有 git-lfs 跟踪和提交的文件都是指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47072267/

相关文章:

exception - GitHub API : create pull-request that already exists should not throw exception

git - 将大型 SVN 存储库迁移到 git

git - 为什么我只是将文件添加到暂存区,Git 会将文件存储在存储库中?

java - 通过 Jenkins 在 Android Gradle 中设置构建属性

tfs - 向 Team Foundation Server 添加提交后/ checkin Hook ?

javascript - 仅在 Jenkins 上运行 Cucumber 的 javascript 表单超时

Git:来自同一分支的新 pull 请求仍然显示以前的提交

linux - Windows 上区分大小写的问题

git - github是否在历史记录中保留已删除的远程分支?如果是这样,这些可以恢复吗?

git - 从 git push 远程响应中提取 url