Apakah mungkin untuk menggunakan situs web menggunakan git push
? Saya punya firasat itu ada hubungannya dengan menggunakan kait git untuk melakukan git reset --hard
di sisi server, tapi bagaimana saya bisa menyelesaikan ini?
git
deployment
webserver
githooks
Kyle Cronin
sumber
sumber
Jawaban:
Saya menemukan script ini di situs ini dan tampaknya bekerja cukup baik.
Pada salinan lokal Anda, modifikasi file .git / config Anda dan tambahkan server web Anda sebagai remote:
Di server, ganti .git / hooks / post-update dengan file ini (dalam jawaban di bawah)
Tambahkan akses eksekusi ke file (sekali lagi, di server):
Sekarang, cukup tekan secara lokal ke server web Anda dan itu akan secara otomatis memperbarui copy pekerjaan:
sumber
Menggunakan file pasca pembaruan di bawah ini:
Pada salinan lokal Anda, modifikasi file .git / config Anda dan tambahkan server web Anda sebagai remote:
Di server, ganti .git / hooks / post-update dengan file di bawah ini
Tambahkan akses eksekusi ke file (sekali lagi, di server):
Sekarang, cukup tekan secara lokal ke server web Anda dan itu akan secara otomatis memperbarui copy pekerjaan:
sumber
Setelah banyak kesalahan awal dan jalan buntu, saya akhirnya dapat menggunakan kode situs web hanya dengan "git push remote " berkat artikel ini .
Script post-update penulis hanya sepanjang satu baris dan solusinya tidak memerlukan konfigurasi .htaccess untuk menyembunyikan repo Git seperti yang dilakukan beberapa orang lain.
Beberapa batu sandungan jika Anda menggunakan ini pada instance Amazon EC2;
1) Jika Anda menggunakan sudo untuk membuat repositori tujuan kosong, Anda harus mengubah pemilik repo ke pengguna ec2 atau push akan gagal. (Coba "chown ec2-user: repo -user ec2 .")
2) Dorongan akan gagal jika Anda tidak melakukan pra-konfigurasi lokasi amazon-private-key .pem Anda, baik di / etc / ssh / ssh_config sebagai parameter IdentityFile atau di ~ / .ssh / config menggunakan "[ Host] - HostName - IdentityFile - User "layout dijelaskan di sini ...
... NAMUN jika Host dikonfigurasi dalam ~ / .ssh / config dan berbeda dari HostName, push Git akan gagal. (Itu mungkin bug Git)
sumber
jangan menginstal git di server atau menyalin folder .git di sana. untuk memperbarui server dari klon git, Anda dapat menggunakan perintah berikut:
Anda mungkin harus menghapus file yang dihapus dari proyek.
ini menyalin semua file yang diperiksa. rsync menggunakan ssh yang diinstal pada server.
semakin sedikit perangkat lunak yang Anda instal di server, semakin aman dia dan semakin mudah mengelola konfigurasi dan mendokumentasikannya. juga tidak perlu menyimpan klon git lengkap di server. itu hanya membuatnya lebih kompleks untuk mengamankan semuanya dengan benar.
sumber
Intinya semua yang perlu Anda lakukan adalah sebagai berikut:
Saya memiliki garis-garis dalam aplikasi saya sebagai executable yang dipanggil
deploy
.jadi ketika saya ingin melakukan penyebaran saya ketik
./deploy myserver mybranch
.sumber
ssh -A ...
git pull
harus dihindari untuk penyebaran otomatis karena bagian gabungan dari itu bisa memerlukan pembersihan manual jika ada konflik.Cara saya melakukannya adalah saya memiliki repositori telanjang Git di server penempatan tempat saya mendorong perubahan. Kemudian saya masuk ke server penyebaran, mengubah ke direktori server web server yang sebenarnya, dan melakukan git pull. Saya tidak menggunakan pengait untuk mencoba melakukan ini secara otomatis, sepertinya lebih banyak masalah daripada nilainya.
sumber
git reset
untuk mundur di antara perubahan terbaru (semua melakukan, bukan hanya seluruh tarikan). Jika Anda perlu memutar kembali sesuatu yang spesifik yang bukan komit terbaru, maka Anda dapat menggunakangit revert
tetapi itu mungkin harus digunakan hanya dalam keadaan darurat (git revert
membuat komit baru yang menghilangkan efek dari beberapa komit sebelumnya).git config --local receive.denyCurrentBranch updateInstead
Ditambahkan di Git 2.3, ini bisa menjadi kemungkinan yang baik: https://github.com/git/git/blob/v2.3.0/Documentation/config.txt#L2155
Anda mengaturnya di repositori server, dan itu juga memperbarui pohon kerja jika itu bersih.
Ada perbaikan lebih lanjut dalam 2.4 dengan
push-to-checkout
pengait dan penanganan cabang yang belum lahir .Penggunaan sampel:
Keluaran:
Ini memang memiliki kekurangan berikut yang disebutkan pada pengumuman GitHub :
Tetapi semua poin tersebut berada di luar lingkup Git dan harus diurus dengan kode eksternal. Jadi dalam hal ini, ini, bersama dengan kait Git, adalah solusi utama.
sumber
Pembaruan: Saya sekarang menggunakan solusi Lloyd Moore dengan agen utama
ssh -A ...
. Mendorong ke repo utama dan kemudian menariknya secara paralel dari semua mesin Anda sedikit lebih cepat dan membutuhkan lebih sedikit pengaturan pada mesin-mesin itu.Tidak melihat solusi ini di sini. tekan saja ssh jika git diinstal di server.
Anda memerlukan entri berikut di .git / config lokal Anda
Tapi hei, ada apa dengan itu
amazon:
? Di ~ / .ssh / config lokal Anda, Anda harus menambahkan entri berikut:sekarang kamu bisa menelepon
(BTW: /path/to/project.git berbeda dengan direktori / jalur / ke / proyek kerja aktual)
sumber
Untuk Skenario Penempatan
Dalam skenario kami, kami menyimpan kode di github / bitbucket dan ingin menggunakan server langsung. Dalam hal ini, kombinasi berikut berfungsi untuk kami (yang merupakan remix dari jawaban yang sangat dipilih di sini) :
.git
direktori Anda ke server web Andagit remote add live ssh://user@host:port/folder
git config receive.denyCurrentBranch ignore
Pada jarak jauh:
nano .git/hooks/post-receive
dan tambahkan konten ini:#!/bin/sh GIT_WORK_TREE=/var/www/vhosts/example.org git checkout -f
Pada jarak jauh:
chmod +x .git/hooks/post-receive
git push live
Catatan
Jika
.git
folder Anda di dalam root dokumen pastikan Anda menyembunyikannya dari luar dengan menambahkan.htaccess
( sumber ):RedirectMatch 404 /\..*$
sumber
Kami menggunakan capistrano untuk mengelola penyebaran. Kami membangun capistrano untuk digunakan pada server pementasan, dan kemudian menjalankan rsync dengan semua server kami.
Dengan capistrano, kita dapat membuat rollback mudah jika terjadi bug
sumber
Giddyup adalah bahasa-agnostik hanya-tambahkan-air kait git untuk mengotomatiskan penyebaran melalui dorongan git. Hal ini juga memungkinkan Anda untuk memiliki kait start / stop kustom untuk memulai kembali server web, pemanasan cache dll.
https://github.com/mpalmer/giddyup
Lihat contoh .
sumber
Sepertinya Anda harus memiliki dua salinan di server Anda. Salinan kosong, tempat Anda dapat mendorong / menarik, yang akan mendorong perubahan saat selesai, dan kemudian Anda akan mengkloning ini ke direktori web Anda dan mengatur cronjob untuk memperbarui git pull dari direktori web Anda setiap hari atau begitu.
sumber
Anda bisa mengatur hook git yang ketika mengatakan komit dibuat untuk mengatakan cabang "stable" itu akan menarik perubahan dan menerapkannya ke situs PHP. Kelemahan besar adalah Anda tidak akan memiliki banyak kontrol jika terjadi kesalahan dan itu akan menambah waktu untuk pengujian Anda - tetapi Anda bisa mendapatkan gambaran tentang berapa banyak pekerjaan yang akan terlibat ketika Anda menggabungkan mengatakan cabang trunk Anda ke cabang stabil untuk mengetahui berapa banyak konflik Anda mungkin temui. Penting untuk mengawasi semua file yang spesifik untuk situs (mis. File konfigurasi) kecuali Anda hanya bermaksud menjalankan satu situs saja.
Atau apakah Anda sudah melihat mendorong perubahan ke situs?
Untuk informasi tentang kait git, lihat dokumentasi githooks .
sumber
Saya mengambil solusi Kristen .
sumber
Saya menggunakan solusi berikut oleh toroid.org , yang memiliki skrip kait yang lebih sederhana.
di server:
dan instal hook di server:
pada klien Anda:
lalu untuk menerbitkan, ketikkan saja
Ada deskripsi lengkap di situs web: http://toroid.org/ams/git-website-howto
sumber
git push web +master:refs/heads/master
bukannya adilgit push web master
?Sebagai jawaban pelengkap saya ingin menawarkan alternatif. Saya menggunakan git-ftp dan berfungsi dengan baik.
https://github.com/git-ftp/git-ftp
Mudah digunakan, hanya ketik:
dan git akan secara otomatis mengunggah file proyek.
Salam
sumber
Diberikan lingkungan di mana Anda memiliki banyak pengembang yang mengakses repositori yang sama, panduan berikut dapat membantu.
Pastikan Anda memiliki grup unix yang dimiliki oleh semua dev dan berikan kepemilikan repositori .git ke grup itu.
Dalam .git / config dari repositori server, set sharedrepository = true. (Ini memberitahu git untuk mengizinkan banyak pengguna yang diperlukan untuk melakukan dan menyebarkan.
atur umask dari setiap pengguna di file bashrc mereka menjadi sama - 002 adalah awal yang baik
sumber
Saya akhirnya membuat alat penyebaran rudimenter saya sendiri yang secara otomatis akan menarik pembaruan baru dari repo - https://github.com/jesalg/SlimJim - Pada dasarnya ia mendengarkan post-accept-hook github dan menggunakan proxy untuk memicu suatu perbarui skrip.
sumber
Saya menggunakan dua solusi untuk hook pasca-terima:
SOLUSI TERGANTUNG 1
SOLUSI TERGANTUNG 2
Kedua solusi didasarkan pada solusi sebelumnya yang tersedia di utas ini.
Perhatikan, BRANCH_REGEX = '^ $ {GIT_BRANCH1}.filter $ 'untuk nama cabang yang cocok dengan string "master " atau "dev *", dan menyebarkan pohon kerja, jika cabang yang didorong cocok. Ini memungkinkan untuk menyebarkan versi dev dan versi master ke tempat yang berbeda.
SOLUSI DEPLOY 1 hanya menghapus file, yang merupakan bagian dari repo, dan telah dihapus oleh komit. Ini lebih cepat dari Solusi Penerapan 2.
DEPLOY SOLUTION 2 memiliki kelebihan, yaitu akan menghapus semua file baru dari direktori produksi, yang ditambahkan di sisi server, tidak peduli apakah itu ditambahkan ke repo atau tidak. Itu akan selalu bersih dari repo. Ini lebih lambat dari Solusi Penerapan 1.
sumber