【问题标题】:remove file from all git history从所有 git 历史记录中删除文件
【发布时间】:2016-03-02 19:03:09
【问题描述】:

基于这个article,我创建了一个小脚本,它应该删除整个git repo、所有分支、标签和提交中所有出现的文件。 脚本:

#!/usr/bin/env node
var child_process = require('child_process');
if (process.argv.length < 3){
  console.error('USAGE: git-forget path/to/file')
  process.exit(1);
}
var path = process.argv[2];

var phase = 0;
function printLog(error, stdout, stderr) {
  if (error) {
    console.error('ERROR' + error);
  }
  console.log(++phase);
  console.log(stdout);
}

child_process.execSync('git filter-branch --force --index-filter \'git rm -f --cached --ignore-unmatch  '+ path +'\' --prune-empty --tag-name-filter cat -- --all');
child_process.execSync('echo "' + path + '" >> .gitignore', printLog);
child_process.execSync('git add .gitignore');
child_process.execSync('git commit -m "Add ' + path +' to .gitignore"',printLog)
child_process.execSync('git push origin --force --all',printLog);
child_process.execSync('git push origin --force --tags',printLog);

这个脚本在一些 repos(它们是私有的)上工作,并且在一个特定的 repos 上它保留了对我试图删除的文件的初始提交。脚本运行后,我做了这个git log --all -- .npmrc 并找到了初始提交。我错过了什么?

【问题讨论】:

  • 试过bfg,它在本地工作,但不更新远程
  • @qballer,然后将您的更改强制推送到遥控器?
  • @chris nope,它说一切都是最新的。我认为这与关键文件是在初始提交中引入的事实有关。

标签: node.js git git-rewrite-history


【解决方案1】:

我认为发生的事情是你忘记告诉这个 repo 的其他用户不要合并他们对新历史的更改,而是rebase。 从您引用的文件中:

告诉你的合作者对他们的任何分支进行变基,而不是合并 根据您旧的(受污染的)存储库历史创建。一次合并提交 可能会重新引入您刚刚的部分或全部受污染的历史 去清洗的麻烦。

尝试再次运行相同的脚本,看看没有人通过将他/她的本地更改合并到新头来重新引入旧历史。

【讨论】:

  • 虽然您似乎是对的,但我不知道如何解决这个问题。
猜你喜欢
  • 2012-12-05
  • 2014-06-19
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多