Этот мог бы звучать тривиальным, но это было открытие для меня в то время. Я был в своем самом первом классе (VB6) программирования, и Профессор только что учил нас случайным числам, и он дал следующие инструкции: "Создайте виртуальную лотерейную машину. Предположите, что стеклянный шар, полный 100 шаров пинг-понга, отметил от 0 до 99. Выберите их случайным образом и отобразите их число, пока они не были все выбраны, никакие дубликаты".
Все остальные записали их программу как это: Выберите шар, поместите его число в "уже выбранный список" и затем выберите другой шар. Проверьте, чтобы видеть, если его уже выбранный, раз так выберите другой шар, если не помещенный его число в "уже выбранный список" и т.д.
, Конечно, к концу они делали сотни сравнений для нахождения нескольких шаров, которые не были уже выбраны. Это было похоже на отбрасывание шаров назад в банку после выбора их. Мое откровение должно было выбросить шары после выбора.
я знаю, что это звучит отупляющим образом очевидным, но это было моментом, что "переключатель программирования" был зеркально отражен в моей голове. Это было моментом, что программирование пошло от попытки выучить странный иностранный язык попытке выяснить приятную загадку. И как только я установил ту умственную связь между программированием и забавой, там не была действительно никакая остановка меня.
Ключ - подмодули 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 великолепны, но вам нужно поэкспериментировать и узнать о них.
С огромной силой приходит отличный шанс попасть в зад.
Если я хорошо понимаю вашу проблему, вам нужно следующее:
К сожалению, нет окончательного решения для того, что вы хотите, но есть некоторые вещи, с помощью которых вы можете облегчить себе жизнь.
Сначала вы должны решить одну важную вещь: хотите ли вы хранить для каждой версии в репозитории вашего проекта ссылку на версию медиафайлов? Так, например, если у вас есть проект с именем example.com, нужно ли вам знать, какой style.css он использовал 2 недели назад, или последний всегда (или почти всегда) лучший?
Если вы не знаете, Это нужно знать, решение простое:
Однако в большинстве случаев вы хотите знать эту информацию о версиях. В этом случае у вас есть два варианта:
Хранить каждый проект в одном большом репозитории. Преимущество этого решения в том, что у вас будет только 1 копия медиа-репозитория. Большим недостатком является то, что намного сложнее переключаться между версиями проекта (если вы оформляете заказ на другую версию, вы всегда будете изменять ВСЕ проекты)
Используйте подмодули (как объяснено в ответе 1). Таким образом, вы будете хранить медиа-файлы в одном репозитории, а проекты будут содержать только ссылку на конкретную версию медиа-репозитория. Но в этом случае у вас обычно будет много локальных копий репозитория мультимедиа, и вы не сможете легко изменить мультимедийный файл во всех проектах.
На вашем месте я бы, вероятно, выбрал первое или третье решение (символические ссылки или подмодули). Если вы решите использовать подмодули, вы все равно можете сделать много вещей, чтобы облегчить себе жизнь:
Перед фиксацией вы можете переименовать каталог подмодулей и поместить символическую ссылку на общий каталог мультимедиа. Когда вы будете готовы совершить,