Удалить историю всего каталога репозитория или удалить коммиты с данным сообщением в Git - PullRequest
1 голос
/ 04 мая 2020

У меня есть Git репозиторий с довольно длинной историей. Один из каталогов в хранилище отслеживается, но состоит из сгенерированного содержимого. Размер репозитория становится проблемой, и это связано с изменениями в сгенерированном каталоге, которые можно извлечь из другого содержимого репозитория (он отслеживается только из-за определенных инструментальных ограничений). Это означает, что история этого отдельного каталога, в частности, не очень важна, но для остальной части хранилища это так.

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

Какой из этих двух подходов выполним в Git? И если оба, что может быть лучше? Есть ли какие-то подходы, которые мне не хватает? У меня ограниченный опыт внесения поправок в историю репо Git, обычно для исправления сообщений коммитов или уничтожения доказательств существования определенных файлов, таких как секреты и ключи. Я хочу проинформировать себя, прежде чем освободить sh такое крупномасштабное изменение в репозитории.

Не думаю, что мне нужно добавлять это, но на всякий случай: репозиторий размещен на GitHub, и я предположим, что я могу просто принудительно принудительно сделать pu-101 * на GitHub после внесения изменений, чтобы убедиться, что история на GitHub обновляется таким же образом. Я не ожидаю, что есть какие-то изменения, которые я мог бы внести, которые бы работали локально, но не могли быть перенесены на конкретный GitHub как удаленный, но если они есть, я бы хотел узнать о них.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

BFG Repo Cleaner

  1. Загрузка BFG Repo Cleaner
  2. bfg --delete-folders path/to/your/content my-repo.git

Git фильтр-ветвь

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch path/to/your/content" \
  --prune-empty --tag-name-filter cat -- --all

Вам нужно будет сделать принудительную пу sh, как только вы будете готовы сбросить любые источники.

0 голосов
/ 04 мая 2020

git работает путем создания моментального снимка всего дерева каталогов, отслеживаемого git.

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

Мы сделали это несколько лет назад как часть перемещения файлов, чтобы соответствовать структуре Maven и чтобы история оставалась в файлах, но это была нетривиальная задача.

Возможно, вы захотите достичь подходящей контрольной точки, а затем просто запустите новый репозиторий с вашими текущими файлами и оставьте старый репозиторий для справки для тех, кому это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...