我的 repo 是从一个开源项目中派生出来的,所以我不想在 ForkPoint 标记之前修改提交。我已经尝试过BFG Repo Cleaner,但它不允许我指定范围。
我想要
- 穿越历史
ForkPoint..HEAD^
- 重写提交以删除所有大于 10M 的文件
如何从 git 存储库中删除未使用的对象?说应该是这样的
BADFILES=$(find . -type f -size +10M -exec echo -n "'{}' " \;)
git filter-branch --index-filter \
"git rm -rf --cached --ignore-unmatch $BADFILES" ForkPoint..HEAD^
但BADFILES
不仅包含存在于HEAD
?
例如,如果我错误地提交了一个HUGE_FILE
然后又提交了另一个删除该文件的提交,则BADFILES
搜索将找不到,HUGE_FILE
因为find
在当前工作树中看不到它。
Edit1:现在我正在考虑在克隆上使用 BFG,然后将我的叉子移到原始的 ForkPoint 上。fatRepo
这会是正确的命令slimRepo
吗?
mkdir merger ; cd merger ; git init
git remote add fat ../fatRepo
git remote add slim ../slimRepo
git fetch --all
git checkout fat/ForkPoint
git cherry-pick slim/ForkPoint..slim/branchHead
Edit2:樱桃采摘不起作用,因为樱桃采摘无法处理 slimRepo 中的合并。我可以以某种方式粉碎 slimRepo 的历史,并简单地合并到 fatRepo/ForkPoint 上吗?
git <turn into a single commit> slim/rootNode..slim/ForkPoint
git checkout fat/ForkPoint
git merge slim/branchHead