需要安全地从GitLab中删除损坏的文件

时间:2016-02-25 19:50:11

标签: git gitlab atlassian-sourcetree

在我们公司,我们有一个定制的GitLab设置,在本地托管,由一个不再与公司合作的人建立。在我们有一个名为<div class="contain pr">的开发人员创建的文件之前,我们从未遇到过任何问题。我们使用Source Tree与Git进行交互,现在,只要有人使这个特定的存储库处于活动状态,这个文件名就会导致Source Tree崩溃。我需要从已完成的历史记录中删除错误的文件名。我还需要备份Git和GitLab的所有必要部分,以防我搞砸了。我在命令行上感觉不舒服,但我怀疑这是我必须去的地方。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用git filter-branch --tree-filter

git filter-branch --tree-filter 'mv "<div class=\"contain pr\">" some_safe_name ||:' <all branches where the problematic files exists>

您可以避免使用git filter-branch --index-filter在文件系统中创建文件,因此,即使在MS Windows中也可以运行以下命令:

git filter-branch --index-filter 'git rm --cached "<div class=\"contain pr\">"  ||:' master

但请注意,此命令只会删除&#34; bad&#34;来自整个master分支中的树的文件。如果您需要保留其内容(是吗?),则必须使用调用git ls-files -sgit update-index的脚本。

你可以重写所有分支机构,它是安全的,没有&#34;坏分支机构的分支机构。文件不会受到影响。但是,通过精确的分支规范,转换速度会更快,这对于大型存储库来说非常重要,尤其是在MS Windows中。

操作完成后,您可以检查结果,如果一切正常,您可以删除原始参考 rm -rf .git/refs/original

如果出现任何问题,您可以通过将.git/refs/original中的原始参考文件移动到.git/refs/heads.git/refs/remotes中的对应文件,从而始终从头开始重新启动。

如果您有任何受更改影响的签名标签,可能需要在更改后重新创建。

此外,您需要让所有同事在转换完成后重新获取整个存储库并完全删除原始引用。