Kami ingin membuat beberapa skrip kait dasar yang dapat kami bagikan bersama - untuk hal-hal seperti pra-pemformatan pesan komit. Git memiliki skrip kait untuk itu yang biasanya disimpan di bawah <project>/.git/hooks/
. Namun, skrip tersebut tidak disebarkan ketika orang melakukan klon dan mereka tidak dikontrol versi.
Apakah ada cara yang baik untuk membantu semua orang mendapatkan skrip kait yang benar? Bisakah saya membuat skrip kait itu menunjuk ke skrip yang dikendalikan versi di repo saya?
pre-commit
membuatnya mudah untuk kait pra-komit. Tidak menjawab pertanyaan OP tentang mengelola sembarang git sewenang-wenang, tetapi kait pra-komit mungkin yang paling sering digunakan untuk tujuan kualitas kode.Jawaban:
Secara teoritis, Anda dapat membuat
hooks
direktori (atau nama apa pun yang Anda inginkan) di direktori proyek Anda dengan semua skrip, dan kemudian menghubungkannya.git/hooks
. Tentu saja, setiap orang yang mengkloning repo harus mengatur symlinks ini (walaupun Anda bisa menjadi sangat mewah dan memiliki skrip deploy yang dapat dijalankan oleh cloner untuk mengaturnya secara semi-otomatis).Untuk melakukan symlink pada * nix, yang perlu Anda lakukan adalah:
gunakan
ln -sf
jika Anda siap untuk menimpa apa yang ada di dalamnya.git/hooks
sumber
core.hooksPath
mengatur file di luar .git untuk menautkan ke folder hooks.Di Git 2.9 , opsi konfigurasi
core.hooksPath
menentukan direktori kait kustom.Pindahkan kait Anda ke
hooks
direktori yang dilacak di repositori Anda. Kemudian, konfigurasikan setiap instance repositori untuk menggunakan yang dilacakhooks
alih-alih$GIT_DIR/hooks
:Secara umum, path mungkin absolut, atau relatif ke direktori tempat hook dijalankan (biasanya root tree yang berfungsi; lihat DESCRIPTION bagian dari
man githooks
).sumber
Jika proyek Anda adalah proyek JavaScript dan Anda gunakan
npm
sebagai pengelola paket, Anda dapat menggunakan shared-git-hooks untuk menjalankan githooknpm install
.sumber
.git/hooks
.Untuk pengguna Nodejs solusi sederhana adalah memperbarui package.json dengan
Pra - instal akan berjalan sebelumnya
dan arahkan kembali git untuk mencari kait di dalam direktori. \ hooks (atau nama apa pun yang Anda pilih). Direktori ini harus meniru . \. Git \ hooks dalam hal nama file (minus .sample) dan struktur.
Bayangkan Maven dan alat bangunan lainnya akan memiliki setara dengan pra - instal .
Ini juga harus bekerja di semua platform.
Jika Anda memerlukan info lebih lanjut, lihat https://www.viget.com/articles/two-ways-to-share-git-hooks-with-your-team/
sumber
Bagaimana dengan git-hooks , itu merutekan
.git/hooks
memohon ke dalam skrip di bawah direktori proyekgithooks
.Ada juga banyak fitur untuk memungkinkan Anda meminimalkan copy dan symlink hook di semua tempat.
sumber
Sebagian besar bahasa pemrograman modern, atau lebih tepatnya alat bangun mereka, mendukung plugin untuk mengelola kait git. Itu berarti semua yang perlu Anda lakukan adalah mengonfigurasi package.json, pom.xml, dll., Dan siapa pun di tim Anda tidak akan memiliki pilihan selain mematuhi kecuali mereka mengubah file build. Plugin akan menambahkan konten ke direktori .git untuk Anda.
Contoh:
https://github.com/rudikershaw/git-build-hook
https://github.com/olukyrich/githook-maven-plugin
https://www.npmjs.com/package/git-hooks
sumber
Kami menggunakan solusi Visual Studio (dan dengan demikian proyek) yang memiliki acara pra dan pasca pembuatan. Saya menambahkan proyek tambahan bernama 'GitHookDeployer'. Proyek sendiri memodifikasi file dalam acara post build. File itu diatur untuk disalin ke direktori build. Dengan demikian proyek ini dibangun setiap waktu dan tidak pernah dilewati. Dalam acara build, itu juga memastikan bahwa semua kait git ada di tempatnya.
Perhatikan bahwa ini bukan solusi umum, karena beberapa proyek, tentu saja, tidak punya apa-apa untuk dibangun.
sumber
Anda dapat menggunakan solusi terkelola untuk manajemen kait pra-komitmen seperti pra-komitmen . Atau solusi terpusat untuk git-hook sisi-server seperti Datree.io . Ini memiliki kebijakan bawaan seperti:
Itu tidak akan menggantikan semua kait Anda, tetapi mungkin membantu pengembang Anda dengan yang paling jelas tanpa konfigurasi neraka menginstal kait pada setiap pengembang komputer / repo.
Penafian: Saya adalah salah satu pendiri Datrees
sumber
Anda dapat membuat folder hook Anda sebagai repositori git lain dan menautkannya sebagai submodule ... Saya rasa itu hanya layak jika Anda memiliki banyak anggota dan hook berubah secara teratur.
sumber
Idealnya, kait ditulis dalam bash, jika Anda mengikuti file sampel. Tetapi Anda dapat menulisnya dalam bahasa apa pun yang tersedia, dan pastikan bendera tersebut memiliki tanda executable.
Jadi, Anda dapat menulis kode Python atau Go untuk mencapai tujuan Anda, dan letakkan di bawah folder hooks. Ini akan berfungsi, tetapi tidak akan dikelola bersama dengan repositori.
Dua pilihan
a) Multi Script
Anda dapat memberi kode pada kait di dalam bantuan Anda, dan menambahkan sebagian kecil kode ke kait, untuk memanggil skrip sempurna Anda, seperti ini:
b) Naskah Tunggal
Opsi yang lebih keren adalah menambahkan hanya satu skrip untuk mengatur semuanya, bukan beberapa skrip. Jadi, Anda membuat kait / mysuperhook.go dan arahkan setiap kait yang Anda inginkan.
Parameter akan memberikan skrip yang dipicu oleh skrip Anda, dan Anda dapat membedakannya di dalam kode Anda. Mengapa? Kadang-kadang Anda mungkin ingin menjalankan cek yang sama untuk komit dan push, misalnya.
Lalu?
Kemudian, Anda mungkin ingin memiliki fungsionalitas lebih lanjut, seperti:
Bisakah ini lebih sederhana?
Ya, ada beberapa alat untuk membantu Anda mengelola git-hooks. Masing-masing dirancang untuk mengatasi masalah dari perspektif yang berbeda, dan Anda mungkin perlu memahami semuanya untuk mendapatkan yang terbaik untuk Anda atau tim Anda. GitHooks.com menawarkan banyak bacaan tentang mengait, dan beberapa alat tersedia saat ini.
Sampai hari ini, ada 21 proyek yang terdaftar di sana dengan berbagai strategi untuk mengelola kait git. Beberapa hanya melakukannya untuk satu kait, beberapa untuk bahasa tertentu, dan sebagainya.
Salah satu alat itu, yang ditulis oleh saya dan ditawarkan secara gratis sebagai proyek opensource, disebut hooks4git . Itu ditulis dalam Python (karena saya suka) tetapi idenya adalah untuk menangani semua item yang tercantum di atas dalam file konfigurasi tunggal bernama .hooks4git.ini, yang hidup di dalam repositori Anda dan dapat memanggil skrip apa pun yang ingin Anda panggil, dalam bahasa apa pun .
Menggunakan kait git benar-benar fantastis, tetapi cara mereka ditawarkan biasanya hanya membuat orang menjauh darinya.
sumber
Untuk pengguna gradle
Saya menemukan skrip ini sangat berguna untuk proyek gradle.
build.gradle
apply from: rootProject.file('gradle/install-git-hooks.gradle')
gradle / install-git-hooks.gradle
pra-komit
sumber