Подмодули Git с использованием относительных URL-адресов

Я использую git (TortoiseGit 1.7.5.0) и имею репо с подмодулями, на которые ссылаются через абсолютные пути следующим образом:

[submodule "common/sub"]
path = common/sub
url = ssh://localhost/lib/common/sub

Хотя супер-репо клонируется как ssh://user@localhost/super, имя пользователя не должно входить в каждый URL-адрес подмодуля, потому что разные пользователи должны работать с кодом, используя свои собственные учетные данные.
При извлечении / отправке подмодулей мне приходилось вводить свой логин ( пароль не нужен, потому что я запускаю Pageant): имя пользователя не передается в TortoisePlink через командную строку.

В Интернете я нашел несколько сообщений, в которых упоминаются относительные URL-адреса для подмодулей, но, очевидно, такой подход не работает с TortoiseGit: я пробовал несколько форматов - программа часто дает сбой. В любом случае мне удалось с форматом вроде:

[submodule "common/sub"]
path = common/sub
url = ../common/sub

Файл .git/config заполняется правильными абсолютными URL-адресами, но после этого TortoiseGit просто аварийно завершает работу ...

Я рассмотрел другие варианты, в том числе:

  1. используйте гитолит (как предлагается здесь) или sdorra (как предлагается здесь), но это выглядит слишком сложным решением.

  2. следуйте стратегии слияния поддеревьев (как предлагается здесь). Похоже, хороший подход.

Один из рабочих приемов - инициализировать подмодуль "нестандартным" URL, как описано в конце git Submodules Explained (ссылка была найдена здесь).

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

И вопрос: как проще всего использовать подмодули без жестко заданных имен пользователей в абсолютных URL-адресах?


person AntonK    schedule 01.12.2011    source источник
comment
См. Решение здесь: stackoverflow.com/questions/6031494/   -  person Cybot    schedule 17.12.2013


Ответы (3)


На самом деле относительные URL-адреса уже отлично работают с msysgit. Я обновил его с 1.7.7.1 до 1.7.8, и вылеты исчезли. Здорово! :)

person AntonK    schedule 13.12.2011

Вместо подмодулей git или стратегии слияния поддеревьев (которая требует немного громоздкого рабочего процесса), на самом деле существует вклад в git под названием «git subtree», который упрощает весь процесс.

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

Вы можете прочитать о contrib "git subtree" здесь: https://github.com/git/git/tree/master/contrib/subtree (обязательно проверьте git-subtree.txt)

Кроме того, поскольку вы отметили tortoisegit, вам может быть интересно узнать, что я работаю над поддержкой поддеревьев прямо сейчас в вилке tortoisegit https://github.com/johnb003/TortoiseGit/tree/subtree-add

person johnb003    schedule 05.03.2014

Поскольку вы используете SSH в качестве транспорта, вы можете использовать ~ / .ssh / config, чтобы установить имя пользователя по умолчанию для конкретного хоста:

Host git.example.org
    User my-git-account
person Giel    schedule 21.12.2018