71

我正在尝试实施 Git 来管理创意资产(Photoshop、Illustrator、Maya 等),并且我想根据文件大小而不是扩展名、位置等从 Git 中排除文件。

例如,我不想排除所有 .avi 文件,但是我不想提交的随机目录中有少量 +1GB 的大量 avi 文件。

有什么建议么?

4

6 回答 6

72

I'm new to .gitignore, so there may be better ways to do this, but I've been excluding files by file size using:

find . -size +1G | cat >> .gitignore

Obviously you'll have to run this code frequently if you're generating a lot of large files.

于 2011-03-04T23:07:34.227 回答
11

尽管文件大小非常大,并且以下内容根本不应该成为问题,并且只要@abendine 的答案是正确的,根据:https ://stackoverflow.com/a/22057427/6466510

find * -size +1G | cat >> .gitignore

它会好得多。也看看这个:find 之间的区别。并在 unix 中查找 *事实证明,用上面的此处替换.*避免在.git目录中查找内容。

于 2020-06-09T22:26:44.267 回答
8

要满足 github 的 <100MB 文件限制,请运行以下命令:

find . -size +100M | cat >> .gitignore
于 2020-07-12T06:28:15.473 回答
6

我还想提供一个 Windows 版本。

forfiles /s /c "cmd /q /c if @fsize GTR 1073741824 echo @relpath" >> .gitignore
于 2019-10-03T00:27:02.613 回答
4

(2020 年 5 月更新)

微软前段时间将 Git-LFS 作为开源发布。这可能是大多数人真正在寻找的东西:

https://git-lfs.github.com/ 来自项目页面的 C&P:“Git 大文件存储(LFS)在 Git 内部用文本指针替换音频样本、视频、数据集和图形等大文件,同时存储文件GitHub.com 或 GitHub Enterprise 等远程服务器上的内容。”

于 2020-05-18T06:07:26.190 回答
0

我想在所有这些答案中补充一点,您也可以使用 git hook 来获得更自动化(或更少人为错误)的东西,如下所示:

cat .git/hooks/pre-commit

#!/bin/bash

echo "automatically ignoring large files"
find . -size 5M | sed 's|^\./||g' >> .gitignore
cat .gitignore | sort | uniq > .gitignore

git diff --exit-code .gitignore
exit_status=$?
if [ $exit_status -eq 1 ]
then
    set +e
    for i in `cat .gitignore`
    do
    set +e
        git rm --cached $i
    done

    git add .gitignore
    git commit .gitignore --no-verify -m"ignoring large files"

    echo "ignored new large files"
fi

这是相当蛮力的,缺点是如果 git 钩子添加了新的大文件,原始提交会因为状态(哈希)改变而失败。所以你需要执行另一个提交来实际提交你已经暂存的内容。将此视为一项功能,告诉您检测到新的大文件;-)

于 2022-01-23T17:36:47.380 回答