Git Hooks – Pre Commit

Git Hooks – Pre Commit

Merhaba arkadaşlar.

Bu yazıda, git hooks komutlarından bahsedeceğim ve pre-commit komutuna değineceğim.

 Git Hooks Nedir

Git Hooks, commit, push ve receive gibi git eventleri tetiklendiği zaman çalıştırılan komutlardır.

Aşağıda örnek birkaç git hooks komutu mevcut. Bunları istediğiniz kadar genişletebilir ve ihtiyaçlarınıza göre tamamen şekillendirebilirsiniz.

  • pre-commit: Kod içerisinde heceleme hataları var mı kontrol et. (eslint)
  • pre-receive: Projenin standartlarına zorla.
  • post-commit: Takım üyesine mail at.
  • post-receive: Production’a gönder.

İşte bütün Git Hooks eventleri:

  • applypatch-msg
  • pre-applypatch
  • post-applypatch
  • pre-commit
  • prepare-commit-msg
  • commit-msg
  • post-commit
  • pre-rebase
  • post-checkout
  • post-merge
  • pre-receive
  • update
  • post-receive
  • post-update
  • pre-auto-gc
  • post-rewrite
  • pre-push

Detaylarına buradan  bakabilirsiniz.

 Pre-Commit Hook

Yukarıda gördüğünüz gibi birçok hook mevcut ancak genelde pre-commit bunlardan en meşhur olanıdır çünkü codebase’imize yanlışlıkla standardınıza uymayan veya hatalı bir şey gitsin istemeyiz.

Bu yazımda, bir Javascript projesi için örnek vereceğim. Örneğimizde, lint, lint-staged, pre-commit kullanacağız.

Hazırsak başlayalım…

Öncelikle projemize ekleyelim bunları.

Eklemek için: npm install eslint lint-staged pre-commit --save-dev komutunu çalıştırın.

Eslint bildiğiniz üzere .eslintrc dosyasındaki kurallara göre çalışmaktadır.

O yüzden .eslintrc dosyası oluşturup içine aşağıdaki gibi basit bir ekleme yapabiliriz.

{
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module",
"ecmaFeatures": {
"jsx": true
}
},
"rules": {
"semi": ["error", "always"],
"quotes": ["error", "single"]
}
}

Bundan sonra en can alıcı noktaya geldik. Bu kısımda package.json içerisine gerekli pre-commit eventi tetiklendiğinde çalışacak script’i oluşturma işini yapacağız.

Aşağıdaki gibi package.json içerisine bir script yazabiliriz.

...
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"lint:eslint:fix": "eslint --ignore-path .gitignore --ignore-pattern internals/scripts",
"lint:staged": "lint-staged"
},
"lint-staged": {
"*.js": [
"npm run lint:eslint:fix",
"git add --force"
]
},
"pre-commit": "lint:staged",
"resolutions": {
"babel-core": "7.0.0-bridge.0"
},
...

Bu yazdığımız script sayesinde, stage adımına alınmış dosyalarımı eslint kontrol ediyor ve hata var ise commit atmamı engelliyor.

Aşağıda eslint hata vermiş bir dosyayı commit atmaya çalışırken aldığım hatayı görebilirsiniz.

git hooks pre-commit

Başka bir yazıda görüşmek üzere, iyi kodlamalar…


Paylaş :

Full Stack Developer · Yazılım Tutkunu · Fikir, kod ve teknoloji Daha fazlası için hakkımda sayfasını ziyaret edebilirsiniz.



Bu yazı hakkındaki görüşünü benimle paylaşmaya ne dersin ?


Email adresiniz yayınlanmayacaktır.

Yorum yap butonuna
  bastıktan sonra yorumunuz gönderilecektir. Yorumunuz incelenip onaylandıktan sonra diğer ziyaretçilerimiz tarafından da görünecektir. Lütfen, yorum yaparken saygı çerçevesinde ve hakaret etmeden yorum yapmaya özen gösteriniz.

Bu yorumu göndererek bu uyarıları okuduğumu ve kabul ettiğimi onaylıyorum.

This site uses Akismet to reduce spam. Learn how your comment data is processed.