Git: перенос определенных файлов и историй из одного хранилища в другое - PullRequest
3 голосов
/ 02 мая 2011

Прежде всего, я прочитал все следующее: - Можно ли переместить кучу файлов из одного репозитория git в другой, сохранив (большую часть) историю? - Удалить конфиденциальные файлы и их коммиты из истории Git - Можно ли извлечь только определенные файлы из другого репозитория git? Мне не удалось заставить работать ни одно из этих решений, возможно, хотя бы частично, из-за моего незнакомства с расширенными командами git, такими как git rebase.

Фон

В течение прошлого года я добровольно сотрудничал с несколькими другими программистами на веб-сайте для НКО, написанного на го. В ходе этого процесса я разработал распределенную, модульную, многопоточную, отказоустойчивую веб-инфраструктуру, которая реализована с использованием параллельных процессов в сочетании с обратным http-прокси, который отправляется различным модулям. Веб-фреймворк написан мной, хотя есть модули, написанные другими программистами. Все наши изменения были перенесены в один центральный git-репозиторий, включая модули, фреймворк, библиотеки (jQuery, tinymce и т. Д.).

Учитывая обширную работу, связанную с созданием этой среды, и отсутствие такого решения для программистов на данный момент, я подумывал о выпуске проекта с открытым исходным кодом. Однако я хочу выпустить только действующую framework , а не модули, библиотеки или другие вещи, которые находятся в репо. В частности, существует, по крайней мере, один модуль, который использует жестко закодированный ключ аутентификации для доступа к веб-API, что вы, безусловно, не хотели бы иметь в публичном выпуске (хотя для обеспечения безопасности недостаточно выпуск для других программистов, работающих на сайте). Кроме того, обратный прокси-сервер http проверяет значение файла cookie, чтобы обеспечить защиту всего сайта с помощью пароля, а значение файла cookie жестко задано.

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

Вопрос

Используя git, как я могу включить только определенные файлы и историю этих конкретных файлов при выпуске формально внутреннего продукта в качестве открытого источника?

Бонус: есть ли способ не включать историю для определенных строк в определенный файл (а также удалять строки)?

Ответы [ 2 ]

3 голосов
/ 02 мая 2011

Самый простой способ сделать это - клонировать весь репо и изучить некоторые тонкости filter-branch.

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

Для удаления некоторых строк используйте annotate, чтобы найти версию, в которой представлены строки, которые вы хотите удалить, и rebase -i that_revision^, а затем отбросьте ее.Это приведет к некоторым сбоям ребазинга, но о них будет легко позаботиться.

Эти виды упражнений довольно просты и безопасны и помогут вам выбрать путь, который вы обычно не исследуете с помощью git.Я думаю, это было бы очень весело.:)

0 голосов
/ 02 мая 2011

Кажется, вы ищете git bundle :

http://www.kernel.org/pub/software/scm/git/docs/git-bundle.html

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