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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

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

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

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

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Suka atau tidak, kecerdasan buatan telah menjadi sebahagian daripada kehidupan seharian. Banyak peranti-termasuk pisau cukur elektrik dan berus gigi-telah menjadi berkuasa AI, "menggunakan algoritma pembelajaran mesin untuk mengesan bagaimana seseorang menggunakan peranti, bagaimana devi

Model kecerdasan buatan baru (AI) telah menunjukkan keupayaan untuk meramalkan peristiwa cuaca utama dengan lebih cepat dan dengan ketepatan yang lebih besar daripada beberapa sistem ramalan global yang paling banyak digunakan. Model ini, bernama Aurora, telah dilatih U

Semakin tepatnya kita cuba membuat fungsi model AI, semakin besar pelepasan karbon mereka menjadi - dengan petunjuk tertentu menjana sehingga 50 kali lebih banyak karbon dioksida daripada yang lain, menurut kajian baru -baru ini. Model -model yang berlaku seperti Claude Antropik

Model kecerdasan buatan (AI) boleh mengancam dan memeras ugut manusia apabila terdapat konflik antara objektif model dan keputusan pengguna, menurut satu kajian baru. Diterbitkan pada 20 Jun, penyelidikan yang dijalankan oleh firma AI Anthropic memberikan lnya L

Kebimbangan utama dengan teknologi besar yang bereksperimen dengan kecerdasan buatan (AI) bukanlah ia mungkin menguasai kemanusiaan. Isu sebenar terletak pada ketidaktepatan model bahasa besar (LLMS) yang berterusan seperti chatgpt AI, Gemini Google, dan

Kecerdasan buatan yang lebih maju (AI) menjadi, semakin cenderung "halusinasi" dan memberikan maklumat palsu atau tidak tepat. Menurut penyelidikan oleh Openai, model penalaran yang paling baru dan berkuasa-O3 dan O4-mini-Exhibited H

Model penalaran kecerdasan buatan (AI) tidak begitu mampu seperti yang muncul. Pada hakikatnya, prestasi mereka rosak sepenuhnya apabila tugas menjadi terlalu rumit, menurut penyelidik di Apple. Model -model yang rumit seperti Claude Anthropic, terbuka

Agensi Jenayah Kebangsaan UK (NCA) telah menahan empat individu yang disyaki terlibat dalam serangan siber yang menyasarkan Marks dan Spencer (M & S), Co-op, dan Harrods.
