cari
RumahPeranti teknologiindustri ITPengenalan cangkuk git

3

Takeaways Key An Introduction to Git Hooks

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. Pengenalan cangkuk git

Dua jenis cangkuk wujud: sisi klien, yang dijalankan pada sistem pemaju, dan sisi pelayan, yang dijalankan pada pelayan yang menganjurkan repositori git.

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. pihak klien-ini dijalankan pada sistem pemaju

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:
Dalam direktori itu, anda akan melihat sesuatu seperti:

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.
  • grep sedang digunakan untuk memeriksa (a) dan fail yang diubah suai (m)
  • 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.sample
Sesiapa 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.
cangkuk ini umumnya berfungsi sama seperti pra-komit walaupun mereka mengambil argumen. Satu kes penggunaan untuk pasca pemeriksaan adalah untuk memastikan bahawa fail sentiasa mendapat kebenaran yang betul (kerana git hanya menjejaki boleh dilaksanakan, tidak boleh dilaksanakan dan pautan simbolik):

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!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Surat berita pemaju 21 teratas untuk melanggan pada tahun 2025Surat berita pemaju 21 teratas untuk melanggan pada tahun 2025Apr 24, 2025 am 08:28 AM

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

Paip pemprosesan imej tanpa pelayan dengan AWS ECS dan LambdaPaip pemprosesan imej tanpa pelayan dengan AWS ECS dan LambdaApr 18, 2025 am 08:28 AM

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

CNCF Arm64 Pilot: Impak dan WawasanCNCF Arm64 Pilot: Impak dan WawasanApr 15, 2025 am 08:27 AM

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

Membina pengimbas kelemahan rangkaian dengan pergiMembina pengimbas kelemahan rangkaian dengan pergiApr 01, 2025 am 08:27 AM

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

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

DVWA

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

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

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

SecLists

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

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)