1. Описание проблемы
Предположим, у меня есть следующий проект foo :
Проект foo клонирован из хранилище GitHub, которое у меня есть, и проверено в основной ветке. Подпапки bar и baz содержат чистый исходный код. Подпапка tools содержит программное обеспечение, необходимое для запуска проекта.
Время от времени я удаляю программное обеспечение в папке tools , чтобы заменить его более новыми версиями. Git хранит историю всего, что когда-либо существовало в папке tools . Это абсолютно не обязательно.
2. Вопросы
У меня есть два вопроса:
Можно ли удалить всю историю подпапки инструментов , не касаясь истории бар и баз ? Вся история tools должна быть удалена из моего локального репо .git
и удаленного репозитория GitHub, как только я пу sh. Когда мои коллеги тянут, их локальная история инструментов также должна быть стерта.
Можно ли - начиная с сегодняшнего дня - заставить Git прекратить хранить история для папки tools ? Например: я заменяю tool_x_v1.0
на tool_x_v1.1
, фиксирую и pu sh на GitHub. Мои коллеги вытаскивают из GitHub и должны получить tool_x_v1.1
. Все следы старого tool_x_v1.0
должны быть удалены из удаленного репозитория GitHub и всех локальных .git
репозиториев.
Примечание: Мы также предполагаем, что tool_x_v1.1
полностью обратно совместим с tool_x_v1.0
.
3. Побочные эффекты
Теперь вы можете задаться вопросом:
Что происходит, когда я извлекаю старый коммит - скажем, коммит от 5 ноября 2018 года. Подпапка tools имеет нет истории, восходящей к тому моменту (вся ее история ушла). Что он будет содержать?
Подпапка tools должна просто содержать текущее содержимое - независимо от того, какой старый коммит вы проверяете. Я бы даже сказал go дальше: неважно, какую ветку вы проверяете. Папка tools не имеет истории и имеет ветвление c. Так просто.
4. Критика
Некоторые из вас подумают:
Только не используйте Git для этой подпапки tools (поместите в .gitignore
). Используйте что-то еще, чтобы синхронизировать эту конкретную подпапку с вашими коллегами.
Это действительно возможно. Но любой, кто клонирует репозиторий git из GitHub, будет несчастлив, когда поймет, что проект не работает. Ему / ей потребуется загрузить папку tools из какого-либо другого источника, и, возможно, потребуется установить какое-либо стороннее программное обеспечение, чтобы поддерживать его в актуальном состоянии. Очень громоздко, не правда ли?
Если вы не согласны - просто игнорируйте меня и живите долго и счастливо. Пожалуйста, не ругайте go в комментариях, рассказывая мне, как зло я оскверняю благородных Git.