Презаписване на историята на хранилището на Git, например, за редактиране на стари корекции, изтриване на ненужни данни (като лични данни или големи файлове), промяна на структурата на файла, поправяне на метаданни и др.

Има много причини да пренапишете историята на Git:

  • Фиксиране на стара фиксация
  • Намаляване на размера на хранилището чрез изтриване на големи файлове, предварително проверени в репо-сделки - те все още заемат дисково пространство, дори ако са премахнати от по-късни съобщения
  • Изтрийте поверителни данни (пароли, идентификационни данни и т.н.), които не бихте искали да използвате при обмен на репо или дори само смяна на репо за външен хостинг доставчик.
  • Преинсталирайте или изтрийте цели папки, за да отразявате разделянето на много подпроекти от едно репо в много или обратно.
Хранилища

Git запазва цялата история на проекта, а дизайнът на Git е неизменен (техните идентификатори се променят напълно, ако поне една малка част от съдържанието им или историята се променят) - как да изтриете ненужните данни, съхранявани дълбоко в хранилищата си?

Инструменти за пренаписване на историята

Промяната на историята в хранилището на Git означава пренаписване на цялата следваща история на запис от тази точка. Налични са няколко инструмента, за да можете да направите това:

  • git commit --amend - за да извърши последния git commit --amend .
  • git rebase да преинсталирате историята на клоновете, като го възпроизведете така, сякаш всичко се основава на друга (често по-нова) точка в историята на хранилището. Използва се с флаг -i , може да се използва за интерактивно пренареждане на историята.
  • git filter-branch е автоматизиран инструмент за пренаписване на много коммити (в много клонове), използвайки един или повече скриптове за извършване на промени, което му дава по-голяма гъвкавост.
  • BFG Repo-Cleaner е алтернатива на git-filter-branch , която осигурява по-голяма скорост и лекота на използване, ограничавайки се до обичайни случаи, използвайки задачата за изтриване на нежелани данни.

Размяна на пренаписана история

Ако хранилището е било разделено преди презаписването, трябва да преместите презаписаната версия на главния сървър, като използвате --force или --mirror , и след това да помолите други потребители да клонират отново хранилището.