Надлежащий рабочий процесс Мерзавца для объединенной ОС и Частного кода?

У меня есть проект с закрытым исходным кодом, который основан на моей платформе с открытым исходным кодом. Я хочу знать, как я должен структурировать свой рабочий процесс. Ниже мое лучшее предположение с помощью мерзавца с подмодулями.

  1. Я создаю общедоступную платформу repo на GitHub с подмодулями, которые являются отдельным мерзавцем repos.
  2. Я покупаю "микро" учетную запись на GitHub (7$), таким образом, у меня может быть частный repo.
  3. Я создаю частный repo и клонирую общедоступную платформу repo.

Отсюда я могу внести изменения в:

  1. Мой частный код и нажатие к моему частному repo на GitHub
  2. Общедоступный код платформы и нажатие к моему частному GitHub repo и затем отправляют запрос получения по запросу от общедоступной платформы..? Или как это работало бы?

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

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

Другой пример, который я мог дать, будет использовать zendframework для создания сайта частной компании в то время как все еще способность делать получения по запросу каждый день (и возможно исправлять нажатия) к зенду repo. И также получения по запросу и нажатия Вашего частного сайта в zendframework.

Например, вообразите структуру каталогов как это:

/private_folder
/public
        /public_folder
        /public_folder2
        /private_folder

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

11
задан Xeoncross 6 February 2010 в 20:15
поделиться

6 ответов

Я рекомендую не использовать подмодули git, а 2 разных репозитория, которые не подключены к github.

Вы можете построить отношения между ними, используя символические ссылки на извлеченных копиях, что очень просто. Символьные ссылки нужно создавать только один раз для каждой локации (производство, разработка, коллеги).

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

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

/repos/myproject-os
/repos/myproject-priv

Затем вы можете создать структуру каталогов, в которой проект фактически будет жить и работать в другом месте на этой машине (не внутри / repos / tree) и создайте символьные ссылки для подкаталогов, которые вы используете:

ln -s /repos/myproject-os/dir1 /wrk/myproject/base/dir1
ln -s /repos/myproject-os/dir2 /wrk/myproject/base/dir2
ln -s /repos/myproject-priv/dir1 /wrk/myproject/base/dir3
ln -s /repos/myproject-priv/dir2 /wrk/myproject/base/someother/dir4
mkdir /wrk/myproject/base/config
mkdir /wrk/myproject/base/tmp

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

Вы выполняете коммиты git и все из дерева / repos /, и ваш проект запускается, и вы редактируете файлы из дерева / wrk /. Обратите внимание, что каталог .git, в котором находятся данные git, не будет доступен из дерева / wrk /, потому что вы ссылаетесь только на подкаталоги (или, возможно, на отдельные файлы из корневого каталога).

Часть 2: Вы говорите, что хотите убедиться, что случайно не поместите частный код в общедоступный репозиторий. Вы можете настроить дополнительный репозиторий git между вашим рабочим репозиторием ОС и репозиторием github, скажем, вы поместите его в / repos / gatekeeper, тогда ваше дерево будет выглядеть так:

/repos/gatekeeper/myproject-os
/repos/myproject-os
/repos/myproject-priv

Каждый раз, когда вы нажимаете из / repos / myproject-os он идет в /repos/gatekeeper/myproject-os. Но из / repos / myproject-priv вы отправляете прямо в свой частный репозиторий github.

Таким образом, у вас будет одинаковый рабочий процесс в / repos / myproject-os и / repos / myproject-priv, и вам не нужно сильно беспокоиться.Время от времени, когда вы хотите внести свои изменения в реальную кодовую базу ОС, вы переходите в / repos / gatekeeper / myproject-os и отправляете оттуда в github.

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

Если вам нужна дополнительная безопасность, / repos / gatekeeper / myproject-os также может находиться на другом компьютере или даже в другом месте.

5
ответ дан 3 December 2019 в 10:44
поделиться

Функции # 3 и # 4 являются специализациями # 1, а не # 1 и # 2 соответственно.

Это означает, что компилятор сначала выберет от # 1 до # 2. Когда он выбрал # 1 для наилучшего соответствия funcT (x1), он затем выбирает специализацию # 3. Для funcT (& x1) он выбирает # 2 как наилучший вариант и не находит специализаций.

Написав # 4 как

template<> void funcT<>( int * arg )

, он становится специализацией # 2, и вы получите ожидаемый результат, что # 4 вызывается для funcT (& x1).

Другой вариант заключается в простой записи

void funcT(int *arg)

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

-121--3357734-

(Это очень старый вопрос, но не хватает полезной информации -- Я лично сделал это для Solaris (SPARC & x86), AIX, HP-UX и Linux (x86, x64).)

  • Получение кросс-компиляции C++ намного сложнее, чем прямой C

  • HP-UX 32-разрядный PA-RISC не поддерживается, потому что он использует формат SO Другими словами, можно выполнять перекрестную компиляцию только 64-разрядных PA-RISC. (Требуется чип PA-RISC 2.0.)

  • Я бы пошел с mingw вместо cygwin, если вы можете. Cygwin вводит много файлов разрешения головные боли и cygwin1.dll зависимости, которые могут быть хлопотными. По возможности, однако, строить на linux. Все будет намного быстрее, потому что все запущенные инструменты и сценарии разработаны для среды, в которой exec и stat являются быстрыми операциями. Windows + NTFS не является такой средой.

  • Начните со сценария crosstools, но будьте готовы потратить на это много времени.

  • Сначала попробуйте использовать самые последние gcc/binutuils, но если вы не можете преодолеть проблемы, попробуйте вернуться к более старым пакетам. Например, для Power3 (AIX) cross compiler серии gcc 4.x генерирует неправильный код, 3.x в порядке.

  • При копировании собственных libs и заголовков убедитесь, что выполняется копирование с самого старого компьютера, на котором вы, вероятно, будете работать. Копирование нового libc означает, что код не будет выполняться на компьютере со старым libc.

  • При копировании собственных libs и заголовков вы, вероятно, хотите, чтобы 'tar -h' превращал symlinks в фактические файлы, также следите за тем, чтобы в Solaris некоторые необходимые файлы объектов crt были похоронены в каталоге cc, а не в каталоге/usr/lib

-121--4669700-

Вы можете иметь 'общедоступную' и 'частную' ветвь в вашем локальном При нажатии каждая ветвь перемещается в отдельный удаленный репозиторий (см. синтаксис «git push»). Затем можно свободно объединяться из общедоступного в частный.

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

2
ответ дан 3 December 2019 в 10:44
поделиться

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

-1
ответ дан 3 December 2019 в 10:44
поделиться

подмодули git позволяют вам определять конфигурацию (см. этот вопрос ), то есть ссылку на одну фиксацию другого компонента (в другом репо).

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

И чтобы лучше управлять перемещением частей вашего глобального репо в частное, я бы порекомендовал инструмент сценария git subtree .

1
ответ дан 3 December 2019 в 10:44
поделиться

Подводя итог, я рекомендую следующий рабочий процесс:

  1. старайтесь не усложнять; иметь по одной рабочей копии для каждого репозитория (не используйте подмодули git)
  2. используйте инструменты вашего языка для упаковки вашего фреймворка
  3. сценариев установки или легких инструментов для быстрого или автоматического переключения контекста

Я использовал git подмодули в прошлом. Я не думаю, что они подходят для вашего случая использования. На мой взгляд, бросаются в глаза следующие большие недостатки:

  • Когда вы создаете (или извлекаете) каркас, это помогает есть собственный корм для собак. Ожидаете ли вы, что пользователи вашего фреймворка также будут настраивать подмодули git при использовании вашего фреймворка? Полагаю, что нет.
  • Существует некоторый риск случайной публикации вашего частного исходного кода в вашей среде с открытым исходным кодом.
  • Подмодули Git значительно улучшились за последний год или около того, но они все еще относительно менее изучены. Даже у компетентных мерзавцев могут возникнуть проблемы с подмодулями.

Вот один подвопрос, который, я признаю, не так однозначен: «Какой рабочий процесс упрощает переключение между фреймворком OSS и частным проектом?»

  • Есть определенная привлекательность в использовании подмодулей и объединении обоих проектов в одно дерево. Это, возможно, ускорит ваше редактирование текста, но, вероятно, замедлит вас (или вызовет больше ошибок, чем обычно), когда дело доходит до фиксации и нажатия.

  • Есть определенная привлекательность в разделении проектов. Переключение контекста (из одного окна текстового редактора в другое) может помочь напомнить вам, что проект OSS предназначен для общего пользования.Например, это может помочь приучить вас не нарушать обратную совместимость и вести хороший журнал изменений. По сравнению с альтернативой подмодуля, фиксация и отправка будут простыми.

После того, как вы определились со своими рабочими копиями, вы захотите разобраться в своем повседневном рабочем процессе. Конечно, это будет зависеть от вашего языка. (В Ruby, например, вы можете упаковать свою платформу OSS в виде драгоценного камня, построить ее, а затем сделать так, чтобы ваш частный код зависел от нее.) Что бы вы ни выбрали, настройте некоторые сценарии (или, возможно, ярлыки редактора), чтобы помочь вам создать свои библиотеки (или пакеты) быстро, возможно, даже автоматически при изменении файлов, так что вы можете легко переключаться между фреймворком и проектом.

1
ответ дан 3 December 2019 в 10:44
поделиться

Здесь есть два подхода:

  1. Вы можете использовать ответвления от одного и того же git-репо. В вашем личном репозитории создайте ветку со ссылкой на ваш публичный репозиторий и обрабатывайте оба таким образом.

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

Как мне кажется, вы не можете потерять, какой проект присваивается каждому проекту, так что если у вас это ясно, то независимо от того, что вы выберете, это будет работать !!!!!!. Кроме того, git - это просто.

0
ответ дан 3 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: