2015-11-14 2 views
2

Я добавил подмодуль в свой локальный репозиторий git (библиотека GUI для встроенного проекта.) Мне нужно было добавить пару файлов драйверов для моего оборудования и добавить их к локальному dev ветвь: эти изменения не отбрасываются обратно на пульт. Мой план состоял в том, чтобы иногда вносить изменения в ведущую ветку с удаленной стороны, а затем переустанавливать мою ветвь dev поверх этих изменений.Клонирование локального репозитория Git, содержащего подмодуль с локальным ответвлением

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

git clone --recursive local_repo local_clone 

я

fatal: reference is not a tree: ca025c09ca2b7b82ca086309eeb0696d674cb1d0 
Unable to checkout 'ca025c09ca2b7b82ca086309eeb0696d674cb1d0' in submodule path 'uGFX/ugfx_submodule' 

Это особенно совершить на моей локальной ветви DEV (и, безусловно, а не на удаленном сервере подмодуля.)

Есть ли простой способ клонировать локальный репозиторий? (Кроме ф -r =)

+0

Связанный: https: //stackoverflow.com/questions/30618109/how-can-i-get-git-clone-recursive-to-clone-submodules-locally –

ответ

2

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

То, что я хотел основано несколько на Triangular Workflow, мои требования является:

  1. Мне нужно получить код от главного отделения репозитория uGFX Bitbucket, и быть в состоянии тянуть изменения из этой отрасли при наличии, и интегрировать их в свой продукт после тестирования
  2. мне нужно, чтобы иметь возможность добавить код в дерево uGFX и сохраните эти дополнения под заголовком sourc e, но не верните их обратно в репозиторий uGFX (мой код специфичен для моего проекта и проприетарного ч/б, поверьте мне, они этого не хотят. =)
  3. Другие пользователи должны иметь возможность клонировать мой репозиторий. Им не нужно обновлять дерево 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

0

этих изменений не отодвигается к удаленному

Но главное репо еще записанном подмодуль точного состояния.

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

Вы могли бы рассмотреть:

И посмотреть, если клон родительского репо себя.

+0

Не могли бы вы добавить некоторые детали к своему ответу? Я попробовал добавить локальное восходящее репо для подмодуля и переместил мою ветвь dev в этот репозиторий. Я получаю ту же проблему, когда я клонируюсь из локального репозитория upstream ... Я думаю, вам, возможно, придется сделать больше, чем это. В идеале я хотел бы, чтобы основная ветвь субмодуля извлекалась из фиксации в исходном репозитории, тогда как моя ветвь dev извлекается из моего локального репозитория восходящего потока. Я не уверен, что это возможно, но это кажется естественным, что люди захотят делать при работе с общедоступным кодом, на котором у них нет доступа на запись ... – gulchrider

 Смежные вопросы

  • Нет связанных вопросов^_^