Saya punya repositori Git di mana semua kode saya ada di cabang master, dan saya sebelumnya hanya mengabaikan semua file Drupal, sehingga saya menjaga pemisahan ketat antara kode yang saya tulis (atau dimodifikasi atau mungkin dimodifikasi) dan kode yang bisa dihasilkan dengan Drush atau apa pun.
Ini sepertinya strategi yang bagus sampai saya harus memutakhirkan Drupal. Saya menyadari bahwa saya ingin dapat mundur jika segalanya berjalan buruk, dan alat apa yang lebih baik untuk digunakan daripada Git untuk melakukan itu. Saya berpikir sendiri ini akan menjadi situasi yang sempurna untuk fitur cabang, jadi saya membuat drupal-7.14
cabang, memberikannya sendiri .gitignore
untuk mengabaikan semua kode saya dan file pengaturan dan memperhatikan hanya file yang merupakan bagian dari instalasi Drupal yang saya tidak mau ' t menyentuh. Saya melakukan upgrade dengan tangan (unduh, unzip, untar, salin), memilah-milah kasus batas seperti robots.txt dan .htaccess, dan menimpa .gitignore Drupal dengan milik saya. Saya memperbaiki beberapa pengaturan yang berfungsi dengan 7.14 tetapi tidak dengan 7.15, untuk memulihkan dari kesalahan 500, dan kemudian semuanya tampak sempurna. Saya mengganti nama cabang drupal-7.15
itu dan akan pergi dengan senang hati dalam perjalanan.
Sampai saya menyadari apa yang telah saya lakukan secara tidak sengaja: file yang sebelumnya tidak bisa dilacak oleh cabang master saya tetapi tertinggal di direktori kerja sekarang dihapus dari direktori kerja ketika saya memeriksa master, karena mereka bukan lagi file yang tidak terlacak! Doh!
Jika saya menggabungkan drupal-7.15
cabang dengan master saya akan kehilangan pemisahan kode.
Mungkin ada beberapa cara untuk mengubah cabang menjadi submodule. Dengan asumsi itu mungkin, itu mungkin strategi terbaik. Saya tahu sebelum saya melakukan ini bahwa submodula adalah solusi "benar", tetapi karena saya tidak menyadari efek samping dari menggunakan cabang untuk file yang sebelumnya tidak terlacak, saya memutuskan untuk mengambil jalan pintas dan menempuh rute itu. (Juga, semua pendekatan yang saya lihat menggunakan submodul dengan Drupal menganggap bahwa Anda memulai proyek baru dan Drupal akan menjadi cabang utama. Tidak diinginkan bagi saya untuk membuat kode orang lain menjadi cabang utama, dan saya sudah memiliki repo dengan cabang master. Sepertinya ini tidak perlu rumit hanya untuk melakukan upgrade.)
Mungkin ada beberapa solusi lain yang belum saya pikirkan.
Bagaimana cara terbaik saya pulih dari ini dengan kerugian sesedikit mungkin?
PEMBARUAN : Ini sedang dikembangkan (dalam Linux VM di laptop saya), dan belum diproduksi. Pada saat kami pergi ke produksi, saya berencana untuk membungkus semuanya dalam modul fitur, tetapi itu belum ada.
UPDATE 2 : Submodules mungkin tidak berfungsi. Menurut Pro Git , "Submodules memungkinkan Anda untuk menyimpan repositori Git sebagai subdirektori dari repositori Git lain". Drupal tidak memberikan pemisahan yang bagus. Alih-alih semua kode Drupal berada dalam subdirektori, hubungannya lebih atau kurang terbalik, tetapi masih tidak ada pemisahan yang bersih, karena Anda mungkin mengedit .htaccess dan robots.txt Anda, sehingga kode Anda dan repo Drupal dicampur bersama. Saya mencari solusi untuk masalah ini .
sumber
Jawaban:
Tampaknya dari diskusi di atas bahwa pertanyaan Anda bukan tentang memperbaiki repo git Anda, tetapi tentang memelihara situs Drupal di git, dan bagaimana cara kerjanya dengan pembaruan inti.
Saya pikir praktik standar sebenarnya menyimpan semua file dalam repositori Anda, termasuk inti Drupal. Pemisahan kode Drupal dari kode kustom sepertinya ide yang bagus, tapi saya rasa itu tidak perlu, dan saya tidak melihat keuntungan apa yang diberikannya kepada Anda. Tampaknya juga menganggap bahwa Anda tidak akan pernah ingin menambal inti (atau harus melakukannya sebagai bagian dari penyebaran Anda), yang, meskipun bukan praktik terbaik, jelas merupakan sesuatu yang ingin Anda dapat lakukan jika ada yang rusak dalam produksi. Menjaga komitmen Anda tetap baik dan fokus juga membantu mendapatkan pemisahan seperti ini.
Solusi yang saya gunakan adalah menyimpan semua kode di repositori yang sama, memasukkan sebanyak mungkin di Fitur atau jenis ekspor / kode / konfigurasi lainnya, dan memelihara daftar tambalan yang perlu diterapkan ke luar -box inti dan contrib.
Ketika Anda memperbarui inti, mulailah di lingkungan dev Anda:
drush sql-dump
). Entah membuat komitmen dengan dump atau menyimpannya di tempat yang aman.drush up drupal
)drush updb
produksi.git reset --hard HEAD~2
harus melakukannya), atau kembalikan kedua komit jika Anda ingin menyimpan riwayatnya. Ganti database Anda dengan dump.Basis data diperlukan karena Anda tidak dapat membatalkan perubahan yang dilakukan ke basis data dengan pembaruan. Anda juga dapat melakukan pembaruan di cabang, dalam hal mengembalikan hanya berarti memeriksa master. Ini sedikit tidak disarankan jika Anda bekerja di satu situs dev karena Anda tidak dapat benar-benar beralih kembali ke master dan tetap bekerja di sana secara paralel karena database.
Menggunakan alur kerja git-side yang lebih sederhana ini akan memungkinkan Anda untuk menggunakan kekuatan penuh git ketika Anda membutuhkannya tanpa kerumitan submodul, dll. Jika ini tampaknya tidak memadai, dapatkah Anda menjelaskan mengapa Anda memerlukan pemisahan kode lebih lanjut?
sumber
Dari komentar saya di atas, pertanyaan yang Anda miliki adalah tentang memelihara file situs Drupal dengan git, dan bagaimana cara kerjanya dengan pembaruan inti. Anda tidak menyebutkan apa pun tentang mencadangkan dan meningkatkan basis data. Saya akan mencoba untuk tidak menyalin apa pun dari jawaban goron.
Saya telah membuat posting blog tentang masalah ini. Mengupgrade inti Drupal di situs web Anda dengan Git
Metode Alternatif
Anda tidak menyatakan ini, tetapi jika Anda tertarik melacak perubahan antara versi Drupal, saya akan melakukan ini dengan menggunakan tag, bukan cabang . Setelah Anda selesai dengan komit pemutakhiran Anda untuk dikuasai , beri tag kode Anda sebagai 7.x.
sumber
Saya menjalankan pengaturan dengan dua cabang seperti OP: satu cabang dengan kode khusus saya saja, dan satu cabang yang memiliki file kustom dan inti. Saya mengalami situasi yang sama: file-file inti yang diabaikan dihapus ketika beralih antar cabang.
Saya akhirnya memiliki dua direktori git yang identik: - satu untuk mengerjakan kode kustom saya, dengan file inti yang ada tetapi diabaikan, dan saya tidak akan pernah beralih ke cabang "penuh" dalam direktori ini - satu untuk melakukan penggabungan, sehingga saya akan melakukan lakukan pemindahan cabang dan penggabungan di dalam direktori ini saja.
Alasan saya memilih pengaturan dua cabang ini adalah karena saya ingin dengan mudah melacak semua komit lokal ke file inti, lebih mudah untuk memeriksa dan menerapkan kembali mod inti saat memutakhirkan file inti.
sumber