На риске совершения бестактности ответа на свой вопрос, я придумал работоспособным решением очень поздно прошлой ночью ...
То, что я хотел основано несколько на Triangular Workflow, мои требования является:
- Мне нужно получить код от главного отделения репозитория uGFX Bitbucket, и быть в состоянии тянуть изменения из этой отрасли при наличии, и интегрировать их в свой продукт после тестирования
- мне нужно, чтобы иметь возможность добавить код в дерево uGFX и сохраните эти дополнения под заголовком sourc e, но не верните их обратно в репозиторий uGFX (мой код специфичен для моего проекта и проприетарного ч/б, поверьте мне, они этого не хотят. =)
- Другие пользователи должны иметь возможность клонировать мой репозиторий. Им не нужно обновлять дерево uGFX с помощью изменений Bitbucket (я буду обрабатывать, когда эти изменения будут интегрированы), хотя они могли бы, если бы они внесли небольшие изменения в свой репозиторий.
Мое решение включает в себя версию Triangular Workflow с использованием восходящего репозитория as VonC mentioned.Вот специфика для моего решения: (который вы, возможно, сможете изменить в соответствии с вашими потребностями)
- Создайте восходящий сервер Git. Я использовал Raspberry Pi и поставил repos на USB-накопитель, потому что это было удобно, начиная с this article, хотя я сделал несколько дополнительных шагов от Git book, где я добавил пользователя git, некоторые авторизованные общедоступные ключи ssh и т. Д. ...
- Сделайте два голых хранилища на сервере Git, для этого примера назовите их myproduct.git и myproduct_ugfx.git
Направьте основную ветвь моего хранилища в репозиторий myproduct.git. Я не писал эту часть вниз, но я думаю, я просто добавил пульт дистанционного управления для начала и толкнул мастера:
git remote add origin [email protected]:/mnt/git_repos/myproduct.git git push
В верхней директории моего репозитория, добавьте uGFX подмодуль
git submodule add https://bitbucket.org/Tectu/ugfx.git ugfx_submodule
кд в каталог подмодуль, и изменить имя главного филиала подмодуль в к обновлениям
git branch -m master updates
Переименовать удаленное происхождение Bitbucket, которой обновление филиал (бывший хозяин) отслеживает
git remote rename origin bitbucket
На данный момент, запустить git branch -vv
так же, как чек, и он должен показывать один филиал (обновления), который отслеживает ведущее ведомое устройство удаленного битбакета
Теперь ваш подмодуль больше не имеет ведущей ветви или источника. Я хотел, чтобы главный подмодуль филиал отслеживать хранилище моего Pi Git сервера, поэтому я добавить пульт дистанционного управления для начала создайте мастер ветку и нажмите мастер ветку к серверу (говорю это, чтобы отслеживать эту ветку):
git remote add origin [email protected]:/mnt/git_repos/myproduct_ugfx.git git checkout -b master git push -u origin master
Теперь, когда я нажал подмодуль на мой сервер, изменить подмодуль uGFX, чтобы указать на мой сервер, так что, когда люди клонировать весь репозиторий с --recursive, они получают мои обновления
git config remote.origin.url [email protected]:/mnt/git_repos/myproduct_ugfx.git
На этом этапе я хотел добавить несколько файлов в дерево uGFX. Я добавляю их в главную ветвь, фиксирую, а затем нажимаю (что идет в репозиторий Pi). Не забудьте также перейти к директории, вне субмодуля, запустить «git subodule sync» (не уверен, что это необходимо), а затем commit + нажимать эти изменения на основное/внешнее репо.
Теперь, когда в репозитории Bitbucket есть изменения, я могу вытащить их в ветвь обновлений, а затем, когда я их протестировал и хочу интегрировать их в свой продукт, я могу объединить их с мастером и нажать их в хранилище Pi с простым нажатием git.
Если кто-то хочет, чтобы клонировать репозиторий MyProduct от Pi, при условии, что они имеют доступ к Pi (см Git книгу для добавления ключа SSH), они могут сделать это с
git clone --recursive [email protected]:/mnt/git_repos/myproduct.git
Связанный: https: //stackoverflow.com/questions/30618109/how-can-i-get-git-clone-recursive-to-clone-submodules-locally –