{"id":32882,"date":"2025-10-27T00:40:59","date_gmt":"2025-10-26T21:40:59","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32882"},"modified":"2025-10-27T00:40:59","modified_gmt":"2025-10-26T21:40:59","slug":"gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/","title":{"rendered":"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme"},"content":{"rendered":"<p><body><\/p>\n<h2>Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme<\/h2>\n<p>Git, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin vazge\u00e7ilmez bir par\u00e7as\u0131 haline gelmi\u015f, da\u011f\u0131t\u0131k bir versiyon kontrol sistemidir. Ekiplerin kod \u00fczerinde i\u015fbirli\u011fi yapmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131rken, projelerin ge\u00e7mi\u015fini takip etme ve farkl\u0131 s\u00fcr\u00fcmler aras\u0131nda ge\u00e7i\u015f yapma imkan\u0131 sunar. B\u00fcy\u00fck veya k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli projelerde, birden fazla geli\u015ftiricinin ayn\u0131 kod taban\u0131 \u00fczerinde \u00e7al\u0131\u015fmas\u0131 gerekti\u011finde, merkezi bir Git sunucusu kurmak yayg\u0131n bir yakla\u015f\u0131md\u0131r. Ancak, bu merkezi sunucuya kimlerin eri\u015febilece\u011fi, hangi depolara hangi yetkilerle eri\u015febilece\u011fi gibi konular, g\u00fcvenlik ve y\u00f6netim a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. \u0130\u015fte tam bu noktada Gitolite devreye girer.<\/p>\n<p>Gitolite, SSH \u00fczerinden Git depolar\u0131na eri\u015fimi kontrol etmek i\u00e7in tasarlanm\u0131\u015f basit ama g\u00fc\u00e7l\u00fc bir yetkilendirme katman\u0131d\u0131r. SSH anahtar tabanl\u0131 kimlik do\u011frulama \u00fczerine in\u015fa edilmi\u015f olup, kullan\u0131c\u0131lar\u0131n SSH anahtarlar\u0131 arac\u0131l\u0131\u011f\u0131yla kimliklerini do\u011frulamalar\u0131n\u0131 sa\u011flar. Gitolite, merkezi bir yap\u0131land\u0131rma dosyas\u0131 (<code>gitolite.conf<\/code>) ve kullan\u0131c\u0131lar\u0131n SSH genel anahtarlar\u0131n\u0131 i\u00e7eren bir dizin (<code>keydir<\/code>) kullanarak, hangi kullan\u0131c\u0131n\u0131n hangi depoya okuma, yazma veya daha spesifik yetkilerle eri\u015febilece\u011fini detayl\u0131 bir \u015fekilde tan\u0131mlaman\u0131za olanak tan\u0131r. Bu makalede, Ubuntu 12.04 y\u00fckl\u00fc bir VPS (Sanal \u00d6zel Sunucu) \u00fczerinde Gitolite&#8217;\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131, yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ve kullanarak Git depolar\u0131na eri\u015fimi nas\u0131l y\u00f6netece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayaca\u011f\u0131z. Ubuntu 12.04 her ne kadar &#8220;End of Life&#8221; (EOL) bir s\u00fcr\u00fcm olsa da, Gitolite&#8217;\u0131n temel kurulum ve \u00e7al\u0131\u015fma prensipleri bu s\u00fcr\u00fcmde de ge\u00e7erlidir ve konseptleri anlamak i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131 sunar. G\u00fcvenlik nedeniyle, \u00fcretim ortamlar\u0131nda her zaman g\u00fcncel ve desteklenen i\u015fletim sistemi s\u00fcr\u00fcmlerinin kullan\u0131lmas\u0131 \u015fiddetle tavsiye edilir.<\/p>\n<h3>Gitolite Neden Kullan\u0131lmal\u0131?<\/h3>\n<p>Gitolite, \u00f6zellikle birden fazla depo ve kullan\u0131c\u0131ya sahip Git sunucular\u0131nda eri\u015fim kontrol\u00fcn\u00fc basitle\u015ftirmek ve g\u00fcvenli\u011fi art\u0131rmak i\u00e7in bir\u00e7ok avantaj sunar:<\/p>\n<p>*   <strong>Merkezi Yetkilendirme:<\/strong> T\u00fcm eri\u015fim kurallar\u0131 tek bir yap\u0131land\u0131rma dosyas\u0131nda (<code>gitolite.conf<\/code>) toplan\u0131r. Bu, y\u00f6netimi kolayla\u015ft\u0131r\u0131r ve tutarl\u0131l\u0131k sa\u011flar.<br \/>\n*   <strong>SSH Anahtar Tabanl\u0131 G\u00fcvenlik:<\/strong> Kullan\u0131c\u0131lar parola yerine SSH anahtarlar\u0131 ile kimlik do\u011frulamas\u0131 yapar. Bu, genellikle daha g\u00fcvenli ve otomatize edilebilir bir y\u00f6ntemdir.<br \/>\n*   <strong>Detayl\u0131 Eri\u015fim Kontrol\u00fc:<\/strong> Depo baz\u0131nda, kullan\u0131c\u0131 baz\u0131nda ve hatta dal (branch) veya etiket (tag) baz\u0131nda okuma\/yazma izinleri tan\u0131mlanabilir. Force push (zorla g\u00f6nderme) gibi hassas operasyonlar da kontrol alt\u0131na al\u0131nabilir.<br \/>\n*   <strong>D\u00fc\u015f\u00fck Kaynak T\u00fcketimi:<\/strong> Gitolite, hafif bir yap\u0131ya sahiptir ve sunucu \u00fczerinde minimum kaynak harcar.<br \/>\n*   <strong>Y\u00f6netim Kolayl\u0131\u011f\u0131:<\/strong> Gitolite&#8217;\u0131n y\u00f6netimi, Git depolar\u0131 gibi <code>gitolite-admin<\/code> adl\u0131 \u00f6zel bir depo \u00fczerinden yap\u0131l\u0131r. Bu, yap\u0131land\u0131rma de\u011fi\u015fikliklerinin versiyonlanmas\u0131n\u0131 ve geri al\u0131nabilmesini sa\u011flar.<br \/>\n*   <strong>Esneklik:<\/strong> Kullan\u0131c\u0131 gruplar\u0131 tan\u0131mlama, wildcard depolar olu\u015fturma ve \u00f6zel kancalar (hooks) entegre etme gibi geli\u015fmi\u015f \u00f6zellikler sunar.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Kuruluma ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n gereksinimlerin kar\u015f\u0131land\u0131\u011f\u0131ndan emin olmal\u0131s\u0131n\u0131z:<\/p>\n<p>*   <strong>Ubuntu 12.04 VPS:<\/strong> SSH eri\u015fimi olan ve <code>root<\/code> veya <code>sudo<\/code> yetkilerine sahip bir kullan\u0131c\u0131 hesab\u0131n\u0131z olmal\u0131.<br \/>\n*   <strong>Git:<\/strong> VPS \u00fczerinde Git&#8217;in kurulu olmas\u0131 gerekir. E\u011fer kurulu de\u011filse <code>sudo apt-get install git<\/code> komutu ile kurabilirsiniz.<br \/>\n*   <strong>SSH \u0130stemcisi:<\/strong> Yerel makinenizde bir SSH istemcisi ve <code>ssh-keygen<\/code> arac\u0131 bulunmal\u0131.<br \/>\n*   <strong>Temel Linux Bilgisi:<\/strong> Komut sat\u0131r\u0131 kullan\u0131m\u0131 ve dosya izinleri hakk\u0131nda temel bilgiye sahip olman\u0131z faydal\u0131 olacakt\u0131r.<br \/>\n*   <strong>Y\u00f6netici SSH Anahtar\u0131:<\/strong> Gitolite&#8217;\u0131 y\u00f6netecek olan kullan\u0131c\u0131n\u0131n (yerel makinenizdeki kullan\u0131c\u0131n\u0131n) bir SSH genel anahtar\u0131na ihtiyac\u0131 olacakt\u0131r. E\u011fer yoksa, yerel makinenizde a\u015fa\u011f\u0131daki komutla bir anahtar \u00e7ifti olu\u015fturabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">ssh-keygen -t rsa -b 4096 -C \"your_email@example.com\"<\/code><\/pre>\n<p>    Bu komut, genellikle <code>~\/.ssh\/id_rsa<\/code> (\u00f6zel anahtar) ve <code>~\/.ssh\/id_rsa.pub<\/code> (genel anahtar) dosyalar\u0131n\u0131 olu\u015fturur. Kurulum s\u0131ras\u0131nda bu genel anahtar\u0131 kullanaca\u011f\u0131z.<\/p>\n<h3>Ad\u0131m 1: Gitolite \u0130\u00e7in Bir Kullan\u0131c\u0131 Olu\u015fturma<\/h3>\n<p>Gitolite, genellikle kendi \u00f6zel sistem kullan\u0131c\u0131s\u0131 alt\u0131nda \u00e7al\u0131\u015f\u0131r. Bu, g\u00fcvenlik a\u00e7\u0131s\u0131ndan iyi bir uygulamad\u0131r, \u00e7\u00fcnk\u00fc Gitolite&#8217;\u0131n yetkileri bu kullan\u0131c\u0131yla s\u0131n\u0131rl\u0131 kal\u0131r ve di\u011fer sistem hizmetlerinden izole edilir.<\/p>\n<h4>1.1. <code>git<\/code> Kullan\u0131c\u0131s\u0131 Olu\u015fturma<\/h4>\n<p>VPS&#8217;inize SSH ile ba\u011flan\u0131n ve <code>git<\/code> ad\u0131nda yeni bir sistem kullan\u0131c\u0131s\u0131 olu\u015fturun. Bu kullan\u0131c\u0131ya parola vermeyece\u011fiz, \u00e7\u00fcnk\u00fc kimlik do\u011frulama SSH anahtarlar\u0131 \u00fczerinden yap\u0131lacak. Ayr\u0131ca, bu kullan\u0131c\u0131n\u0131n oturum a\u00e7ma kabu\u011funu (login shell) <code>git-shell<\/code> olarak ayarlayaca\u011f\u0131z. <code>git-shell<\/code>, Git depolar\u0131na SSH \u00fczerinden eri\u015fimi k\u0131s\u0131tlayan ve sadece Git komutlar\u0131n\u0131n \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131na izin veren k\u0131s\u0131tl\u0131 bir kabuktur. Bu, yetkisiz kullan\u0131c\u0131lar\u0131n sunucuda rastgele komutlar \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 engeller.<\/p>\n<pre><code class=\"language-bash\">sudo adduser --system --shell \/usr\/bin\/git-shell --gecos 'git version control' --disabled-password --group git<\/code><\/pre>\n<p>Bu komut:<br \/>\n*   <code>--system<\/code>: <code>git<\/code> kullan\u0131c\u0131s\u0131n\u0131 bir sistem kullan\u0131c\u0131s\u0131 olarak olu\u015fturur (genellikle daha d\u00fc\u015f\u00fck UID&#8217;ye sahiptir ve varsay\u0131lan olarak <code>home<\/code> dizini olu\u015fturulmaz).<br \/>\n*   <code>--shell \/usr\/bin\/git-shell<\/code>: Kullan\u0131c\u0131n\u0131n kabu\u011funu <code>git-shell<\/code> olarak ayarlar.<br \/>\n*   <code>--gecos 'git version control'<\/code>: GECOS alan\u0131n\u0131 doldurur.<br \/>\n*   <code>--disabled-password<\/code>: Kullan\u0131c\u0131ya parola atanmas\u0131n\u0131 engeller.<br \/>\n*   <code>--group git<\/code>: <code>git<\/code> ad\u0131nda birincil bir grup olu\u015fturur ve kullan\u0131c\u0131y\u0131 bu gruba ekler.<\/p>\n<p><code>adduser<\/code> komutu genellikle kullan\u0131c\u0131n\u0131n ana dizinini de olu\u015fturur. E\u011fer olu\u015fturmazsa, manuel olarak olu\u015fturman\u0131z gerekebilir:<\/p>\n<pre><code class=\"language-bash\">sudo mkdir \/home\/git\nsudo chown git:git \/home\/git\nsudo chmod 755 \/home\/git<\/code><\/pre>\n<p>Ubuntu 12.04&#8217;te <code>--system<\/code> ile kullan\u0131c\u0131 olu\u015fturuldu\u011funda varsay\u0131lan olarak <code>\/home\/git<\/code> yerine <code>\/var\/lib\/git<\/code> gibi bir dizin olu\u015fturulabilir. Gitolite&#8217;\u0131n kurulum beti\u011fi bu durumu otomatik olarak y\u00f6netecektir, ancak ana dizinin <code>\/home\/git<\/code> oldu\u011fundan emin olmak daha do\u011fru olacakt\u0131r. E\u011fer <code>\/home\/git<\/code> dizini yoksa ve <code>git<\/code> kullan\u0131c\u0131s\u0131n\u0131n ana dizini ba\u015fka bir yerdeyse, <code>sudo usermod -d \/home\/git git<\/code> komutu ile de\u011fi\u015ftirebilirsiniz.<\/p>\n<h4>1.2. Git Kullan\u0131c\u0131s\u0131n\u0131n SSH Dizinini Haz\u0131rlama<\/h4>\n<p>Gitolite, y\u00f6netici kullan\u0131c\u0131n\u0131n SSH genel anahtar\u0131n\u0131 <code>git<\/code> kullan\u0131c\u0131s\u0131n\u0131n ana dizinindeki <code>.ssh<\/code> dizinine yerle\u015ftirerek kurulur. Bu dizinin ve i\u00e7indeki dosyalar\u0131n do\u011fru izinlere sahip olmas\u0131 kritik \u00f6neme sahiptir.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir \/home\/git\/.ssh\nsudo chown git:git \/home\/git\/.ssh\nsudo chmod 700 \/home\/git\/.ssh<\/code><\/pre>\n<h3>Ad\u0131m 2: Gitolite Kurulumu<\/h3>\n<p>\u015eimdi Gitolite yaz\u0131l\u0131m\u0131n\u0131 sunucuya kurma zaman\u0131. Gitolite&#8217;\u0131 kurman\u0131n en yayg\u0131n yolu, projenin kendi Git deposunu klonlamak ve ard\u0131ndan kurulum beti\u011fini \u00e7al\u0131\u015ft\u0131rmakt\u0131r.<\/p>\n<h4>2.1. Gitolite Deposunu Klonlama<\/h4>\n<p><code>git<\/code> kullan\u0131c\u0131s\u0131 olarak, Gitolite&#8217;\u0131n resmi deposunu klonlay\u0131n. Bu i\u015flemi <code>git<\/code> kullan\u0131c\u0131s\u0131n\u0131n ana dizininde yapmal\u0131s\u0131n\u0131z.<\/p>\n<pre><code class=\"language-bash\">sudo su - git\ngit clone https:\/\/github.com\/sitaramc\/gitolite.git bin<\/code><\/pre>\n<p>Yukar\u0131daki komutla <code>git<\/code> kullan\u0131c\u0131s\u0131na ge\u00e7i\u015f yapt\u0131k ve Gitolite deposunu <code>bin<\/code> ad\u0131nda bir dizine klonlad\u0131k. Bu dizin, Gitolite&#8217;\u0131n \u00e7al\u0131\u015ft\u0131r\u0131labilir betiklerini i\u00e7erecektir.<\/p>\n<h4>2.2. Gitolite&#8217;\u0131 Kurma<\/h4>\n<p>Depoyu klonlad\u0131ktan sonra, <code>gitolite-admin<\/code> deposunu ve <code>~\/.gitolite<\/code> dizinini olu\u015fturan kurulum beti\u011fini \u00e7al\u0131\u015ft\u0131rman\u0131z gerekir. Bu ad\u0131mda, yerel makinenizdeki y\u00f6netici SSH genel anahtar\u0131n\u0131 sunucuya kopyalaman\u0131z gerekecektir.<\/p>\n<p>\u00d6ncelikle, yerel makinenizden y\u00f6netici genel anahtar\u0131n\u0131z\u0131 (\u00f6rne\u011fin <code>~\/.ssh\/id_rsa.pub<\/code>) sunucuya kopyalay\u0131n. <code>scp<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\"># Yerel makinenizde\nscp ~\/.ssh\/id_rsa.pub your_user@your_vps_ip:\/tmp\/admin.pub<\/code><\/pre>\n<p>Ard\u0131ndan, VPS&#8217;e geri d\u00f6n\u00fcn ve <code>git<\/code> kullan\u0131c\u0131s\u0131 olarak kurulumu tamamlay\u0131n. <code>git<\/code> kullan\u0131c\u0131s\u0131 olarak <code>bin<\/code> dizininde oldu\u011funuzdan emin olun.<\/p>\n<pre><code class=\"language-bash\"># VPS'te, hala 'git' kullan\u0131c\u0131s\u0131 olarak\ncd bin\n.\/install -ln<\/code><\/pre>\n<p>Bu komut, Gitolite&#8217;\u0131n \u00e7al\u0131\u015ft\u0131r\u0131labilir dosyalar\u0131n\u0131 <code>~git\/bin<\/code> dizinine y\u00fckler ve PATH&#8217;e ekler.<\/p>\n<p>\u015eimdi, Gitolite&#8217;\u0131 ilk y\u00f6netici anahtar\u0131n\u0131zla ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">.\/src\/gitolite setup -pk \/tmp\/admin.pub<\/code><\/pre>\n<p>Bu komut:<br \/>\n*   <code>~git\/.gitolite<\/code> dizinini olu\u015fturur.<br \/>\n*   <code>~git\/.gitolite\/conf\/gitolite.conf<\/code> ve <code>~git\/.gitolite\/keydir\/admin.pub<\/code> dosyalar\u0131n\u0131 olu\u015fturur.<br \/>\n*   <code>gitolite-admin<\/code> deposunu ba\u015flat\u0131r.<\/p>\n<p><code>setup<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra <code>\/tmp\/admin.pub<\/code> dosyas\u0131n\u0131 silebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">rm \/tmp\/admin.pub<\/code><\/pre>\n<p>Art\u0131k <code>git<\/code> kullan\u0131c\u0131s\u0131 oturumundan \u00e7\u0131kabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">exit<\/code><\/pre>\n<h3>Ad\u0131m 3: Y\u00f6netici Anahtar\u0131n\u0131 Kopyalama ve \u0130lk Yap\u0131land\u0131rma<\/h3>\n<p>Gitolite&#8217;\u0131n y\u00f6netimi, \u00f6zel bir Git deposu olan <code>gitolite-admin<\/code> arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. Bu depoyu yerel makinenize klonlayarak, Gitolite yap\u0131land\u0131rma dosyas\u0131n\u0131 ve kullan\u0131c\u0131 anahtarlar\u0131n\u0131 y\u00f6netebilirsiniz.<\/p>\n<h4>3.1. <code>gitolite-admin<\/code> Deposunu Klonlama<\/h4>\n<p>Yerel makinenizde, Gitolite sunucunuzdan <code>gitolite-admin<\/code> deposunu klonlay\u0131n:<\/p>\n<pre><code class=\"language-bash\"># Yerel makinenizde\ngit clone git@your_vps_ip:gitolite-admin<\/code><\/pre>\n<p>Bu komut, <code>gitolite-admin<\/code> ad\u0131nda yeni bir dizin olu\u015fturacakt\u0131r. Bu dizinin i\u00e7ine girdi\u011finizde iki \u00f6nemli alt dizin g\u00f6receksiniz:<br \/>\n*   <code>conf\/<\/code>: Gitolite yap\u0131land\u0131rma dosyas\u0131n\u0131 (<code>gitolite.conf<\/code>) i\u00e7erir.<br \/>\n*   <code>keydir\/<\/code>: Kullan\u0131c\u0131lar\u0131n SSH genel anahtarlar\u0131n\u0131 i\u00e7erir. Kurulum s\u0131ras\u0131nda sa\u011flad\u0131\u011f\u0131n\u0131z <code>admin.pub<\/code> dosyas\u0131 burada olmal\u0131d\u0131r.<\/p>\n<p>Bu ad\u0131m ba\u015far\u0131l\u0131 olursa, Gitolite kurulumunuzun temel olarak do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir. E\u011fer bir hata al\u0131rsan\u0131z (\u00f6rne\u011fin &#8220;Permission denied (publickey)&#8221;), SSH anahtar\u0131n\u0131z\u0131n do\u011fru y\u00fcklendi\u011finden ve sunucuda <code>git<\/code> kullan\u0131c\u0131s\u0131n\u0131n ana dizinindeki <code>.ssh\/authorized_keys<\/code> dosyas\u0131nda bulundu\u011fundan emin olun.<\/p>\n<h3>Ad\u0131m 4: Kullan\u0131c\u0131 Ekleme ve Depo Olu\u015fturma<\/h3>\n<p>\u015eimdi Gitolite&#8217;\u0131n g\u00fcc\u00fcn\u00fc kullanmaya ba\u015flayabiliriz: yeni kullan\u0131c\u0131lar eklemek ve onlara belirli depolara eri\u015fim yetkisi vermek.<\/p>\n<h4>4.1. Yeni Kullan\u0131c\u0131 \u0130\u00e7in SSH Anahtar\u0131 Olu\u015fturma<\/h4>\n<p>\u0130lk olarak, yeni bir kullan\u0131c\u0131 (\u00f6rne\u011fin <code>kullanici1<\/code>) i\u00e7in bir SSH anahtar \u00e7ifti olu\u015fturun. Bu anahtar, <code>kullanici1<\/code>&#8216;in kendi yerel makinesinde olu\u015fturulmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\"># Kullanici1'in yerel makinesinde (veya sizin makinenizde test i\u00e7in)\nssh-keygen -t rsa -b 4096 -C \"kullanici1@example.com\" -f ~\/.ssh\/id_rsa_kullanici1<\/code><\/pre>\n<p>Bu komut <code>~\/.ssh\/id_rsa_kullanici1<\/code> (\u00f6zel anahtar) ve <code>~\/.ssh\/id_rsa_kullanici1.pub<\/code> (genel anahtar) dosyalar\u0131n\u0131 olu\u015fturacakt\u0131r.<\/p>\n<h4>4.2. Kullan\u0131c\u0131 Anahtar\u0131n\u0131 <code>gitolite-admin<\/code> Deposuna Ekleme<\/h4>\n<p>\u015eimdi <code>kullanici1<\/code>&#8216;in genel anahtar\u0131n\u0131 <code>gitolite-admin<\/code> deponuzun <code>keydir\/<\/code> dizinine kopyalaman\u0131z gerekiyor.<\/p>\n<pre><code class=\"language-bash\"># Yerel makinenizde (y\u00f6netici olarak)\ncd gitolite-admin\ncp ~\/.ssh\/id_rsa_kullanici1.pub keydir\/kullanici1.pub<\/code><\/pre>\n<p><code>keydir<\/code> i\u00e7indeki dosya isimleri, Gitolite&#8217;\u0131n kullan\u0131c\u0131lar\u0131 tan\u0131mas\u0131nda kullan\u0131l\u0131r. Bu nedenle <code>kullanici1.pub<\/code> gibi anlaml\u0131 isimler vermek \u00f6nemlidir.<\/p>\n<h4>4.3. <code>gitolite.conf<\/code> Dosyas\u0131n\u0131 D\u00fczenleme<\/h4>\n<p>\u015eimdi <code>conf\/gitolite.conf<\/code> dosyas\u0131n\u0131 a\u00e7\u0131n ve yeni bir depo olu\u015fturun, <code>kullanici1<\/code>&#8216;e bu depoya eri\u015fim yetkisi verin.<\/p>\n<pre><code class=\"language-bash\"># Yerel makinenizde (y\u00f6netici olarak)\nnano conf\/gitolite.conf<\/code><\/pre>\n<p>Dosyan\u0131n i\u00e7eri\u011fi ba\u015flang\u0131\u00e7ta \u015funa benzer olabilir:<\/p>\n<pre><code class=\"language-\">repo gitolite-admin\n    RW+ = admin\n\nrepo testing\n    RW+ = @all<\/code><\/pre>\n<p><code>testing<\/code> deposunun <code>RW+ = @all<\/code> kural\u0131, t\u00fcm kullan\u0131c\u0131lara bu depoya tam eri\u015fim sa\u011flar. Bu genellikle test ama\u00e7l\u0131d\u0131r. Biz kendi \u00f6zel depomuzu olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-\">repo gitolite-admin\n    RW+ = admin\n\nrepo my_project\n    RW = kullanici1\n    R = admin # admin sadece okuyabilir, yazamaz (varsay\u0131lan\u0131 de\u011fi\u015ftirdik)\n\n@developers = kullanici1 kullanici2\nrepo another_project\n    RW+ = @developers\n    R = anon_user<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<br \/>\n*   <code>repo my_project<\/code>: <code>my_project<\/code> ad\u0131nda yeni bir Git deposu tan\u0131mlar.<br \/>\n*   <code>RW = kullanici1<\/code>: <code>kullanici1<\/code>&#8216;e <code>my_project<\/code> deposuna okuma ve yazma yetkisi verir.<br \/>\n*   <code>R = admin<\/code>: <code>admin<\/code> kullan\u0131c\u0131s\u0131na <code>my_project<\/code> deposuna sadece okuma yetkisi verir.<br \/>\n*   <code>@developers = kullanici1 kullanici2<\/code>: <code>developers<\/code> ad\u0131nda bir kullan\u0131c\u0131 grubu tan\u0131mlar.<br \/>\n*   <code>repo another_project<\/code>: <code>another_project<\/code> ad\u0131nda yeni bir depo tan\u0131mlar.<br \/>\n*   <code>RW+ = @developers<\/code>: <code>developers<\/code> grubundaki t\u00fcm kullan\u0131c\u0131lara <code>another_project<\/code> deposuna tam (okuma, yazma, force push) yetki verir.<br \/>\n*   <code>R = anon_user<\/code>: <code>anon_user<\/code> \u00f6zel anahtar\u0131 olmayan herkesin (genellikle <code>git daemon<\/code> veya <code>gitweb<\/code> \u00fczerinden) depoyu okuyabilece\u011fini belirtir. Bu genelde herkese a\u00e7\u0131k depolar i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>De\u011fi\u015fiklikleri kaydedin ve dosyay\u0131 kapat\u0131n.<\/p>\n<h4>4.4. De\u011fi\u015fiklikleri Gitolite Sunucusuna G\u00f6nderme<\/h4>\n<p><code>gitolite-admin<\/code> deposunda yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikleri commit edin ve sunucuya push edin:<\/p>\n<pre><code class=\"language-bash\"># Yerel makinenizde (y\u00f6netici olarak)\ngit add keydir\/kullanici1.pub conf\/gitolite.conf\ngit commit -m \"Add kullanici1 and my_project repo\"\ngit push<\/code><\/pre>\n<p>Bu <code>git push<\/code> komutu, Gitolite sunucusundaki yap\u0131land\u0131rmay\u0131 g\u00fcncelleyecektir. Gitolite, bu de\u011fi\u015fiklikleri otomatik olarak alg\u0131lar ve yeni kullan\u0131c\u0131lar\u0131 ve depolar\u0131 yap\u0131land\u0131r\u0131r.<\/p>\n<h3>Ad\u0131m 5: Yeni Kullan\u0131c\u0131lar\u0131n Depolara Eri\u015fimi<\/h3>\n<p>\u015eimdi <code>kullanici1<\/code>&#8216;in <code>my_project<\/code> deposuna eri\u015fip eri\u015femedi\u011fini test edelim.<\/p>\n<h4>5.1. <code>my_project<\/code> Deposunu Klonlama<\/h4>\n<p><code>kullanici1<\/code>&#8216;in makinesinde (veya test i\u00e7in kendi makinenizde <code>kullanici1<\/code>&#8216;in \u00f6zel anahtar\u0131n\u0131 kullanarak):<\/p>\n<pre><code class=\"language-bash\"># Kullanici1'in yerel makinesinde (veya kendi makinenizde)\n<h2>E\u011fer farkl\u0131 bir anahtar kullan\u0131yorsan\u0131z, SSH agent'a eklemeniz veya -i parametresiyle belirtmeniz gerekebilir.<\/h2>\n<h2>ssh-add ~\/.ssh\/id_rsa_kullanici1<\/h2>\ngit clone git@your_vps_ip:my_project<\/code><\/pre>\n<p>E\u011fer her \u015fey do\u011fru yap\u0131land\u0131r\u0131ld\u0131ysa, <code>my_project<\/code> deposu ba\u015far\u0131yla klonlanacakt\u0131r. Bu, <code>kullanici1<\/code>&#8216;in kimlik do\u011frulamas\u0131n\u0131n ba\u015far\u0131l\u0131 oldu\u011fu ve <code>my_project<\/code> deposuna eri\u015fim izni oldu\u011fu anlam\u0131na gelir.<\/p>\n<p><code>kullanici1<\/code> \u015fimdi bu depoya commit yapabilir ve push edebilir:<\/p>\n<pre><code class=\"language-bash\"># Kullanici1'in yerel makinesinde\ncd my_project\necho \"Hello from kullanici1\" > README.md\ngit add README.md\ngit commit -m \"Initial commit from kullanici1\"\ngit push origin master<\/code><\/pre>\n<p>Bu i\u015flem de sorunsuz ger\u00e7ekle\u015fmelidir.<\/p>\n<h3>Gitolite Yap\u0131land\u0131rma Dosyas\u0131n\u0131n Detaylar\u0131 (<code>gitolite.conf<\/code>)<\/h3>\n<p><code>gitolite.conf<\/code> dosyas\u0131, Gitolite&#8217;\u0131n kalbidir ve eri\u015fim kontrol kurallar\u0131n\u0131 tan\u0131mlar. Dosyan\u0131n yap\u0131s\u0131n\u0131 ve yayg\u0131n kullan\u0131lan kurallar\u0131 anlamak, etkili bir y\u00f6netim i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h4>6.1. Depo Tan\u0131mlar\u0131<\/h4>\n<p>Her depo, <code>repo<\/code> anahtar kelimesiyle ba\u015flar.<\/p>\n<pre><code class=\"language-\">repo <depo_ad\u0131>\n    <eri\u015fim_kurallar\u0131><\/code><\/pre>\n<p>Depo adlar\u0131, yolu i\u00e7erebilir (\u00f6rn. <code>team\/project-a<\/code>). Gitolite, bu yolu otomatik olarak olu\u015fturur.<\/p>\n<h4>6.2. Grup Tan\u0131mlar\u0131<\/h4>\n<p>Kullan\u0131c\u0131 gruplar\u0131 tan\u0131mlayarak eri\u015fim kurallar\u0131n\u0131 basitle\u015ftirebilirsiniz. Grup adlar\u0131 <code>@<\/code> i\u015faretiyle ba\u015flar.<\/p>\n<pre><code class=\"language-\">@<grup_ad\u0131> = <kullan\u0131c\u01311> <kullan\u0131c\u01312> ...<\/code><\/pre>\n<p>\u00d6rnek:<\/p>\n<pre><code class=\"language-\">@devs = alice bob charlie\n@managers = dave eve<\/code><\/pre>\n<p>Daha sonra bu gruplar\u0131 eri\u015fim kurallar\u0131nda kullanabilirsiniz: <code>RW+ = @devs<\/code>.<\/p>\n<h4>6.3. Eri\u015fim \u0130zinleri<\/h4>\n<p>Eri\u015fim izinleri, <code>R<\/code>, <code>RW<\/code>, <code>RW+<\/code> ve <code>RW C<\/code> gibi anahtar kelimelerle tan\u0131mlan\u0131r.<\/p>\n<p>*   <strong><code>R<\/code> (Read-only):<\/strong> Salt okunur eri\u015fim. Kullan\u0131c\u0131lar depoyu klonlayabilir ve \u00e7ekebilir (<code>pull<\/code>), ancak de\u011fi\u015fiklik g\u00f6nderemez (<code>push<\/code>).<\/p>\n<pre><code class=\"language-\">R = anon_user<\/code><\/pre>\n<p>*   <strong><code>RW<\/code> (Read-Write):<\/strong> Okuma ve yazma eri\u015fimi. Kullan\u0131c\u0131lar depoyu klonlayabilir, \u00e7ekebilir ve de\u011fi\u015fiklik g\u00f6nderebilir. Ancak, ge\u00e7mi\u015fi de\u011fi\u015ftiren (rewriting history) <code>force push<\/code> i\u015flemlerine izin verilmez.<\/p>\n<pre><code class=\"language-\">RW = developer1<\/code><\/pre>\n<p>*   <strong><code>RW+<\/code> (Read-Write-Rewind):<\/strong> Okuma, yazma ve ge\u00e7mi\u015fi geri sarma (rewind) eri\u015fimi. Bu, <code>force push<\/code> i\u015flemlerine izin verir. Dikkatli kullan\u0131lmal\u0131d\u0131r, \u00e7\u00fcnk\u00fc ba\u015fkalar\u0131n\u0131n \u00e7al\u0131\u015fmalar\u0131n\u0131 \u00fczerine yazabilir.<\/p>\n<pre><code class=\"language-\">RW+ = lead_developer<\/code><\/pre>\n<p>*   <strong><code>RW C<\/code> (Read-Write-Create):<\/strong> Okuma, yazma ve yeni dal (branch) veya etiket (tag) olu\u015fturma eri\u015fimi. Bu, <code>RW<\/code>&#8216;ye benzer ancak \u00f6zellikle yeni referanslar olu\u015fturma yetene\u011fini vurgular. Genellikle <code>RW<\/code> ile ayn\u0131 anlamda kullan\u0131l\u0131r, \u00e7\u00fcnk\u00fc <code>RW<\/code> zaten yeni referans olu\u015fturmaya izin verir.<\/p>\n<h4>6.4. Referans Tabanl\u0131 \u0130zinler (Refexes)<\/h4>\n<p>Gitolite&#8217;\u0131n en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biri, eri\u015fim izinlerini belirli dallara veya etiketlere g\u00f6re k\u0131s\u0131tlama yetene\u011fidir. Buna &#8220;refex&#8221; (reference expression) denir.<\/p>\n<pre><code class=\"language-\">repo my_project\n    RW master = alice        # Alice sadece 'master' dal\u0131na yazabilir\n    RW dev\/ = bob            # Bob 'dev\/' ile ba\u015flayan t\u00fcm dallara yazabilir (\u00f6rn. dev\/feature-a, dev\/bugfix-b)\n    RW+ = charlie            # Charlie her yere force push yapabilir\n    R = @all                 # Herkes depoyu okuyabilir<\/code><\/pre>\n<p>*   <code>refs\/heads\/master<\/code>: Sadece <code>master<\/code> dal\u0131.<br \/>\n*   <code>refs\/heads\/dev\/<\/code>: <code>dev\/<\/code> ile ba\u015flayan t\u00fcm dallar (\u00f6rn. <code>dev\/feature<\/code>, <code>dev\/bugfix<\/code>).<br \/>\n*   <code>refs\/tags\/<\/code>: T\u00fcm etiketler.<br \/>\n<em>   <code>refs\/heads\/foo.<\/em><\/code>: <code>foo<\/code> ile ba\u015flayan ve herhangi bir karakterle devam eden dallar.<br \/>\n*   <code>refs\/heads\/master|develop<\/code>: <code>master<\/code> veya <code>develop<\/code> dallar\u0131.<\/p>\n<p>Refex&#8217;ler, daha karma\u015f\u0131k ve granular eri\u015fim kontrol\u00fc sa\u011flamak i\u00e7in \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. \u00d6rne\u011fin, <code>master<\/code> dal\u0131na sadece bir CI\/CD sistemi veya belirli bir y\u00f6netici grubunun push yapmas\u0131na izin verebilirsiniz.<\/p>\n<h4>6.5. \u00d6zel Kurallar ve Konfig\u00fcrasyonlar<\/h4>\n<p><code>gitolite.conf<\/code> i\u00e7inde baz\u0131 \u00f6zel anahtar kelimeler de bulunur:<\/p>\n<p>*   <strong><code>config<\/code>:<\/strong> Depo baz\u0131nda Git yap\u0131land\u0131rma ayarlar\u0131 tan\u0131mlaman\u0131za olanak tan\u0131r.<\/p>\n<pre><code class=\"language-\">repo my_project\n        config gitweb.owner = \"My Team\"<\/code><\/pre>\n<p>*   <strong><code>daemon<\/code> ve <code>gitweb<\/code>:<\/strong> <code>git-daemon<\/code> ve <code>gitweb<\/code> hizmetleri arac\u0131l\u0131\u011f\u0131yla depolara eri\u015fimi kontrol eder. Genellikle <code>public_read = yes<\/code> veya <code>public_read = no<\/code> gibi de\u011ferler al\u0131rlar.<\/p>\n<pre><code class=\"language-\">repo public_repo\n        daemon = R\n        gitweb = R<\/code><\/pre>\n<p>    Bu, <code>public_repo<\/code>&#8216;nun anonim olarak okunabilir oldu\u011funu belirtir.<\/p>\n<h4>6.6. Kal\u0131t\u0131m (Inheritance)<\/h4>\n<p>Gitolite, depo adlar\u0131 hiyerar\u015fik oldu\u011funda kal\u0131t\u0131m kurallar\u0131n\u0131 da uygular. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-\">repo foo\n    RW = alice\n\nrepo foo\/bar\n    RW = bob<\/code><\/pre>\n<p>Bu durumda <code>foo\/bar<\/code> deposuna eri\u015fim i\u00e7in hem <code>foo<\/code> hem de <code>foo\/bar<\/code> kurallar\u0131 ge\u00e7erli olur. Daha spesifik kurallar (alt dizinler i\u00e7in) daha genel kurallardan (\u00fcst dizinler i\u00e7in) \u00f6nceliklidir.<\/p>\n<h3>Geli\u015fmi\u015f Gitolite \u00d6zellikleri<\/h3>\n<p>Gitolite, temel eri\u015fim kontrol\u00fcn\u00fcn \u00f6tesinde bir\u00e7ok geli\u015fmi\u015f \u00f6zellik sunar:<\/p>\n<h4>7.1. VHOOK&#8217;lar (Veritaban\u0131 Kancalar\u0131)<\/h4>\n<p>Gitolite, Git kancalar\u0131n\u0131 (hooks) kullanarak \u00e7e\u015fitli olaylar \u00fczerinde \u00f6zel betikler \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r. Gitolite, bu kancalar\u0131n y\u00f6netimini de kolayla\u015ft\u0131r\u0131r. <code>VREF<\/code> kancalar\u0131, push i\u015fleminden \u00f6nce veya sonra belirli kontrolleri yapman\u0131z\u0131 sa\u011flar. \u00d6rne\u011fin, bir commit mesaj\u0131n\u0131n belirli bir formata uyup uymad\u0131\u011f\u0131n\u0131 kontrol edebilir veya bir dal\u0131n silinmesini engelleyebilirsiniz. Bu, CI\/CD s\u00fcre\u00e7leriyle entegrasyon i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.<\/p>\n<h4>7.2. Wildcard Depolar<\/h4>\n<p>Dinamik olarak depo olu\u015fturman\u0131z gerekti\u011finde wildcard depolar \u00e7ok kullan\u0131\u015fl\u0131d\u0131r. \u00d6rne\u011fin, her kullan\u0131c\u0131ya kendi ki\u015fisel deposunu olu\u015fturma yetkisi vermek isteyebilirsiniz:<\/p>\n<pre><code class=\"language-\">repo users\/%\n    RW+ = @all<\/code><\/pre>\n<p>Bu kural, <code>users\/alice<\/code>, <code>users\/bob<\/code> gibi t\u00fcm depolar\u0131 kapsar. <code>%<\/code> i\u015fareti, kullan\u0131c\u0131 ad\u0131 veya herhangi bir dizeyle e\u015fle\u015fir.<\/p>\n<h4>7.3. Yans\u0131lama (Mirroring)<\/h4>\n<p>Gitolite, depolar\u0131 ba\u015fka sunuculara otomatik olarak yans\u0131tma (mirroring) yetene\u011fine sahiptir. Bu, yedekleme veya co\u011frafi olarak da\u011f\u0131t\u0131lm\u0131\u015f geli\u015ftirme ekipleri i\u00e7in faydal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-\">repo my_project\n    mirror = git@backup_server:my_project.git<\/code><\/pre>\n<h4>7.4. Gitolite Y\u00f6netimini Devretme<\/h4>\n<p>B\u00fcy\u00fck ekiplerde, Gitolite y\u00f6netimini tek bir ki\u015fiye b\u0131rakmak yerine, belirli kullan\u0131c\u0131lara <code>gitolite-admin<\/code> deposuna eri\u015fim yetkisi vererek y\u00f6netimi devredebilirsiniz.<\/p>\n<pre><code class=\"language-\">repo gitolite-admin\n    RW+ = admin\n    RW+ = team_lead<\/code><\/pre>\n<p>Bu, <code>team_lead<\/code> kullan\u0131c\u0131s\u0131n\u0131n da <code>gitolite.conf<\/code> ve <code>keydir<\/code> dosyalar\u0131n\u0131 d\u00fczenleyebilece\u011fi ve Gitolite yap\u0131land\u0131rmas\u0131n\u0131 y\u00f6netebilece\u011fi anlam\u0131na gelir.<\/p>\n<h3>Sorun Giderme ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>Gitolite ile \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong><code>Permission denied (publickey)<\/code> hatas\u0131:<\/strong><br \/>\n    *   Y\u00f6netici veya kullan\u0131c\u0131 SSH genel anahtar\u0131n\u0131n <code>git<\/code> kullan\u0131c\u0131s\u0131n\u0131n <code>~\/.ssh\/authorized_keys<\/code> dosyas\u0131nda do\u011fru bir \u015fekilde bulundu\u011fundan emin olun.<br \/>\n    *   Yerel makinenizde do\u011fru \u00f6zel anahtar\u0131 kulland\u0131\u011f\u0131n\u0131zdan ve SSH agent&#8217;a ekledi\u011finizden emin olun (<code>ssh-add ~\/.ssh\/id_rsa<\/code>).<br \/>\n    *   Sunucudaki <code>~git\/.ssh<\/code> dizininin ve <code>authorized_keys<\/code> dosyas\u0131n\u0131n do\u011fru izinlere sahip oldu\u011fundan emin olun (<code>chmod 700 ~\/.ssh<\/code>, <code>chmod 600 ~\/.ssh\/authorized_keys<\/code>).<br \/>\n    *   <code>ssh -v git@your_vps_ip<\/code> komutu ile detayl\u0131 hata ay\u0131klama \u00e7\u0131kt\u0131s\u0131 alabilirsiniz.<br \/>\n*   <strong>Depo klonlanam\u0131yor veya push yap\u0131lam\u0131yor:<\/strong><br \/>\n    *   <code>gitolite.conf<\/code> dosyas\u0131ndaki eri\u015fim kurallar\u0131n\u0131 kontrol edin. Kullan\u0131c\u0131n\u0131n ilgili depoya do\u011fru yetkilere sahip oldu\u011fundan emin olun (RW, RW+).<br \/>\n    *   <code>gitolite-admin<\/code> deposuna de\u011fi\u015fiklikleri push etmeyi unutup unutmad\u0131\u011f\u0131n\u0131z\u0131 kontrol edin.<br \/>\n*   <strong><code>GL_LOGLEVEL=DEBUG<\/code>:<\/strong> Gitolite&#8217;\u0131n daha detayl\u0131 g\u00fcnl\u00fck kayd\u0131 tutmas\u0131n\u0131 sa\u011flamak i\u00e7in <code>GL_LOGLEVEL=DEBUG<\/code> ortam de\u011fi\u015fkenini kullanabilirsiniz. \u00d6rne\u011fin, <code>ssh GL_LOGLEVEL=DEBUG git@your_vps_ip info<\/code> komutu, Gitolite&#8217;\u0131n \u00e7al\u0131\u015fma an\u0131ndaki detayl\u0131 bilgilerini g\u00f6sterecektir.<br \/>\n*   <strong>Yanl\u0131\u015f anahtar dosyas\u0131 isimleri:<\/strong> <code>keydir\/<\/code> dizinindeki genel anahtar dosyalar\u0131n\u0131n adlar\u0131 (\u00f6rn. <code>kullanici1.pub<\/code>), <code>gitolite.conf<\/code> dosyas\u0131nda kullan\u0131lan kullan\u0131c\u0131 adlar\u0131yla e\u015fle\u015fmelidir.<\/p>\n<h3>G\u00fcvenlik Hususlar\u0131<\/h3>\n<p>Gitolite, Git sunucunuzun g\u00fcvenli\u011fini art\u0131rmak i\u00e7in tasarlanm\u0131\u015f olsa da, baz\u0131 \u00f6nemli g\u00fcvenlik noktalar\u0131na dikkat etmek \u00f6nemlidir:<\/p>\n<p>*   <strong><code>git-shell<\/code> Kabu\u011fu:<\/strong> <code>git<\/code> kullan\u0131c\u0131s\u0131n\u0131n kabu\u011funun <code>git-shell<\/code> olarak ayarland\u0131\u011f\u0131ndan emin olun. Bu, yetkisiz kullan\u0131c\u0131lar\u0131n sunucuda rastgele komutlar \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 engeller.<br \/>\n*   <strong>SSH Anahtarlar\u0131n\u0131n G\u00fcvenli\u011fi:<\/strong> Hem sunucu hem de istemci taraf\u0131nda SSH \u00f6zel anahtarlar\u0131n\u0131z\u0131 g\u00fcvende tutun. G\u00fc\u00e7l\u00fc parolalar (passphrases) kullan\u0131n ve anahtarlar\u0131n\u0131z\u0131 yetkisiz eri\u015fime kar\u015f\u0131 koruyun.<br \/>\n*   <strong>En Az Ayr\u0131cal\u0131k Prensibi:<\/strong> <code>gitolite.conf<\/code> dosyas\u0131n\u0131 yap\u0131land\u0131r\u0131rken, kullan\u0131c\u0131lara sadece ihtiya\u00e7 duyduklar\u0131 minimum yetkileri verin. \u00d6zellikle <code>RW+<\/code> (force push) yetkisini dikkatli kullan\u0131n.<br \/>\n*   <strong>Ubuntu 12.04 EOL Durumu:<\/strong> Bu makale Ubuntu 12.04 \u00fczerinde Gitolite kurulumunu anlatsa da, bu i\u015fletim sistemi s\u00fcr\u00fcm\u00fc art\u0131k Canonical taraf\u0131ndan desteklenmemektedir (End of Life). Bu, g\u00fcvenlik g\u00fcncellemeleri almad\u0131\u011f\u0131 anlam\u0131na gelir ve \u00fcretim ortamlar\u0131nda kullan\u0131lmas\u0131 ciddi g\u00fcvenlik riskleri ta\u015f\u0131r. M\u00fcmk\u00fcnse, Gitolite&#8217;\u0131 daha g\u00fcncel ve desteklenen bir Ubuntu (veya ba\u015fka bir Linux da\u011f\u0131t\u0131m\u0131) s\u00fcr\u00fcm\u00fcne kurmay\u0131 d\u00fc\u015f\u00fcnmelisiniz. Temel Gitolite prensipleri yeni s\u00fcr\u00fcmlerde de ayn\u0131 kalacakt\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Gitolite, Ubuntu 12.04 VPS \u00fczerinde Git sunucular\u0131na eri\u015fimi y\u00f6netmek i\u00e7in basit, g\u00fcvenli ve esnek bir \u00e7\u00f6z\u00fcmd\u00fcr. SSH anahtar tabanl\u0131 kimlik do\u011frulama, merkezi yap\u0131land\u0131rma ve detayl\u0131 eri\u015fim kontrol\u00fc yetenekleri sayesinde, geli\u015ftirme ekiplerinin i\u015fbirli\u011fini g\u00fcvenli bir \u015fekilde s\u00fcrd\u00fcrmelerini sa\u011flar. Bu makalede ad\u0131m ad\u0131m kurulum s\u00fcrecini, temel yap\u0131land\u0131rmay\u0131, kullan\u0131c\u0131 ve depo y\u00f6netimini ve <code>gitolite.conf<\/code> dosyas\u0131n\u0131n detaylar\u0131n\u0131 ele ald\u0131k. Ayr\u0131ca, Gitolite&#8217;\u0131n sundu\u011fu geli\u015fmi\u015f \u00f6zelliklere ve kar\u015f\u0131la\u015fabilece\u011finiz sorun giderme ipu\u00e7lar\u0131na da de\u011findik. G\u00fcvenlik hususlar\u0131n\u0131 g\u00f6z \u00f6n\u00fcnde bulundurarak ve en iyi uygulamalar\u0131 takip ederek, Gitolite ile sa\u011flam ve y\u00f6netilebilir bir Git altyap\u0131s\u0131 kurabilirsiniz. Unutmay\u0131n, \u00fcretim ortamlar\u0131nda her zaman g\u00fcncel ve desteklenen yaz\u0131l\u0131m s\u00fcr\u00fcmlerini kullanmak en iyi g\u00fcvenlik uygulamas\u0131d\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme\nGit, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin vazge\u00e7ilmez bir par\u00e7a","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1468],"tags":[],"class_list":{"0":"post-32882","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme\" \/>\n<meta property=\"og:description\" content=\"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme Git, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin vazge\u00e7ilmez bir par\u00e7a\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-26T21:40:59+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme\",\"datePublished\":\"2025-10-26T21:40:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/\"},\"wordCount\":3015,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/\",\"name\":\"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-26T21:40:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/","og_locale":"tr_TR","og_type":"article","og_title":"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme","og_description":"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme Git, modern yaz\u0131l\u0131m geli\u015ftirme s\u00fcre\u00e7lerinin vazge\u00e7ilmez bir par\u00e7a","og_url":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-26T21:40:59+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme","datePublished":"2025-10-26T21:40:59+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/"},"wordCount":3015,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/","url":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/","name":"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-26T21:40:59+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/gitolite-ile-ubuntu-12-04-vps-uzerinde-git-sunucusuna-erisimi-kontrol-etme\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Gitolite ile Ubuntu 12.04 VPS \u00dczerinde Git Sunucusuna Eri\u015fimi Kontrol Etme"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32882","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32882"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32882\/revisions"}],"predecessor-version":[{"id":32883,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32882\/revisions\/32883"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}