Есть ли способ добавить подмодули в чистый репозиторий git?

У меня на сервере есть репозитории с гитозисом. Один из них - Главный, он включает в себя все остальные. Я работаю с ними со своего локального компьютера, и иерархия подмодулей была построена на моем локальном компьютере. У Gitosis есть репозитории как голые (?), Поэтому невозможно включить подмодули на сервер. Проблема в том, что в основном репо есть чистый клон Redmine (управление проектами. Redmine показывает статистику, историю коммитов и файлов. Он также позволяет записывать рефссылки на коммиты или файлы или версию файла прямо в вики). Но когда файлы помещаются в подмодули, Redmine не может получить к ним доступ. Итак, как сделать статистику подмодуля видимой в голом репо?


=== upd ===

Я не уверен, что мои подмодули всегда включены. Redmine использует клон простого репо и всегда может отображать статистику для любого файла, но подмодули отображаются как файлы с нулевым размером. Я уже пробовал схему по умолчанию [email protected]:Main.git, и теперь ssh://[email protected]/Main.git подмодули по-прежнему отображаются как файлы нулевой длины.

git-status работает нормально и показывает невыталкиваемые коммиты из подмодулей, но репозитории - это файлы. Это странно, но теперь redmine показывает коммиты из подмодулей, но по-своему странно, посмотрите на это:

проблема различий в представлении Redmine с подмодулями git

Сейчас я попробую создать подпроект для каждого подмодуля, может быть, тогда он будет ссылаться, как и должно быть. http://www.redmine.org/issues/3169 полностью взаимосвязан.


person tijagi    schedule 05.08.2011    source источник


Ответы (1)


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

А подмодули всегда «включаются» в чистый репо: подмодуль - это просто ссылка на соответствующий коммит (плюс адрес репо подмодуля).

Что могло подвести Redmine:

  • адрес (url), указанный в .gitmodules, неизвестен в контексте Redmine.
    Например, он использует gitolite: aRepoName, где gitolite - это ярлык ssh, определенный в вашем файле ~ / config (см. пример файла конфигурации): попробуйте использовать полную схему ssh uri: ssh : // [user @] host [: port] [/ path], и убедитесь, что адрес работает как с вашей рабочей станции, так и с сервера Redmine.

  • использование некоторых параметров (например, git status --ignore-submodules=all или status.submodulesummary, который по умолчанию имеет значение false, предотвращая отображение состояния сводки коммитов для измененных подмодулей): попробуйте хотя бы убедиться, что Redmine находится в среде git, где для status.submodulesummary установлено значение true.

person VonC    schedule 05.08.2011
comment
Спасибо за настройки .git / config! Теперь я могу пойти дальше. - person tijagi; 05.08.2011
comment
@ user685107: отлично. Что вам нужно убедиться, так это то, что схема uri, используемая для ваших подмодулей, является той, которую вы можете использовать на сервере Redmine для клонирования этих репозиториев подмодулей. - person VonC; 05.08.2011
comment
Немного не понял. Схема URI устанавливается один раз и будет использоваться везде. Я также клонирую репозитории только один раз. И синхронизация, как без ssh (по абсолютному пути). Какое отношение к этой схеме имеет доступ к репо через Redmine? Кому я могу передать пару ключей ssh? Apache не может использовать ключи ssh, а пользователь git не может войти в какой-либо каталог за пределами его / var / spool / gitosis, поэтому он не может выполнять операции с голыми репозиториями Redmine. Я пытался включить репо из подпроекта в Redmine, но безуспешно, по крайней мере, на сегодня. Думаю, я тоже запутался в некоторых коммитах, поэтому какое-то время не могу проводить тесты. - person tijagi; 08.08.2011
comment
@ user685107: Я имел в виду: какой тип uri используется Redmine для доступа к указанному репо? http://xxx? https://yyy? ssh? Вам нужно знать, может ли процесс, использующий Git в Redmine, получить доступ к этому удаленному адресу репо. Например, для доступа по ssh ключ ssh должен присутствовать в ~/.ssh (но что такое `~` или 'HOME' для Redmine?) - person VonC; 08.08.2011
comment
Redmine работает как Apache + mod_passenger. синхронизация репозиториев выполняется с помощью скрипта cron root. - person tijagi; 08.08.2011
comment
Скрипт Cron запускает cd /var/lib/redmine/repos/Main-bare && git fetch origin && git reset --soft refs/remotes/origin/master 2>/var/log/redmine_bare_sync, а исходный URL установлен на /var/spool/gitosis/repositories/Main.git - person tijagi; 08.08.2011
comment
@ user685107: ок. а root выполняет это задание cron? Если да, его учетная запись должна иметь необходимые ключи ssh. - person VonC; 08.08.2011
comment
Да, у root они были все время, и это не помогло redmine видеть коммиты подмодулей и описывать их. - person tijagi; 10.08.2011
comment
@ user685107: а у вас есть открытый и закрытый ключи в HOME/.ssh корневом каталоге? - person VonC; 10.08.2011
comment
Ага. Это бла-бла текст, чтобы сделать его постабе. - person tijagi; 11.08.2011