Подмодули Git с использованием относительных URL - PullRequest
7 голосов
/ 01 декабря 2011

Я использую 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-адресах?

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

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

0 голосов
/ 21 декабря 2018

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

Host git.example.org
    User my-git-account
0 голосов
/ 05 марта 2014

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

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

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

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

...