3
Takeaways Key
cangkuk git adalah skrip mudah yang dijalankan sebelum atau selepas tindakan tertentu, seperti ujian sintaks pada fail yang dilakukan, dan boleh ditulis dalam mana -mana bahasa persekitaran boleh berfungsi.
cangkuk git tidak diedarkan dengan projek anda dan tidak boleh dipasang secara automatik, jadi ia memberi manfaat untuk mewujudkan tempat untuk cangkuk anda untuk hidup dan memberitahu kolaborator anda untuk menggunakannya.
- cangkuk git adalah cara yang kuat untuk mengautomasikan aliran kerja projek anda, membolehkan anda mengesahkan kod, melakukan mesej, memastikan persekitaran yang tepat, dan banyak lagi.
- cangkuk git adalah skrip mudah yang dijalankan sebelum atau selepas tindakan tertentu. Mereka berguna untuk pelbagai tugas, tetapi terutamanya saya mendapati mereka berguna untuk pengesahan sisi klien supaya kesilapan mudah dapat dicegah. Sebagai contoh, anda boleh menguji sintaks pada fail yang dilakukan, anda juga boleh menjalani ujian. Saya telah menulis cangkuk yang mengesahkan sintaks ranting, jalankan jshint ke standard, dan banyak lagi.
- cangkuk git juga sangat mudah dengan reka bentuk. GIT akan menjalankan cangkuk ini jika skrip boleh dilaksanakan dan Git akan membolehkan tindakan (misalnya komit atau tolak) berlaku selagi cangkuk keluar tanpa ralat (status 0). Cangkuk boleh ditulis dalam bahasa mana -mana persekitaran boleh berfungsi dengan.
- Terdapat dua jenis cangkuk:
Server-side-Ini dijalankan pada pelayan yang menganjurkan repositori git
cangkuk sisi pelayan tidak akan diliputi dalam artikel ini. Walau bagaimanapun, ambil perhatian bahawa jika projek anda berada pada perkhidmatan seperti GitHub, cangkuk sisi pelayan biasanya tidak berkenaan. Di GitHub, bersamaan dengan cangkuk sisi pelayan adalah menggunakan perkhidmatan dan webhooks yang boleh didapati dalam tetapan projek anda.
- fail cangkuk
- Setiap repositori termasuk yang anda klon secara lalai akan mempunyai cangkuk contoh dalam direktori .git/cangkuk:
kami akan memberi tumpuan kepada cangkuk pra-komit yang berjalan sebelum membenarkan komit.
Contoh cangkuk: Mengesahkan sintaks php
<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>Kami akan bermula dengan cangkuk yang sangat mudah, yang ditulis dalam bash, yang mengesahkan kod PHP yang dilakukan mempunyai sintaks yang sah. Ini adalah untuk menghalang komitmen "cepat" tetapi patah daripada berlaku. Sudah tentu saya tidak menggalakkan "komitmen sederhana" yang tidak mempunyai ujian, tetapi itu tidak bermakna mereka tidak akan berlaku.
dalam .git/cangkuk kita boleh memulakan fail baru yang dipanggil pra-komite. Ia mesti mempunyai keizinan untuk melaksanakan:
applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sample
<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>
Anda boleh menggunakan editor kegemaran anda untuk mula menulis. Pertama kita memerlukan shebang. Cara saya yang disukai adalah menggunakan/usr/bin/env kerana ini menggunakan jalan yang betul untuk aplikasi yang kita inginkan dan bukannya jalan yang keras dan mungkin tidak sah. Buat masa ini kita akan terus gagal supaya kita dapat menguji dengan mudah.
applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sample
PHP mempunyai pilihan yang berguna untuk pengesahan sintaks: -L. Ia memerlukan hujah fail tunggal, jadi kita perlu melengkapkan melalui apa sahaja fail PHP yang sedang diubah. Untuk kesederhanaan kami akan menganggap mana -mana fail PHP yang dilakukan sentiasa berakhir di .php. Oleh kerana cangkuk dijalankan dari akar repositori, kita boleh menggunakan arahan git standard untuk mendapatkan maklumat mengenai perubahan, seperti status git.
di atas garis #always gagal kita boleh menggunakan perkara berikut untuk mendapatkan semua fail php yang diubah suai:
<span>cd .git/hooks </span><span>touch pre-commit </span><span>chmod +x pre-commit</span>
Penjelasan:
- php_files = dalam tugasan bash dilakukan tanpa pembatas tetapi ambil perhatian bahawa merujuk pembolehubah memerlukan $ pembatas
- $ () adalah sintaks untuk 'mendapatkan output'. Petikan tidak diperlukan untuk menggunakan ini.
- AWK sedang digunakan di sini untuk mencetak $ 2. Status Git Lengkap -Line -short mempunyai ruang tambahan dan data tambahan pada mulanya, jadi kami mahu mengeluarkannya. AWK juga melakukan pelucutan automatik.
-
grep sekali lagi digunakan, tetapi sekarang sedang memeriksa untuk memastikan garisan berakhir di .php - sekarang kita dapat mengesahkan setiap fail dengan gelung:
Ini mungkin kelihatan agak pelik tetapi! PHP -L "$ I" (perhatikan petikan untuk mengelakkan isu dengan ruang) sebenarnya memeriksa nilai pulangan 0, tidak benar atau mana -mana jenis nilai yang biasanya kita harapkan dalam bahasa lain. Hanya untuk rujukan, kod PHP yang setara adalah:
<span>#!/usr/bin/env bash </span><span># Hook that checks PHP syntax </span> <span># Override IFS so that spaces do not count as delimiters </span><span>old_ifs=$IFS </span><span><span>IFS</span>=$'<span title="\n">\n'</span> </span> <span># Always fail </span><span>exit 1</span>
Saya membuat perubahan buruk kepada src/symfony/component/finder/glob.php dengan tujuan untuk menguji ini dan output dari git komit -m 'test' adalah seperti:
<span>php_files=<span>$(git status --short | grep -E '^(A|M)' | awk '{ print }' | grep -E '\.php$')</span></span>
Saya membuat gelung keluar dari keseluruhan skrip seawal mungkin dan ini akhirnya mungkin bukan apa yang kita mahu. Kami mungkin sebenarnya mahu ringkasan perkara untuk diperbaiki berbanding dengan harus terus berusaha. Sesiapa sahaja akan mudah kecewa dan mungkin belajar menggunakan komitmen git-tidak boleh dilakukan untuk memintas cangkuk sama sekali.
<span>for file in $php_files; do </span> <span>if ! php -l "<span>$i"</span>; then </span> <span>exit 1 </span> <span>fi </span><span>done</span>
Jadi, janganlah keluar dari kesilapan dengan php -l tetapi saya masih ingin menyimpan perkara yang mudah dibaca:
di sini kita menangkap output untuk php -l (dan memaksa output ralat standard ke output standard). Kami menyemak status keluar php -l menggunakan pembolehubah khas $? (yang merupakan kod status keluar) dan operator -EQ. Kami menyatakan bahawa ralat sintaks berlaku (perhatikan penggunaan $ {} untuk pembolehubah dalam rentetan). Akhirnya, kami memberikan garis yang relevan untuk kesilapan untuk memastikan output sedikit lebih ringkas (Grepping untuk '^parse ralat'), dan kami memberikan satu garis kosong untuk memastikan ini sedikit lebih mudah dibaca.
<span>foreach ($php_files as $file) { </span> <span>$retval = 0; </span> <span>$escapedFile = escapeshellarg($file); </span> <span>exec('php -l ' . $escapedFile, $retval); // $retval passed in as out parameter reference </span> <span>if ($retval !== 0) { </span> <span>exit(1); </span> <span>} </span><span>}</span>
Saya membuat dua pengubahsuaian yang buruk dan output untuk percubaan pada komit seperti ini:
<span>git clone git@github.com:symfony/symfony.git </span><span>cd symfony </span><span>ls .git/hooks</span>
Sekarang tindakan adalah untuk menyelesaikan masalah ini, menguji, dan cuba melakukan lagi.
Untuk melengkapkan skrip cangkuk, keluarkan keluar 1 di bahagian bawah skrip. Cuba lakukan fail PHP yang sah dan ia harus berfungsi seperti biasa.
Perkongsian cangkuk
cangkuk tidak diedarkan dengan projek anda dan tidak boleh dipasang secara automatik. Oleh itu, tindakan terbaik anda adalah untuk mewujudkan tempat untuk anda cangkuk untuk hidup (boleh berada di repositori yang sama) dan memberitahu kolaborator anda untuk menggunakannya. Jika anda membuat ini mudah untuk mereka, mereka lebih cenderung untuk melakukannya.
Satu cara mudah untuk melakukan ini adalah untuk membuat direktori cangkuk dan pemasangan pemasangan pemasangan yang mudah.
applypatch-msg.sample commit-msg.sample post-update.sample pre-applypatch.sample pre-commit pre-commit.sample prepare-commit-msg.sample pre-push.sample pre-rebase.sample update.sampleSesiapa yang klon projek anda hanya boleh menjalankan bassults.sh bashs.sh selepas pengklonan.
Ini juga mempunyai manfaat untuk menjaga cangkuk anda di bawah kawalan versi.
cangkuk lain
- menyediakan komitmen-msg-menyediakan mesej komit lalai jika tidak diberikan.
- Commit-Msg-Pengesahan mesej komit.
- post-commit-berjalan selepas komitmen yang berjaya.
- Pra-PUSH-berjalan sebelum push git selepas alat kawalan jauh disahkan berfungsi. Ia mengambil 2 argumen: nama jauh, dan url kepadanya.
- pra-rebase-berjalan sebelum git rebase.
- Post-checkout-berjalan selepas checkout yang berjaya.
- post-mere-berjalan selepas gabungan yang berjaya.
3 Berikut adalah satu dalam php:
<span>cd .git/hooks </span><span>touch pre-commit </span><span>chmod +x pre-commit</span>
Kesimpulan
cangkuk git adalah cara yang kuat untuk mengautomasikan aliran kerja projek anda. Anda boleh mengesahkan kod, membuat mesej, memastikan persekitaran adalah betul, dan lebih banyak lagi. Adakah terdapat sesuatu yang menarik untuk anda menggunakan cangkuk git? Beritahu kami dalam komen!<span>#!/usr/bin/env bash </span><span># Hook that checks PHP syntax </span> <span># Override IFS so that spaces do not count as delimiters </span><span>old_ifs=$IFS </span><span><span>IFS</span>=$'<span title="\n">\n'</span> </span> <span># Always fail </span><span>exit 1</span>
Soalan Lazim (Soalan Lazim) Mengenai Cangkuk Git
Apakah jenis cangkuk git yang berlainan? Cangkuk sisi klien dicetuskan oleh operasi seperti melakukan dan menggabungkan, sementara cangkuk sisi pelayan dijalankan pada operasi rangkaian seperti menerima komitmen yang ditolak. Setiap cangkuk boleh disesuaikan untuk memenuhi keperluan operasi khusus anda.
Bagaimana saya membuat cangkuk git? Di sini, anda akan dapati skrip sampel untuk pelbagai cangkuk. Untuk membuat cangkuk baru, buat fail tanpa sebarang pelanjutan (contohnya, pra-komit Bagaimana saya boleh menggunakan cangkuk git untuk automasi? Sebagai contoh, anda boleh menggunakan cangkuk pra-komit untuk menjalankan ujian secara automatik atau linter pada kod anda sebelum setiap komit. Ini memastikan bahawa hanya diuji dan kod diformat yang betul komited ke repositori.
Bolehkah saya berkongsi cangkuk git dengan pasukan saya? Ini kerana ia disimpan dalam direktori .GIT, yang tidak versi. Walau bagaimanapun, anda boleh membagikannya dengan pasukan anda dengan menyimpannya dalam direktori berasingan dalam projek anda dan membuat skrip untuk menghidupkannya ke dalam. >
cangkuk git boleh digunakan untuk menguatkuasakan dasar projek atau syarikat. Contohnya, anda boleh menggunakan cangkuk pra-penerima di sisi pelayan untuk menolak sebarang dorongan yang tidak mematuhi dasar anda (mis., Bermula yang tidak mengikuti format tertentu). Bahasa apa Bolehkah saya gunakan untuk menulis cangkuk git?
cangkuk git adalah skrip, jadi anda boleh menulisnya dalam bahasa skrip. Sampel lalai ditulis dalam bash, tetapi anda boleh menggunakan bahasa yang anda selesa dengan, seperti python atau ruby.
Bolehkah saya menggunakan cangkuk git untuk diintegrasikan dengan alat lain? Cangkuk git boleh digunakan untuk mengintegrasikan Git dengan alat lain. Sebagai contoh, anda boleh menggunakan cangkuk pasca komitmen untuk mencetuskan membina pelayan integrasi berterusan anda atau mengemas kini tiket dalam sistem pengesanan isu anda.
Bagaimana saya boleh debug cangkuk git? Debugging cangkuk git boleh dilakukan dengan menulis maklumat ke fail dari skrip cangkuk. Sebagai contoh, anda boleh mengalihkan output arahan ke fail log untuk memeriksa kemudian. komit, anda boleh menggunakan pilihan-no-verifikasi dengan arahan komit git. Ini boleh berguna apabila anda menjalankan perubahan kecil yang tidak memerlukan cek yang dilaksanakan di cangkuk anda. berkuasa, mereka harus digunakan dengan berhati -hati. Cangkuk yang kurang ditulis boleh menyebabkan masalah, termasuk menolak semua komitmen atau kehilangan data. Sentiasa menguji cangkuk anda dengan teliti sebelum menggunakannya.
Atas ialah kandungan terperinci Pengenalan cangkuk git. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Tinggal maklumat mengenai trend teknologi terkini dengan surat berita pemaju teratas ini! Senarai ini menawarkan sesuatu untuk semua orang, dari peminat AI ke pemaju backend dan frontend yang berpengalaman. Pilih kegemaran anda dan menjimatkan masa mencari rel

Tutorial ini membimbing anda melalui membina saluran paip pemprosesan imej tanpa pelayan menggunakan perkhidmatan AWS. Kami akan membuat frontend next.js yang digunakan pada kluster ECS Fargate, berinteraksi dengan Gateway API, Fungsi Lambda, Bucket S3, dan DynamoDB. Th

Program perintis ini, kerjasama antara CNCF (Yayasan Pengkomputeran Native Cloud), pengkomputeran ampere, equinix metal, dan digerakkan, menyelaraskan ARM64 CI/CD untuk projek GitHub CNCF. Inisiatif ini menangani kebimbangan keselamatan dan prestasi lim

Pengimbas kelemahan rangkaian berasaskan GO ini dengan cekap mengenal pasti kelemahan keselamatan yang berpotensi. Ia memanfaatkan ciri konkurensi Go untuk kelajuan dan termasuk pengesanan perkhidmatan dan pemadanan kelemahan. Mari kita meneroka keupayaan dan etika


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

SecLists
SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)
