我有一个包含数千个垃圾二进制文件提交的repo。我正在使用git扩展插件来定位大文件及其提交。我们正在使用git flow与PR,仅用于开发和掌握。我想确认这是/将是清理此回购的最佳方式。
git reset --hard
git pull develop
git checkout -b CleanUpRepo
运行这个插件,它或多或少是一个很好的git过滤器分支(它的指令是重置的,选择要删除的文件,强制推送)一旦清理完成,我就提交更改
git add .
git commit -m "removed a ton of files"
git push -f
现在我应该有一个像样的起源分支,我可以通过公关来开发和掌握分支?这是正确的方法吗?我假设这会正确地重写历史?我们有大量的流氓起源分支,随着时间的推移,人们已经从大师那里分支出来了。我对git的理解还不够深入,不能对此充满信心。我检查了这个插件做了什么,它似乎做了以下事情(我假设参数是散列或文件名等),更专注于命令:
"{0}\" filter-branch --index-filter \"git rm -r -f --cached --ignore-unmatch {1}\" --prune-empty -- --all"
for /f %%a IN ('\"{0}\" for-each-ref --format=%%^(refname^)
refs/original/') DO \"{0}\" update-ref -d %%a",
\"{0}\" reflog expire --expire=now --all",
"\"{0}\" gc --aggressive --prune=now",
发布于 2019-08-18 15:49:38
您必须获得一次性许可,才能推送到master并覆盖整个repo。这将推送所有标签的新版本,它将更改repo的所有用户的分支指针(并随后中断所有分支和未完成的拉取请求。
拉取请求将特定分支从一个存储库拉入到另一个存储库中,但不会清理现有分支中的数据。此外,它还会尝试将内容合并到旧的分支中,从而造成混乱。如果您选择rebase而不是merge,则拉取请求将被阻止,因为PR不能基于当前head进行重新设置。
根据托管平台的不同,您删除的所有提交仍将存在于远程repo中,因为它们不会从远程服务器(例如Azure Repos )中删除。解决这个问题的唯一方法是删除/重命名存储库,然后将清理后的内容推入新的存储库。
在过去,我使用BFG Repo Cleaner来处理这些情况。这听起来比你用过的工具更友好。
https://stackoverflow.com/questions/57538872
复制相似问题