Git: Как отключить историю для указанной подпапки c? - PullRequest
1 голос
/ 11 февраля 2020

1. Описание проблемы

Предположим, у меня есть следующий проект foo :

image

Проект foo клонирован из хранилище GitHub, которое у меня есть, и проверено в основной ветке. Подпапки bar и baz содержат чистый исходный код. Подпапка tools содержит программное обеспечение, необходимое для запуска проекта.

Время от времени я удаляю программное обеспечение в папке tools , чтобы заменить его более новыми версиями. Git хранит историю всего, что когда-либо существовало в папке tools . Это абсолютно не обязательно.


2. Вопросы

У меня есть два вопроса:

  1. Можно ли удалить всю историю подпапки инструментов , не касаясь истории бар и баз ? Вся история tools должна быть удалена из моего локального репо .git и удаленного репозитория GitHub, как только я пу sh. Когда мои коллеги тянут, их локальная история инструментов также должна быть стерта.

  2. Можно ли - начиная с сегодняшнего дня - заставить 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.

1 Ответ

1 голос
/ 11 февраля 2020

Вопрос 1: да. Используйте bfg или git filter-branch, чтобы удалить только эту подпапку, а затем добавьте ее в .gitignore. Примечание: это, к счастью, не приведет к автоматическому удалению папок других пользователей, поскольку в этом случае можно будет удалить данные из чьего-либо репо с помощью запроса на извлечение.

Вопрос 2: Вы хотите git записать версия меняется без истории записи? Это невозможно без лот из push -f и reset --hard для всех пользователей. git lfs остановит git сохранение версий программного обеспечения в виде двоичных различий, но не сможет обработать это автоматическое c обновление без требуемой версии. Возможно, синхронизированная папка Dropbox ближе к тому, что вы ищете.

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