我正在尝试实施 Git 来管理创意资产(Photoshop、Illustrator、Maya 等),并且我想根据文件大小而不是扩展名、位置等从 Git 中排除文件。
例如,我不想排除所有 .avi 文件,但是我不想提交的随机目录中有少量 +1GB 的大量 avi 文件。
有什么建议么?
我正在尝试实施 Git 来管理创意资产(Photoshop、Illustrator、Maya 等),并且我想根据文件大小而不是扩展名、位置等从 Git 中排除文件。
例如,我不想排除所有 .avi 文件,但是我不想提交的随机目录中有少量 +1GB 的大量 avi 文件。
有什么建议么?
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.
尽管文件大小非常大,并且以下内容根本不应该成为问题,并且只要@abendine 的答案是正确的,根据:https ://stackoverflow.com/a/22057427/6466510
find * -size +1G | cat >> .gitignore
它会好得多。也看看这个:find 之间的区别。并在 unix 中查找 *事实证明,用上面的此处替换.
,*
避免在.git
目录中查找内容。
要满足 github 的 <100MB 文件限制,请运行以下命令:
find . -size +100M | cat >> .gitignore
我还想提供一个 Windows 版本。
forfiles /s /c "cmd /q /c if @fsize GTR 1073741824 echo @relpath" >> .gitignore
(2020 年 5 月更新)
微软前段时间将 Git-LFS 作为开源发布。这可能是大多数人真正在寻找的东西:
https://git-lfs.github.com/ 来自项目页面的 C&P:“Git 大文件存储(LFS)在 Git 内部用文本指针替换音频样本、视频、数据集和图形等大文件,同时存储文件GitHub.com 或 GitHub Enterprise 等远程服务器上的内容。”
我想在所有这些答案中补充一点,您也可以使用 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 钩子添加了新的大文件,原始提交会因为状态(哈希)改变而失败。所以你需要执行另一个提交来实际提交你已经暂存的内容。将此视为一项功能,告诉您检测到新的大文件;-)