Якщо я добре розумію вашу проблему, вам потрібні наступні речі:
- Нехай ваші медіа-файли зберігаються в одному сховищі git, яке використовується багатьма проектами
- Якщо ви змінюєте медіа-файл у будь-якому з проектів на вашій локальній машині, він повинен негайно з’являтися в кожному іншому проекті (тому ви не хочете весь час робити + push + тягнути)
На жаль, немає остаточного рішення того, що ви хочете, але є деякі речі, за допомогою яких ви можете полегшити своє життя.
Спочатку слід вирішити одне важливе: чи потрібно зберігати для кожної версії у сховищі проекту посилання на версію медіа-файлів? Так, наприклад, якщо у вас є проект, який називається 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), оскільки ви не поділилися ними з іншими користувачами.