#git #git-squash
#git #git-squash
Вопрос:
Я случайно зафиксировал пароль в ветке функций и синхронизировал эту ветку с удаленной. Я безуспешно пытался очистить историю фиксации ветки с помощью bfg, а с помощью git-filter-repo у меня возникли другие проблемы.
Теперь я передал файл настроек без пароля в ветку.
Если я объединю функциональную ветку с исходной веткой с помощью слияния в сквош и удалю функциональную ветку, эффективно ли это удалит пароль из всей истории git?
Комментарии:
1. слияние в виде сквоша сохранит только последний коммит в видимой истории, с помощью которого вы также можете удалить файл
git rebase -i
. Не уверен, как git обрабатывает это на сервере, но, вероятно, потребуется некоторое время, пока ваша фиксация пароля не будет собрана мусором, и вы должны считать пароль скомпрометированным в любом случае.2. Слияние в сквош и удаление ветки удалят коммиты из истории репо (и, вероятно, в конечном итоге удалят потерянные коммиты), но если вы используете инструменты на стороне сервера для выполнения этого в запросе на извлечение / слияние, история фиксации этого запроса может быть сохранена. Смотрите Мой ответ для более простого подхода.
3. @ian согласился. Я думаю, что интерактивная перебазировка — это путь сюда.
4. Это публичное репозиторий или частное в вашей организации? Можно ли доверять всем, у кого есть доступ к репозиторию?
Ответ №1:
В конце концов я сделал следующее
- чтобы отменить пароль в целевой системе
- удалите пароль из кода с помощью нового коммита
- добавление в комментарии, что ранее просмотренный пароль был изменен
Лучше не лениться со своими ошибками, а предпринять шаги по смене пароля.
Ответ №2:
Похоже, что пока пароль находится только в вашей локальной ветке функций и в ветке удаленных функций. Самый простой способ удалить его — избавиться от него локально, а затем принудительно удалить его обратно. Используйте изменение или интерактивную перебазировку, чтобы переписать коммит локально без пароля, а затем принудительно удалить вашу ветку. На этом этапе фиксация будет оставаться скрытой на сервере до тех пор, пока не будет собран мусор, а время, которое требуется, зависит от сервера. (У некоторых клиентов git по умолчанию 60 дней, но невозможно узнать, какой у вашего сервера по умолчанию, без дополнительной информации.)
Примечание. если вы уже создали запрос на извлечение / слияние с веткой, которая содержала коммит с паролем, тогда сервер может хранить историю включенных коммитов на неопределенный срок. По этой причине я бы избегал слияния в сквош во время запроса на извлечение / слияние, потому что это может сохранить историю коммитов в течение длительного времени.
Если ваш репозиторий является общедоступным, тогда вы должны предположить, что пароль уже был скомпрометирован, и вы должны немедленно его изменить. На самом деле, это, вероятно, самый безопасный вариант даже в частном репозитории, если только вы не согласны с тем, чтобы им делились ваши сотрудники.
Комментарии:
1. Я бы хотел, чтобы кто-нибудь объяснил DV здесь. Я предполагаю, потому что мой третий абзац не был первым?
Ответ №3:
Сначала давайте перейдем к сути:
Этот пароль был скомпрометирован. У вас нет возможности отследить, куда он мог попасть после того, как вы отправили его на пульт. Вы не можете вернуть этого джинна обратно в бутылку; единственная безопасная вещь, которую можно сделать, это изменить пароль.
Это делает остальную часть обсуждения в основном академической. Либо пароль не будет изменен, и удаление его из истории является недостаточной мерой, либо он будет изменен, и удаление его из истории является косметическим.
Тем не менее, чтобы ответить на ваш прямой вопрос:
Если я объединю функциональную ветку с исходной веткой с помощью слияния в сквош и удалю функциональную ветку, эффективно ли это удалит пароль из всей истории git?
Не совсем. Чтобы полностью удалить данные из вашего локального репозитория, вам нужно будет убедиться, что коммиты, содержащие их, недоступны для всех ссылок, а также для reflog, а затем вам придется принудительно собирать мусор. Чтобы действительно удалить его с удаленного устройства, требуются аналогичные процедуры, но то, как обрабатывается такое ведение домашнего хозяйства, зависит от того, как размещается репозиторий.
И опять же, все это предполагает, что никто еще не извлек ссылку, история которой содержит пароль. Если они это сделали, ничто из того, что вы можете сделать, не заставит их отказаться от него.
Комментарии:
1. Не будет ли reflog, скорее всего, только на компьютере пользователя? (Если это не публичное репозиторий, то кто знает …) Я действую, исходя из предположения, что компьютер пользователя защищен.
2. Кто-то также получил этот ответ? Этот ответ кажется мне совершенно разумным, как и мой ответ. Кто-то должен внести некоторую ясность здесь.