要删除我的存储库历史记录中不是“my_dir/”的所有内容,我使用了:
git filter-branch --prune-empty --subdirectory-filter my_dir/ --prune-empty --tag-name-filter cat -- --all
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d;
git reflog expire --expire=now --all;
git gc --prune=now;
Run Code Online (Sandbox Code Playgroud)
现在,使用:
git log
Run Code Online (Sandbox Code Playgroud)
一切看起来都很好:日志仅显示包含“my_dir”中文件的提交。
但:
git log --all
Run Code Online (Sandbox Code Playgroud)
仍然显示一切。事实上,执行另一个过滤分支(以删除 my_dir 中的一些其他 .pyc 文件)将找到(并删除)旧目录中的所有 .pyc 文件。
看来 --subdirectory-filter 并没有真正删除提交......它们仍然存在。
我缺少什么?
编辑:
子目录过滤器“仅查看涉及给定子目录的历史记录”。所以也许它不会删除所有其他提交,而只是重写那些触及该目录的提交,并以某种方式为其他提交留下“孤儿”???
一个小表(700行)上的一个非常简单的删除(通过键),然后保持"在事务中空闲"几分钟(通常需要毫秒),即使所有锁被标记为"已授予".
我该怎么做才能找出导致它的原因?我正在使用这个选择:
SELECT a.datname,
c.relname,
l.transactionid,
l.mode,
l.GRANTED,
a.usename,
a.waiting,
a.query,
a.query_start,
age(now(), a.query_start) AS "age",
a.pid
FROM pg_stat_activity a
JOIN pg_locks l ON l.pid = a.pid
JOIN pg_class c ON c.oid = l.relation
ORDER BY a.query_start;
Run Code Online (Sandbox Code Playgroud)
它显示了很多"RowExclusiveLock",但都被批准了...所以我看不出是什么导致了这种延迟的峰值.