2016-03-02 3 views
7

Основываясь на этом article, я создал небольшой скрипт, который должен удалить все вхождения файла во всем git repo, всех ветвях, тегах и коммитах. Сценарий:удалить файл из всех git history

#!/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); 

Этот скрипт работал на нескольких РЕПО (которые являются частными) и на определенном одном он сохранил первоначальное обязательство файла, который я пытался удалить. После запуска сценария я сделал это git log --all -- .npmrc и нашел начальную фиксацию. Что мне не хватает?

+1

sidenote: checkout [BFG, более простая и быстрая альтернатива git-filter-branch] (http://rtyley.github.io/bfg-repo-cleaner) – laggingreflex

+0

попробовал bfg, он работает локально, но не обновляет удаленный – qballer

+0

@qballer, затем принудительно нажмите ваши изменения на пульте дистанционного управления? – Chris

ответ

5

Я думаю, что произошло то, что вы забыли сказать другим пользователям этого репо не слияния их изменения в новой истории, а скорее перебазироваться. Из документа вы цитируемый:

Расскажите свои соавтор перебазироваться, не сливается, какие ветви они , созданные с вашими старыми (испорченными) историями репозитория. Одно объединение слиянием может повторно ввести какую-то или всю испорченную историю, которую вы только пошли на проблему очистки.

Повторите попытку с тем же сценарием и убедитесь, что никто не вводит новую историю путем слияния локальных изменений с новой головой.

+0

, хотя кажется, что вы правы, я понятия не имею, как это разрешить. – qballer

+0

отредактировал мой ответ –

+0

Спасибо, что все решено. – qballer

Смежные вопросы