是否可以在肮脏的工作目录中使用git filter-branch?

时间:2019-07-01 18:35:15

标签: git git-filter-branch

出于无法控制的原因,我正在使用包含许多相似内容的副本的存储库(小型OS)。这意味着虽然回购规模很小,但工作目录需要花费多个小时才能在我的系统上签出。

正在执行的特定任务是执行git replace --graft以连接线性历史记录,然后执行git filter-branch --tag-filter cat -- master以使更改永久生效。

我的问题是筛选器分支需要一个干净的工作副本(例如由git checkout .或标准git clone <URL>生成)。这将运行时间增加到几个小时,这是不希望的。有更快的方法吗?实际的重写大约需要30秒(所有blob都保持不变,只是指针改变了)。

2 个答案:

答案 0 :(得分:1)

一些想法。

1)存储本地更改,然后在完成后将其弹出。

2)创建一个新克隆,但使用git clone --reference加快克隆速度。

答案 1 :(得分:1)

您可以创建一个裸克隆并在那里进行所有过滤:

git clone --bare source bare
cd bare
git filter-branch master   # this is a no-op here, but you get the idea