Jika saya memahami masalah Anda dengan baik, Anda menginginkan hal-hal berikut:
- Simpan file media Anda dalam satu repositori git tunggal, yang digunakan oleh banyak proyek
- Jika Anda memodifikasi file media di salah satu proyek di mesin lokal Anda, itu akan segera muncul di setiap proyek lain (jadi Anda tidak ingin melakukan + push + pull sepanjang waktu)
Sayangnya tidak ada solusi utama untuk apa yang Anda inginkan, tetapi ada beberapa hal yang dengannya Anda dapat membuat hidup Anda lebih mudah.
Pertama, Anda harus memutuskan satu hal penting: apakah Anda ingin menyimpan untuk setiap versi di repositori proyek Anda referensi ke versi file media? Jadi misalnya jika Anda memiliki proyek bernama example.com, apakah Anda perlu tahu style.css mana yang digunakan 2 minggu lalu, atau yang terbaru selalu (atau sebagian besar) yang terbaik?
Jika Anda tidak perlu mengetahuinya, solusinya mudah:
- buat repositori untuk file media dan satu untuk setiap proyek
- buat tautan simbolis dalam proyek Anda yang menunjuk ke repositori media yang dikloning secara lokal. Anda dapat membuat tautan simbolis relatif (mis. ../Media) dan menganggap bahwa semua orang akan checkout proyek sehingga direktori media berada di tempat yang sama, atau menulis nama tautan simbolis ke .gitignore, dan semua orang dapat memutuskan di mana ia meletakkan file media.
Namun, dalam sebagian besar kasus, Anda ingin mengetahui informasi versi ini. Dalam hal ini Anda memiliki dua pilihan:
Simpan setiap proyek dalam satu repositori besar. Keuntungan dari solusi ini adalah Anda hanya akan memiliki 1 salinan repositori media. Kerugian besar adalah bahwa jauh lebih sulit untuk beralih di antara versi proyek (jika Anda checkout ke versi yang berbeda, Anda akan selalu memodifikasi SEMUA proyek)
Gunakan submodula (seperti yang dijelaskan dalam jawaban 1). Dengan cara ini Anda akan menyimpan file media dalam satu repositori, dan proyek hanya akan berisi referensi ke versi repo media tertentu. Tetapi dengan cara ini Anda biasanya memiliki banyak salinan lokal dari repositori media, dan Anda tidak dapat dengan mudah memodifikasi file media di semua proyek.
Jika saya jadi Anda, saya mungkin akan memilih solusi pertama atau ketiga (tautan simbolik atau submodula). Jika Anda memilih untuk menggunakan submodul, Anda masih dapat melakukan banyak hal untuk membuat hidup Anda lebih mudah:
Sebelum melakukan, Anda dapat mengganti nama direktori submodule dan menaruh symlink ke direktori media umum. Saat Anda siap untuk melakukan, Anda dapat menghapus symlink dan menghapus kembali submodule, dan kemudian melakukan.
Anda dapat menambahkan salah satu salinan repositori media Anda sebagai repositori jarak jauh ke semua proyek Anda.
Anda dapat menambahkan direktori lokal sebagai remote dengan cara ini:
cd /my/project2/media
git remote add project1 /my/project1/media
Jika Anda memodifikasi file di / my / project1 / media, Anda dapat mengkomitnya dan menariknya dari / my / project2 / media tanpa mendorongnya ke server jauh:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Anda bebas untuk menghapus komit ini nanti (dengan reset git) karena Anda belum membagikannya dengan pengguna lain.