Я пытался удалить пару строк из файла в моей истории, содержащий секретный токен API и некоторую конечную точку, которые лучше передаются как переменные окружения, чем hardcoded там, поэтому если я когда-нибудь сделаю публикацию репо, они не будут там для нескромных глаз.BFG удаляет чувствительный контент повсюду, но в предпоследнем фиксации
Я использовал для этой цели удивительный инструмент, который является очистителем репозитория BFG, который я также использовал в прошлом, чтобы удалить целые остаточные и чувствительные файлы из моей истории git. На этот раз следующий the instructions заменить текст:
$ java -jar ~/bfg.jar --replace-text tokens.txt myRepo.git
Но на выходе, это появилось:
...
* commit 10134503 (protected by 'HEAD') - contains 1 dirty file :
- app.py (640 B)
...
If you *really* want this content gone, make a manual commit that removes it,
and then run the BFG on a fresh copy of your repo.
Так что я сделал именно это, клонируют все это, сделал совершить замену двух линий, которые я хотел ушел за 2 звонка на os.environ[]
на python и нажал его. Затем я снова побежал BFG, git reflog
, и все, казалось, работало как шарм.
Я проверил в gitlab-х совершившим браузер, и текст был ***REMOVED***
везде но в предпоследний коммит, где это произошло:
Я предполагаю, что это произошло потому, что файл редактируется в следующем commit (теперь тот, который защищен «HEAD»), и GIT нуждаются в этих токенах, чтобы воссоздать изменения, которые я сделал, чтобы избавиться от этих двух строк. Но тогда, как мне это достичь?
Это не проблема Git. Это звучит как ошибка в BFG. Если вы сделаете фиксацию, состоящую только из *, чтобы заменить ненужные токены, а BFG заменяет ненужные токены в фиксации непосредственно перед этим новым фиксацией, вы получаете две идентичные фиксации. Git обрабатывает это просто отлично (вызывая второй «пустой» фиксатор, но он не пуст, он просто идентичен исходному дереву с предшествующим фиксацией). – torek