Git ile sürüm kontrolü yaptığınız bir sunucuda, yaptığınız çoğu işlemden önce veya sonra, bazı hook'larla, bazı kontrolleri yapabilir (yazdğınız kod belli bir standarda uymuyorsa push'a izin vermemek gibi), veya gerçekleşen bir işlemden sonra bir yere mail atabilir, bir dosyayı başka bir sunucuya taşıyabilir, bir kuyruğa "dosyalar geldi, sen bunları deploy et" diyebilirsiniz.
Örnek olarak, "sunucuya yapılan push'lardan sonra, sunucudaki bir dizine git, bu dizinde 'git pull' çalıştır, ki değişiklikler anında yayında olsun" gibi bir senaryo için, "post-receive" hook'unu kullanabilirsiniz.
post-receive, sunucuya yapılan push'lardan sonra, her obje fetch edildikten sonra çalışır. örnek hook'lar, sonunda ".sample" olarak bulunuyor. Bu senaryo için post-receive.sample dosyasını post-receive olarak değiştirdikten sonra, dosyayı düzenlememiz gerekiyor. Dosyanın en üstündeki "#!/bin/bash" shebang'inden de anlıyoruz ki, burada bash komutları yazabiliyoruz. "âla" diyip, hemen, şöyle bir kural yazdım
cd /home/yuxel/public_html/site.com/
git pull origin master
exec git-update-server-info
Bundan sonra yaptığım her push'da, uzakdaki depoda, ilgili dizine geçip, git pull yapmasını bekliyordum. Yaptığım ilk push'da şöyle bir şeyle karşılaştım
debian:~/$ # git commit -am "everything is something happened" && git push
[master e511920] title changed
1 files changed, 1 insertions(+), 1 deletions(-)
Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 295 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: fatal: Not a git repository: '.'
To [email protected]:mysite
d42fac2..e511920 HEAD -> master
araştırdım, akabinde kuralı şu şekilde değiştirmem gerektiğini öğrendim
cd /home/yuxel/public_html/site.com/
unset GIT_DIR
git pull origin master
exec git-update-server-info
|