Внесение изменений в субмодуль git - PullRequest
1 голос
/ 01 марта 2020

У меня есть проект со сторонним подмодулем, участником которого я не являюсь.

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

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

Server does not allow request for unadvertised object <my_commit_id>
Fetched in submodule path <submodule>, but it did not contain <my_commit_id>

Я хотел бы сделать что-то похожее на команду git submodule update --remote --rebase, в котором изменения, которые я внес в подмодуль, будут записаны поверх новых с оригинального пульта, но я хочу иметь возможность зафиксировать изменения, которые я сделал, в моем супер-проекте, чтобы, когда я клонировать репозиторий, изменения будут применены поверх подмодуля.

Есть ли способ сделать что-то подобное?

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Подмодуль - это хранилище: вы можете заменить его на a fork , который может:

  • добавить удаленный upstream, который ссылается на исходный репозиторий
  • будет завершено с upstream коммитами (git fetch uptream)
  • будет сброшено в upstream / master
  • будет обновлено с коммитами, которые вы сделали (submodule update --remote --rebase, с вашим * 1016) * ваша вилка была перебазирована поверх локального master, который был сброшен до upstream/master)
0 голосов
/ 01 марта 2020

Подмодуль - это Git хранилище. Это просто репозиторий Git, который какой-то другой Git - суперпроект - будет git clone для вас, а затем git checkout какой-то конкретный коммит (как "отсоединенный HEAD" в подмодуле).

Любой, кто клонирует суперпроект, в какой-то момент запустит git submodule update --init. Это приведет к запуску суперпроекта git clone для получения подмодуля Git хранилище. Любые коммиты, сделанные вами в вашем клоне , ... ну, в вашем клоне . Их нет ни в одном другом клоне. Таким образом, вам придется предоставить всем в Интернете - или, по крайней мере, всем, кто может git clone ваш суперпроект - доступ к вашему клону этого подмодуля.

Если вы этого не сделаете Вы хотите предоставить Inte rnet полный доступ к вашему ноутбуку - а вы, вероятно, этого не делаете - вы должны прекратить хранить единственную копию хранилища субмодулей на своем ноутбуке. Другими словами, вам нужна publi c -доступная версия подмодуля .

Предположим, что подмодуль, который вы клонировали вчера, https://github.com/someone/sub.git. Клон этого субмодуля вашего ноутбука, file://path/to/sub.git, не имеет общедоступного URL-адреса 1065 * (file://... на мой ноутбук относится к моим файлам, не ваша). Так что вам нужно сделать на GitHub или где-то еще, ваш форк этого подмодуля: https://github.com/bodhi_daruma/sub.git или что бы это ни было.

Теперь, когда вы делаете если у вас есть c -публичная версия доступа sub.git, вы можете отправить свой подмодуль Git коммитов в этого хранилища. Возможно, вы захотите сделать коммиты вашего субмодуля на своем ноутбуке в ветви , а не в режиме «отсоединенного HEAD», который установлен вашим суперпроектом. Смотрите существующие вопросы о том, как это сделать. Затем вы будете git push коммитов, которые вы сделали в своем субмодуле на своем ноутбуке, на Git на GitHub (или где бы вы ни хранили это).

Теперь вы захотите иметь свой суперпроект Git относится к https://github.com/bodhi_daruma/sub.git или к какому-либо URL, а не к https://github.com/someone/sub.git. То есть, когда люди клонируют ваш суперпроект, этот клон направит их суперпроект Git на git clone ваш форк подмодуля.

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

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