Perubahan Dorong Terjadwal ke Gudang Git Lokal (Ubuntu)


2

Latar Belakang Membosankan - Ringkasan: Saya tahu kita tidak menggunakan GIT dengan benar! .
Ini dimulai sebagai proyek hobi kecil dan telah meningkat - perusahaan saya menggunakan Git untuk melacak / mengelola perubahan pada platform perangkat lunak berbasis web yang dipesan lebih dahulu dan bertindak sebagai pusat penyimpanan. Kira-kira 300 perangkat seluler kemudian diatur untuk menarik ke repositori kloning lokal saat memulai dari server intranet yang di-host sendiri sehingga mereka dapat mengakses versi terbaru perangkat lunak ketika tidak terhubung ke jaringan (kami menggunakan cabang sehingga mereka hanya terpapar kode yang sudah matang / teruji).

Kami sekarang telah pindah pada langkah - kami memiliki database "bagian" yang diperbarui setiap hari. Saya telah membuat versi terpisah dari basis data ini menggunakan skrip cron untuk membuat versi mandiri yang dapat dibuka pada "mesin tidak terhubung" lokal.

Masalah
Saya Saya memiliki satu set skrip PHP yang mengambil data tabel basis data dan mengekspornya ke dalam format file datar yang diperlukan oleh aplikasi, dan menyalin gambar tambahan sejak siklus terakhir ke lokasi yang benar. Semua file disimpan di/var/www/clonedrepository

Saya kemudian ingin menjalankan perintah berikut pada direktori:

git add .
git commit -m "Automatic update: todaysdate"
git push

Repositori diklon dari /home/git/repositorymana dilayani menggunakan symlink git deamon dan apache memungkinkan akses http (untuk kloning perangkat bodoh) dan SSH (untuk orang dewasa untuk mengedit / memperbarui).

Masalahnya adalah, saya seorang programmer web dan saya keluar dari kedalaman saya. Saya mengatur repositori git dan merasa nyaman dengan baris perintah, tetapi saya tidak tahu tempat terbaik untuk memulai.

Catatan: Tidak akan pernah ada konflik karena tidak ada pengguna yang akan mengedit file data dan sistem tidak akan mengedit apa pun selain file data.

Jadi secara ringkas , saya punya repositori sentral pada kotak Ubuntu Linux saya ( /home/git/repository) yang ingin saya perbarui setiap hari dari repositori yang dikloning ( /var/www/clonedrepository) pada kotak yang sama.

Jawaban:


2

OK, jadi saya mengerjakan ini sendiri ...

1) Saya telah membuat skrip yang berisi baris-baris berikut:

cd /var/www/partsdb/ >> /home/git/push.log
git pull >> /home/git/push.log
git add . >>/home/git/push.log
git commit -a -m "Scheduled Commit: `date`" >>/home/git/push.log
git push >> /home/git/push.log
echo "Push Backup Successful `date`" >> /home/git/push.log

Script ini pindah ke repositori yang berfungsi, menarik setiap perubahan dari repositori pusat (ingat perubahan ini hanya akan mempengaruhi file program, bukan file data), menambahkan file data yang diubah (disimpan dalam /datasub-direktori untuk kejelasan) melakukan perubahan (termasuk pesan berbasis tanggal otomatis untuk melacak perubahan / kesalahan) dan kemudian mendorong kembali ke repositori.

EDIT: Sejak itu saya telah menambahkan -abendera ke perintah commit, yang kemudian akan menghapus file yang dihapus oleh skrip pembaruan otomatis ( add .menambahkan file baru). [/SUNTING]

2) Saya memanggil skrip ini dari crontab, menjalankan skrip sebagai root (karena root hanya pengguna yang memiliki izin untuk menulis di folder home git dan folder / var / www) menggunakan perintah:

0 * * * * root /home/git/gitpush.sh

Ini menjalankan skrip setiap jam - sementara perangkat seluler yang terisolasi hanya akan menarik dari basis data saat startup (setiap hari / pagi) pengguna jaringan lokal akan selalu memiliki versi paling terbaru (yang telah didorong ke cabang utama).


Saya menduga mungkin ada cara yang lebih bersih / lebih rapi untuk menjalankan skrip, mungkin bukan sebagai root atau dengan tidak menggunakan crontab, tetapi ini adalah bagaimana saya telah menjawab pertanyaan saya sendiri. Saran masih diterima.
kieran_delaney
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.