Ответ 1
Git имеет функции, которые вы можете использовать для достижения того, что вам нужно. Он поддерживает символические ссылки файловой системы и поддерживает подмодули. Субмодули уже являются стандартным способом обработки ссылок на другие репозитории. Вы можете использовать их вместе со способом локального обращения к файлам. Это можно обрабатывать напрямую, используя относительные символические ссылки или косвенно используя script, который копирует файлы из подмодуля туда, где они вам нужны.
У вас должен быть один субмодуль на внешнее дерево git, и вы должны относиться к подмодулям с осторожностью, так как они связаны не только с внешними репозиториями, но и с их конкретными коммитами. В следующих решениях вы увидите, как использовать отдельные файлы из внешнего repostory, но при этом сохранить все преимущества подмодулей.
Альтернативным способом является выбор файлов напрямую, но тогда вы полностью потеряете преимущество подмодулей, или вам придется самостоятельно создавать функции. Как я уже сказал, подмодули - это стандартный способ справиться с такой задачей, и вы должны использовать ее, если у вас нет особых требований, чтобы избежать загрузки других файлов любой ценой.
Использование подмодуля и символической ссылки
Как только у вас есть подмодуль, вы можете просто добавить символические ссылки файловой системы, указывающие на структуру каталога подмодулей.
Запустите это в оболочке в каталоге проекта:
$ git submodule add https://github.com/theHilikus/JRoboCom
$ ln -s JRoboCom/jrobocom-core/src/main/resources/logback.xml
$ git add .gitmodules logback.xml
$ git commit -m "add a symbolic link to logback.xml with the respective submodule"
Теперь у вас есть символическая ссылка:
logback.xml -> JRoboCom/jrobocom-core/src/main/resources/logback.xml
Используя подмодуль и a script
В качестве альтернативы вы можете использовать пользовательские сценарии, которые копируют обычные файлы из ваших подмодулей. В особых случаях вы можете обращаться с внешними репозиториями из script без подмодулей, но я бы обычно не рекомендовал его.
Создайте файл bootstrap.sh
, содержащий:
#!/bin/sh
git submodule init
git submodule update
cp JRoboCom/jrobocom-core/src/main/resources/logback.xml .
Запустите это в оболочке в каталоге проекта:
$ git submodule add https://github.com/theHilikus/JRoboCom
$ git add .gitmodules bootstrap.sh
$ git commit -m "add a script to fetch logback.xml from the respective submodule"
Обратите внимание, что мы не добавляем файл logback.xml
к Git, так как он будет извлечен из подмодуля.
Попросите пользователей репозитория сначала запустить script выше. Он подготовит свои репозитории для использования подмодулей, выберет данные подмодуля и скопирует файл в его местоположение. Иногда в проекте уже есть какой-то загрузочный файл script.
Использование script для извлечения одного файла через протокол git
Нашел другое решение для git >= 1.7.9.5, используя git archive
.
Создайте файл bootstrap.sh, содержащий:
#!/bin/sh
git archive --remote=https://github.com/theHilikus/JRoboCom master:JRoboCom/jrobocom-core/src/main/resources logback.xml | tar -x
Запустите это в оболочке в каталоге проекта:
$ git add bootstrap.sh
$ git commit -m "add a script to fetch logback.xml directly from the remote project"
Использование script для извлечения одного файла через HTTP
Если служба хостинга репозитория также обслуживает отдельные файлы через HTTP, вы можете просто использовать curl
или wget
для их загрузки.
Создайте файл bootstrap.sh, содержащий:
#!/bin/sh
curl -O https://raw.githubusercontent.com/theHilikus/JRoboCom/master/jrobocom-core/src/main/resources/logback.xml
Запустите это в оболочке в каталоге проекта:
$ git add bootstrap.sh
$ git commit -m "add a script to fetch logback.xml directly from github"
Заметки о загрузке отдельных файлов
Вы также можете сохранить ссылки в файлах с определенным расширением (например, *.url
) или сохранить список ссылок в одном файле (например, .references
в каталоге проекта) и создать более полный script, который будет через все ссылки и загружает соответствующие файлы.