Bagaimana cara membuat file pembaruan "git push" di host web Anda?

13

Saya memiliki beberapa situs yang semuanya dihosting di layanan hosting web yang sama di bawah shared hosting. Host web saya mendukung Git dan saya memiliki akses SSH, dan saya juga memiliki setup Git di laptop saya juga.

Saya ingin membuatnya sehingga ketika saya melakukan "git push origin master", itu akan secara otomatis memperbarui file di server web saya, dan juga menyimpan cadangan file komit sebelumnya sehingga saya dapat dengan mudah mengembalikan jika saya mau. Apakah ini mungkin?

Ryan
sumber
Ingin tahu - siapa penyedia hosting Anda?
pengguna
Dan mengapa Anda menginginkan "cadangan file komit sebelumnya"? Anda bisa mendorong komit sebelumnya, jika Anda ingin mundur (dengan asumsi Anda selalu tahu apa yang Anda tekan terakhir - tetapi Anda harus tahu itu).
sleske

Jawaban:

12

Ini dirangkum dari Menggunakan Git untuk mengelola situs web

Kunci untuk proses ini adalah kait sisi server 'pasca-menerima' (lebih lanjut tentang kait git di Menyesuaikan Git - Kait Git dan halaman manual githooks ). Hook ini berjalan setelah server menerima semua data.

Setelah server menerima data, ia menjalankan git checkout -f opsi -f akan memaksa checkout ke kepala bahkan jika ada perbedaan lokal.

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Masukkan itu di hooks/direktori sebagai post-receivedan dapat dieksekusi. Tentu saja, lintasan berubah ke tempat Anda memiliki file server web Anda (penggunaan GIT_WORK_TREEset variabel lingkungan sehingga Anda tidak perlu menyulap file titik dan pengaturan git di server).

Untuk memutar kembali, kita harus menandai setiap rilis (ini dapat dilakukan sebagai bagian dari pengait pasca-komit juga). Dengan menandai rilis, orang dapat dengan mudah mengidentifikasi tempat untuk rollback, meskipun itu kemungkinan melibatkan masuk ke server dan memeriksa tag itu.


sumber
Perlu dicatat bahwa ini berarti Anda menggunakan git sebagai alat penyebaran, yang sebenarnya tidak dimaksudkan untuk itu. Ini bisa berfungsi, tetapi ada banyak batasan (perlu mengunduh seluruh repo, tidak ada cara untuk memohon skrip atau mengelola izin file, tidak ada cara untuk membongkar barang ...). Mungkin lebih baik menggunakan alat penyebaran yang tepat.
sleske
@sleske Anda dapat melakukan semua itu di post-receivehook, yang sebenarnya hanya sebuah skrip di mana Anda dapat memasukkan apa pun yang Anda inginkan.
Mario
@ Mario: Ya, Anda bisa - yang berarti Anda secara efektif menerapkan solusi penempatan Anda sendiri sebagai pengait pasca-terima. Masih ada manfaat menggunakan solusi yang ada, tetapi kadang-kadang roll-Anda-sendiri mungkin yang terbaik ...
sleske
Anda bahkan dapat checkout ke folder perantara dan memiliki tautan dari folder web ke folder perantara untuk menghindari file .git di folder web Anda.
Bent
0

Cara paling sederhana untuk memperbarui pohon kerja repositori yang Anda dorong adalah pengaturan git config receive.denyCurrentBranch updateInstead di sisi penerima. Lihat https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch

Jawaban Ryan dengan kait komit lebih baik karena memungkinkan memeriksa ke beberapa lokasi yang berbeda (Anda mungkin tidak ingin memiliki .git di folder web Anda). Tetapi pada tingkat ini, mungkin ide yang baik untuk menggunakan beberapa alat penyebaran yang ada, seperti kata sleske dalam komentar.

Echsecutor
sumber