Видаляємо випадково закоміченние приватні дані з git сховища, блог боші

Одного разу, працюючи з git репозиторієм ви можете випадково відправити (закомітіть) в репозиторій свої особисті логіни, паролі або SSH ключі. Звичайно, за допомогою git rm можна видалити файл, але файл так само буде присутній в історії. На щастя є утиліти які дозволяють видалити файл з git сховища повністю. В цей статті описано як використовувати BFG Repo-Cleaner і git-filter-branch для повного видалення файлу з git сховища.

Важливо: після того, як файл з приватними даними потрапив в репозиторій, всі дані в ньому можна вважати скомпроментіровалі, і необхідно негайно вжити заходів (поміняти паролі, і т.д.). Немає можливості простежити встиг хто або подивитися або завантажити ці файли.

git-filter-branch

Почати мабуть варто з git-filter-branch. так як ця утиліта є частиною git і не вимагає установки.

Переходимо в директорію з потрібним проектом:

Перше що потрібно зробити - це переконається, що у нас остання версія сховища та немає ніяких локальних змін.

Припустимо, що ми випадково закомітілі в репозиторій файл .environment в якому у нас зберігатися пароль до бази даних. Проект відбувається активна розробка і наспіл тестова база даних, але за звичкою пароль використовували такий же який для входу в систему або ще куди небудь. Знайома ситуація. )

Після того, як ми переконалися що у нас остання версія і відсутні локальні змін, можна видаляти файл:

В результаті виконання цієї команди, в кожному Ком сховища буде видалений файл .environment. Якщо необхідно видалити директорію, то до git rm необхідно додати ключ -f:

Якщо є ще файли які необхідно видалити - виконуєте цю команду для кожного з них.

Важливо. щоб уникнути повторення цієї неприємної ситуації, файл необхідно додати в .gitignore:

Тепер закомітім всі наші зміни:

Якщо використовували теги:

Важливо. після всіх пророблених змін всім іншим хто працював з цим репозиторієм, необхідно зробити rebase. Або видалити свій локальний репозиторій і склоніровать його ще раз. Краще останнім, так як менше шансів вистрілити собі в ногу, особливо якщо в команді є Джуня. )

BFG Repo-Cleaner

BFG Repo-Cleaner - це простіша і легка альтернатива git-filter-branch для видалення небажаних файлів з git сховища. Наприклад, щоб видалити файл .environment як в прикладі з git-filter-branch вище:

Незважаючи на те, що файл і можливо видалити після випадкового коммітов, цього слід уникати. Є кілька простих речей які варто уникати, і навпаки використовувати:

  • Використовувати програми з графічним інтерфейсом для роботи git. Вони наочно показують якісь файли будуть додані в кому. У всіх середовищах розробки як правило є або доповнення, або вбудовані засоби для роботи з git які допомагають уникнути таких помилок. Якщо середовище розробки яку ви використовуєте не має коштів роботи з git, тобто графічні інтерефейса. Я колись писав невеликий огляд графічних інтерфейсів для git;
  • Уникати таких небезпечних команд як git add. git add -A і git commit -a. Замість них додавати окремі файли з git add;
  • Використовувати git add --interactive щоб інтерактивно переглядати і додавати файли;
  • Перед додаванням файлів уважно переглядати якісь файли були змінені і можуть потрапити в комерц git status.

Схожі статті