Arayış
github veya başka bir sunucu kullanmak istemiyorum, ihtiyacım o ölçüde değil ama iki üç kişi projemizi de yönetelim istiyorum. Yani git'i local olarak kullanmak işimi çözmüyor. SSH ile yönetim de hoşuma gitmiyor, yok işletim sistemi üzerinde kullanıcı yaratmalar, falanlar, filanlar. Araştırdım, aradım, taradım bilgiyi http://www.pkgbox.org/wordpress/2011/08/setting-up-a-git-server-on-macos-x-lion/ burada buldum. Fakat şimdi baktım, bu yazı da yerinde yok. Neyse ben bilgileri kurtardım. Özetle apache server ile git projelerimizi yönetebileceğiz.
Bir Kereye Mahsus
apache server OS X üzerinde zaten kurulu geliyor. Yani ohhhh mis.
htpasswd Dosyası
git projelerimize erişim için kullanıcılar kullanacağız, bunun için bir adet kullanıcı şifreleri dosyası lazım olacak, oluşturalım:
sudo touch /etc/apache2/other/htpasswd-git
Kullanıcı Grup Dosyası
Kullanıcı gruplarımız için de bir dosyaya ihtiyacımız olacak, onu da oluşturalım:
sudo touch /etc/apache2/other/htgroup-git
DavLock
git projelerimizi sadece okumayacağız, ayrıca yazma da yapacağız, bunun için DavLock sistemi kullanılacak, onun için aşağıdaki komutları çalıştırmalıyız:
sudo mkdir -p /var/www/DavLock
sudo chown _www:_www /var/www/DavLock
İlk satırda klasör yaratıyoruz, ikinci satırda klasörün haklarını veriyoruz.
Apache Config Dosyası
Apache'nin git projelerimizi anlamasını sağlamamız için de bir dosyaya ihtiyacımız var. Haydi, onu da yaratalım:sudo touch /etc/apache2/other/gitrepo.conf
Sonra bu dosyanın içine ilk tanımlamamızı yapmamız gerekiyor. Ben projelerimi
/Library/WebServer/Documents/repo
altında tutuyorum. Dolayısı ile repo klasörü için bir tanımlama yapmam gerekli, ayrıca DavLock sistemi için de bir satır ekliyoruz: (Bu arada ben vim kullanıyorum, siz elbette istediğiniz text editörü kullanmakta özgürsünüz, yani istediğiniz sorudan başlayabilirsiniz)
DavLockDB "/var/www/DavLock/Lock"
<Directory /Library/WebServer/Documents/repo>
DAV On
Deny from all
AuthType Basic
AuthName "Area51 git repositories"
AuthUserFile /etc/apache2/other/htpasswd-git
AuthGroupFile /etc/apache2/other/htgroup-git
</Directory>
Bir Aşamanın Sonu
Evet, bir kereye mahsus yaptığımız işlemlerimiz bitti. Ancak işletim sistemini yeniden kurarsanız falan apache'yi yeniden yapılandırmanız gerekecektir, o zaman bu aşamayı tekrar yaparsınız. Artık gelelim git projemizi oluşturmaya :)
git Projemizi Yaratalım
Proje klasörünü yaratıyoruz. Örnek proje ismi olarak myproject kullanıyorum.
cd /Library/WebServer/Documents/
sudo mkdir -p repo/myproject.git
Git ile projeyi oluşturuyoruz:
cd repo/myproject.git/
sudo git init --bare
Şu anda projemiz oluştu. Fakat bu hali ile web server üzerinden sadece okuma yapabilir durumda. Biz server üzerinden yazma da yapmak istiyoruz. Yani commit yapacağız, push yapacağız v.b.. Bunun için post-update hook özelliğini açmamız gerekiyor.
sudo mv hooks/post-update.sample hooks/post-update
sudo chown -R _www:_www /Library/WebServer/Documents/repo/myproject.git
sudo -u _www hooks/post-update
Sadece okuma yapabilecek ve hem okuma hem de yazma yapabilecek iki kullanıcı yaratıyoruz.
sudo htpasswd /etc/apache2/other/htpasswd-git just_read
sudo htpasswd /etc/apache2/other/htpasswd-git read_and_write
Kullanıcı grubu dosyamıza da kim sadece okuma yapacak, kim hem okuma hem yazma yapacak belirtiryoruz.
sudo vim /etc/apache2/other/htgroup-git
dosyayı açtık içine aşağıdaki satırları ekleyelim:
myproject-reader:just_read read_and_write
myproject-writer:read_and_write
Geldik Apache configuration ayarlarını yapmaya.
sudo vim /etc/apache2/other/gitrepo.conf
Dosyayı açtık, şimdi içine projemiz için gereken satırları ekliyoruz:
<Directory /Library/WebServer/Documents/repo/myproject.git>
Allow from all
Order allow,deny
<Limit GET>
Require group myproject-reader
</Limit>
<Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require group myproject-writer
</Limit>
</Directory>
İşlemlerimiz bitti. Şimdi Apache'yi yeniden başlatabiliriz. Öncelikle System Preferences altından Sharing kısmına gidip Web Sharing'in seçili olduğundan emin oluyoruz. Daha sonra
sudo apachectl restart
komutu ile Apache'yi yeniden başlatıyoruz. Artık sistemimiz kullanıma hazır. İstemci tarafına gidelim.
git clone http://read_and_write@localhost/repo/myproject.git
Tahmın edersiniz localhost yerine makine ismi (mesela osman.local) veya ip adresi gelebilir.
Mutlu Kodlamalar :)
Not: Ben bu yazıyı uzun zaman önce yazmıştım ama yayınlamamıştım, şimdi baĞzı değişiklikler yaptım ve tahmin edersiniz test edemedim, bir terslik olursa lütfen küfür etmeyin, buraya yazın, hallederiz :)
Volkan Özyılmaz
No comments:
Post a Comment