War*_*tto 45 git configuration blob gitignore large-files
我正在尝试实施Git来管理创意资产(Photoshop,Illustrator,Maya等),我想根据文件大小而不是扩展名,位置等从Git中排除文件.
例如,我不想排除所有.avi文件,但在随机目录中有一些大量的+ 1GB avi文件,我不想提交.
有什么建议?
小智 41
我是.gitignore的新手,所以可能有更好的方法来做到这一点,但我一直在使用以下文件大小排除文件:
find . -size +1G | cat >> .gitignore
Run Code Online (Sandbox Code Playgroud)
显然,如果要生成大量大文件,则必须经常运行此代码.
use*_*745 15
要满足 github <100MB 文件限制,请运行以下命令:
find . -size +100M | cat >> .gitignore
Run Code Online (Sandbox Code Playgroud)
尽管文件大小非常大,并且以下内容根本不是问题,并且只要@abendine 答案正确,根据:https ://stackoverflow.com/a/22057427/6466510
find * -size +1G | cat >> .gitignore
Run Code Online (Sandbox Code Playgroud)
会好得多。也看看这个:find 之间的区别。并找到*在UNIX事实证明,更换.与*此之上,避免在物质中找到.git的目录。
我也想提供一个 Windows 版本。
forfiles /s /c "cmd /q /c if @fsize GTR 1073741824 echo @relpath" >> .gitignore
Run Code Online (Sandbox Code Playgroud)
(2020 年 5 月更新)
Microsoft 不久前发布了开源的 Git-LFS。也许这就是大多数人真正正在寻找的:
https://git-lfs.github.com/ 项目页面的 C&P:“Git Large File Storage (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
Run Code Online (Sandbox Code Playgroud)
这是相当蛮力的,缺点是如果 git hook 添加了新的大文件,原始提交会失败,因为状态(哈希)发生了变化。因此,您需要执行另一次提交来实际提交您已暂存的内容。将此视为一个功能,告诉您检测到新的大文件;-)
| 归档时间: |
|
| 查看次数: |
12305 次 |
| 最近记录: |