Как я работаю с репозиторием мерзавца в другом репозитории?

Этот мог бы звучать тривиальным, но это было открытие для меня в то время. Я был в своем самом первом классе (VB6) программирования, и Профессор только что учил нас случайным числам, и он дал следующие инструкции: "Создайте виртуальную лотерейную машину. Предположите, что стеклянный шар, полный 100 шаров пинг-понга, отметил от 0 до 99. Выберите их случайным образом и отобразите их число, пока они не были все выбраны, никакие дубликаты".

Все остальные записали их программу как это: Выберите шар, поместите его число в "уже выбранный список" и затем выберите другой шар. Проверьте, чтобы видеть, если его уже выбранный, раз так выберите другой шар, если не помещенный его число в "уже выбранный список" и т.д.

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

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

270
задан the Tin Man 22 July 2014 в 08:10
поделиться

2 ответа

Ключ - подмодули git .

Начните читать главу «Подмодули» в Git Community Book или в Руководстве пользователя

Допустим, у вас есть репозиторий PROJECT1, PROJECT2 и MEDIA ...

cd /path/to/PROJECT1
git submodule add ssh://path.to.repo/MEDIA
git commit -m "Added Media submodule"

Повторите для другого репозитория ...

А теперь самое интересное, что каждый раз, когда вы фиксируете изменения в MEDIA, вы можете сделать это:

cd /path/to/PROJECT2/MEDIA
git pull
cd ..
git add MEDIA
git commit -m "Upgraded media to version XYZ"

Это только что зафиксировало факт что подмодуль MEDIA WITHIN PROJECT2 теперь имеет версию XYZ.

Он дает вам 100% контроль над тем, какую версию MEDIA использует каждый проект. Подмодули git великолепны, но вам нужно поэкспериментировать и узнать о них.

С огромной силой приходит отличный шанс попасть в зад.

335
ответ дан 23 November 2019 в 02:19
поделиться

Если я хорошо понимаю вашу проблему, вам нужно следующее:

  1. Хранить ваши медиафайлы в одном репозитории git, который используется многими проектами.
  2. Если вы изменяете медиа файл в любом из проектов на вашем локальном компьютере, он должен немедленно появиться в каждом другом проекте (так что вы не хотите все время фиксировать + нажимать + тянуть)

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

Сначала вы должны решить одну важную вещь: хотите ли вы хранить для каждой версии в репозитории вашего проекта ссылку на версию медиафайлов? Так, например, если у вас есть проект с именем example.com, нужно ли вам знать, какой style.css он использовал 2 недели назад, или последний всегда (или почти всегда) лучший?

Если вы не знаете, Это нужно знать, решение простое:

  1. создайте репозиторий для файлов мультимедиа и по одному для каждого проекта
  2. создайте символическую ссылку в ваших проектах, которая указывает на локально клонированный репозиторий мультимедиа. Вы можете создать относительную символическую ссылку (например, ../media) и предположить, что все будут проверять проект, чтобы каталог мультимедиа находился в одном месте, или записать имя символической ссылки в .gitignore, и каждый может решить куда он / она помещает медиафайлы.

Однако в большинстве случаев вы хотите знать эту информацию о версиях. В этом случае у вас есть два варианта:

  1. Хранить каждый проект в одном большом репозитории. Преимущество этого решения в том, что у вас будет только 1 копия медиа-репозитория. Большим недостатком является то, что намного сложнее переключаться между версиями проекта (если вы оформляете заказ на другую версию, вы всегда будете изменять ВСЕ проекты)

  2. Используйте подмодули (как объяснено в ответе 1). Таким образом, вы будете хранить медиа-файлы в одном репозитории, а проекты будут содержать только ссылку на конкретную версию медиа-репозитория. Но в этом случае у вас обычно будет много локальных копий репозитория мультимедиа, и вы не сможете легко изменить мультимедийный файл во всех проектах.

На вашем месте я бы, вероятно, выбрал первое или третье решение (символические ссылки или подмодули). Если вы решите использовать подмодули, вы все равно можете сделать много вещей, чтобы облегчить себе жизнь:

  1. Перед фиксацией вы можете переименовать каталог подмодулей и поместить символическую ссылку на общий каталог мультимедиа. Когда вы будете готовы совершить,

20
ответ дан 23 November 2019 в 02:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: