Прежде всего, я прочитал все следующее:
- Можно ли переместить кучу файлов из одного репозитория git в другой, сохранив (большую часть) историю?
- Удалить конфиденциальные файлы и их коммиты из истории Git
- Можно ли извлечь только определенные файлы из другого репозитория git?
Мне не удалось заставить работать ни одно из этих решений, возможно, хотя бы частично, из-за моего незнакомства с расширенными командами git
, такими как git rebase
.
Фон
В течение прошлого года я добровольно сотрудничал с несколькими другими программистами на веб-сайте для НКО, написанного на го. В ходе этого процесса я разработал распределенную, модульную, многопоточную, отказоустойчивую веб-инфраструктуру, которая реализована с использованием параллельных процессов в сочетании с обратным http-прокси, который отправляется различным модулям. Веб-фреймворк написан мной, хотя есть модули, написанные другими программистами. Все наши изменения были перенесены в один центральный git-репозиторий, включая модули, фреймворк, библиотеки (jQuery, tinymce и т. Д.).
Учитывая обширную работу, связанную с созданием этой среды, и отсутствие такого решения для программистов на данный момент, я подумывал о выпуске проекта с открытым исходным кодом. Однако я хочу выпустить только действующую framework , а не модули, библиотеки или другие вещи, которые находятся в репо. В частности, существует, по крайней мере, один модуль, который использует жестко закодированный ключ аутентификации для доступа к веб-API, что вы, безусловно, не хотели бы иметь в публичном выпуске (хотя для обеспечения безопасности недостаточно выпуск для других программистов, работающих на сайте). Кроме того, обратный прокси-сервер http проверяет значение файла cookie, чтобы обеспечить защиту всего сайта с помощью пароля, а значение файла cookie жестко задано.
Если возможно, было бы полезно иметь историю коммитов из git, так как она показывала бы людям, которые исследуют фреймворк, что у него есть история, а также показывала им эволюцию ее дизайна и связанные с этим проектные решения.
Вопрос
Используя git
, как я могу включить только определенные файлы и историю этих конкретных файлов при выпуске формально внутреннего продукта в качестве открытого источника?
Бонус: есть ли способ не включать историю для определенных строк в определенный файл (а также удалять строки)?