Если я хорошо понимаю вашу проблему, вам нужны следующие вещи:
- Храните ваши медиа-файлы в одном репозитории git, который используется многими проектами
- Если вы изменяете медиа-файл в любом из проектов на вашем локальном компьютере, он должен немедленно появиться в любом другом проекте (так что вы не хотите все время фиксировать + push + pull)
К сожалению, нет окончательного решения для того, что вы хотите, но есть некоторые вещи, с помощью которых вы можете сделать вашу жизнь проще.
Сначала вы должны решить одну важную вещь: хотите ли вы хранить для каждой версии в вашем репозитории проекта ссылку на версию медиа-файлов? Так, например, если у вас есть проект с именем example.com, вам нужно знать, какой style.css он использовал 2 недели назад, или последний всегда (или в основном) лучший?
Если вам не нужно это знать, решение легко:
- создайте репозиторий для медиа-файлов и по одному для каждого проекта
- создайте в своих проектах символическую ссылку, указывающую на локально клонированный медиа-репозиторий. Вы можете либо создать относительную символическую ссылку (например, ../media) и предположить, что все извлекут проект, чтобы каталог мультимедиа находился в том же месте, либо записать имя символической ссылки в .gitignore, и каждый может решить где он / она помещает медиа файлы.
Однако в большинстве случаев вам нужна эта информация о версиях. В этом случае у вас есть два варианта:
Храните каждый проект в одном большом хранилище. Преимущество этого решения заключается в том, что у вас будет только 1 копия хранилища мультимедиа. Большой недостаток заключается в том, что переключаться между версиями проекта гораздо сложнее (если вы переходите на другую версию, вы всегда будете изменять ВСЕ проекты).
Используйте субмодули (как объяснено в ответе 1). Таким образом, вы будете хранить медиа-файлы в одном репозитории, и проекты будут содержать только ссылку на конкретную версию медиа-репо. Но таким образом у вас обычно будет много локальных копий хранилища мультимедиа, и вы не сможете легко изменить медиафайл во всех проектах.
На вашем месте я бы, вероятно, выбрал первое или третье решение (символические ссылки или подмодули). Если вы решите использовать подмодули, вы все равно сможете сделать многое, чтобы облегчить себе жизнь:
Перед фиксацией вы можете переименовать каталог подмодулей и поместить символическую ссылку в общий каталог мультимедиа. Когда вы будете готовы к фиксации, вы можете удалить символическую ссылку и удалить подмодуль обратно, а затем зафиксировать.
Вы можете добавить одну из своих копий хранилища мультимедиа в качестве удаленного хранилища для всех своих проектов.
Вы можете добавить локальные каталоги как удаленные следующим образом:
cd /my/project2/media
git remote add project1 /my/project1/media
Если вы измените файл в / my / project1 / media, вы можете зафиксировать его и извлечь из / my / project2 / media, не отправляя его на удаленный сервер:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Вы можете удалить эти коммиты позже (с помощью git reset), потому что вы не поделились ими с другими пользователями.