所以我C#在bitbucket上有这个两年前的回购.它.gitignore直到昨天才有 - 我知道,迟到了.
这是一个个人项目.
我可以使用.gitignore作为基础清洁回购.那么工人会有效地删除那些.gitignore不应该存在的东西吗?
注意:首先你最好备份你的git存储库,因为它总是会出错(确切的行为
git可能取决于所有类型的设置/ ...所以它不能完全预测过程的结果是什么将是,所以更安全而不是抱歉).将目录复制到其他位置就足够了:该目录中有一个(隐藏).git目录,其中包含历史记录,标记等.
如果您只想删除新提交的内容,那么您不关心存储在文件系统历史记录中的文件,可以使用以下命令删除它们:
git rm --cached -r .
git add .
Run Code Online (Sandbox Code Playgroud)
rm --cached -r .意味着您要从git存储库中删除所有内容,但将文件保留在文件系统中.你以递归方式执行此操作,因此任何文件都不再是存储库的一部分.接下来,将所有文件再次添加到存储库,但随后该.gitignore文件将不会重新添加应忽略的文件.
如果你想从以前的所有提交中删除这些文件,我建议使用bash脚本.它可能不是最有效的.
现在我们可以做的是列出至少应该被忽略的所有文件:
git ls-files --exclude-standard --others --directory --ignored
Run Code Online (Sandbox Code Playgroud)
我首先检查列表并检查是否没有应该保留的文件.相应地更新,.gitignore如果这些文件都不再出现,则只进入下一步.
如果要保留在存储库中的列表中没有其他文件,则可以运行此脚本:
#!/bin/bash
for f in `git ls-files --exclude-standard --others --directory --ignored`
do
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch '$f'" --prune-empty --tag-name-filter cat -- --all
done
Run Code Online (Sandbox Code Playgroud)
该脚本在历史记录中至少迭代一次要忽略的文件,并通过所有提交对文件进行过滤.请注意,不会从文件系统中删除这些文件.但是你会失去这些文件的历史.
此外,标准.gitignores(例如可以在GitHub上找到)必须要小心,因为我听说运行Windows的文件系统上的白/黑名单之间存在差异.
这是可能的一些提交会消失,因为在这些提交的唯一差别涉及到的仓库不再一部分文件.例如,如果您忽略*.log文件并且日志包含日期; 只有该file.log文件被修改.如果删除该文件,则也将删除修改文件的提交.
| 归档时间: |
|
| 查看次数: |
1027 次 |
| 最近记录: |