makaleler / Debian / Ubuntu / Pardus / Git nasıl kullanılır? Git Kullanımı!

Git nasıl kullanılır? Git Kullanımı!

07.03.2011 00:54:17

Git repository, git kurulumu, gitolite kurulumu, gitweb kurulumu ve notları.

Versiyon yönetim sistemi olarak Git notlarım "kullanım dökümanı"


Git Kurulumu için gerekli paketler
aptitude install git-core gitk git-gui

Git için kullanıcı bilgileri oluşturma
# ~/.gitconfig
[user]
    name = pythontr
    email = pythontr@mail.com

Git komutlari üzerinden kullanıcı bilgileri oluşturma.
git config --global user.name "husonet"
git config --global user.email "husonet@mail.com"
git config --list
cat ~/.gitconfig


Git ile güncelleme yapmak istemediğiniz dosyaların kaldırılması.
git rm -f Gemfile
rm 'Gemfile'

Son haline bakalım


git status
On branch develop
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    Gemfile


Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .gitignore
        modified:   Gemfile.lock
        modified:   Guardfile
        modified:   config/application.rb
        modified:   config/environment.rb
        modified:   config/environments/development.rb
        modified:   config/initializers/recaptcha.rb


"Local" Yerel depoda kullanılacak komutlar
	git init
	vim .gitignore
	git add file(s)
	git add .		# yeni oluşturulan ve bütün değişen dosyalari guncellenecekler listesine ekle
	git add -u		# değişiklik olmuş veya silinmiş dosyaları güncellenecekler listesine ekle
	git commit -m 'not'	# güncelle
	git diff		# son güncelleme ve mevcut durum arasındaki farklar
	git status		# değişen dosyalar
	git log			# güncelleme geçmişi


Örnek
	mkdir kaynak
	cd kaynak
	touch dosya1
	touch dosya2
	touch dosya3
	git init
	echo dosya3 > .gitignore

	git status
	git add .
	git status
	git commit -m 'ilk commit notumuz'
	git status
	git log

	echo 'xxx' >> dosya1
	git diff HEAD	#(veya sadece git diff)
	git add dosya1
	git commit -m 'ikinci commit notumuz' # Bu kısımda Türkçe karakter kullanmamakta fayda olacağını düşünüyorum
	git log


Uzak depo
Ana depyu oluşturmak
"bare ile oluşturulan depoda doğrudan değişiklik yapılamaz."
	cd
	mkdir depo
	cd depo
	git --bare init

"depoyu klonlamak"
	cd
	mkdir yerel
	cd yerel
	git clone ~/depo proje1			# aynı dosya sisteminde
	git ssh://adres:port/~/depo proje1	# ssh ile
	
"son değişiklikleri ana depodan almak"
	cd ~/yerel/proje1
	git pull

"değişiklik yapıp ana depoya yükleme"
	cd ~/yerel/proje1
	#(değişiklikleri yap)
	git add .
	git commit -m 'degisiklik yapildi'
	git pull
	# sorun yoksa
	git push origin master


Örnek Uzaktan Yeni Depo Oluşturma
git clone ssh://gitolite@192.168.1.51:22/pythontr.com
cd pythontr.com
git add .
git commit -m "pythontr.com ilk depo"
git push origin master

eski sürümlere ulaşmak
	git log dosya1
	git show 0323e5918144ec29a069c7ab23cac40ed921d31d:file1

	git tag v0.1 0323e5918144ec29a069c7ab23cac40ed921d31d
	git show v0.1:file1
	git show v0.1:file2

	vim dosya1
	git reset dosya1
	rm dosya1
	git checkout -f dosya1


branch ile çalışma
	# branch oluşturma
	git branch test

	# branc listesi
	git branch

	# branch değiştirme
	git checkout test
	git checkout master

	# branch merge
	git checkout test
	git commit -a
	git checkout master
	git commit -a
	git merge test

	# branch silme
	git branch -d test


depoyu klonlamak (klasör henuz yok, emc2-dev adıyla oluşacak)
	git clone git://git.linuxcnc.org/git/emc2.git emc2-dev


depodan son değişiklikleri almak
	git pull --rebase


kendi değişikliklerimizi depoya yüklemek
	# (yaptıklarımız yerel depoya commit edilecek)
	git pull --rebase
	# (çakışma varsa düzeltilecek)
	git push


henüz yayınlanmaya hazır değişikliklerimiz varken depodan güncelleme
	git stash save
	git pull --rebase
	git stash apply


Örnek Çalışma ISSUE Bazlı

Branch Oluşturma


git branch PD-5

Branch değiştirme


git checkout develop

Projeyi Alma


git pull

Sadece değişenleri gönder


git commit -a -m "SQL Injection Modify"

Değişiklikleri gönderme


git push --set-upstream origin PD-9

Bazen ortak çalışmalarımızda örneğin konfigürasyon dosyalarımız, yada db şifrelerinin bulunduğu gibi dosyalarımızı git e göndermek istemeyebiliriz bu tip durumlarda dosyanın takibini bırakmamız gerekir aşağıdaki komutla bu işi yapabiliriz.


git update-index --assume-unchanged Gemfile



Gitolite sunucu ayarları
Client makinaların depoya dosya bırakıp almak için kullanacağımız diziler.
	# Kurulum
	aptitude install gitolite

	# Gitolite home klasörünü değiştirmek (normalde /var/lib/gitolite)
	mkdir /home/gitolite
	chown gitolite: /home/gitolite
	vim /etc/passwd
		gitolite home klasörü -> /home/gitolite

	# Gitolite kullanıcısı için ssh erişim izni.
	vim /etc/ssh/sshd_config
		AllowUsers husonet gitolite

	# Gitolite admin kullanıcısı ve admin deposu
	cp husonet.pub /tmp/
	chmod a+r /tmp/husonet.pub
	su -l gitolite
	gl-setup /tmp/husonet.pub


Gitolite admin ayarları (admin makinesi)
	# Anahtarı yükleme
	ssh-add .ssh/husonet

	# Gitolite admin deposunu klonlama (SSH 22. port ile)
	git clone ssh://gitolite@10.10.10.10:22/gitolite-admin
	cd gitolite-admin
	git pull

	# Kullanıcı ve depo ekleme
	# Kullanıcının public anahtarı alınır ve kullanıcının adı ile kaydedilir.
	# depo1 adlı depoda kullanici1'in yazma/okuma, kullanici2'nin sadece okuma hakkı
	# olacaksa:

	cp kullanici1.pub gitolite-admin/keydir/
	cp kullanici2.pub gitolite-admin/keydir/
	vim gitolite-admin/conf/gitolite.conf
		repo	depo1
			RW+ = kullanici1
			R = kullanici2

	git status
	git add .
	git commit -m 'depo1, kullanici1 ve kullanici2 eklendi'
	git push


Kullanıcı Client tarafı
	# Anahtarı yükleme
	ssh-add .ssh/kullanici1

	# Depo boşken ilk kullanıldığında
	git clone ssh://gitolite@10.10.10.10:22/depo1
	cd depo1
	touch OKUBENI
	git add .
	git commit -m "depo1 olusturuldu"
	git push origin master

	# Depoyu klonlama
	git clone ssh://gitolite@10.10.10.10:22/depo1
	cd depo1
	git pull

	# Depodan son değişiklikleri alma
	git pull

	# Yapılan değişikliklerin depoya yüklenmesi
	git status	# degisen dosyalar
	git diff	# farkliliklari gormek icin
	git add .	# commit listesine ekleme
	git commit -m 'aciklama'   # yerel depoyu guncelleme
	git push	# ana depoyu guncelleme


Gitweb
Sadece parolayı bilen kullanıcılar gitweb arayüzünü kullanbilecek.

Kurulum
aptitude install gitweb


Ayarlar
	vim /etc/gitweb.conf
		#$projectroot = "/var/cache/git";
		$projectroot = "/home/gitolite/repositories";

	# www-data kullanıcısı gitolite grubuna
		adduser www-data gitolite

	# Group için gitolite depolarını okuma hakkı
		/home/gitolite/.gitolite.rc
			$REPO_UMASK = 0027;

	# Gitweb için .htaccess düzenleme izni
		/etc/apache2/conf.d/gitweb
			AllowOverride AuthConfig Options

	# .htaccess dosyasının oluşturulması
		/usr/share/gitweb/.htaccess
			AuthUserFile    /home/gitolite/htaccess/htpasswd
			AuthType        Basic
			AuthName        "..."
			Require		valid-user
	# . htpasswd dosyasının oluşturulması
		su -l gitolite
		mkdir /home/gitolite/htaccess
		cd /home/gitolite/htaccess
		htpasswd -sc htpasswd kullanici1	# ilk kullanici icin
		htpasswd -s htpasswd kullanici2
		chmod 750 /home/gitolite/htaccess
		chmod 640 /home/gitolite/htaccess/htpasswd


Son olarak repolarımızın yetki iznini ayarlayalım
chmod -R g+rx /home/gitolite/repositories


Git Tag Listesini Remote Üzerinden Fetch Edilmesi
git fetch --tags

Git Tag Listeleme


git tag|grep 1337

Tag Ekleme


git tag -a test-PYTHON-4779 -m "Remove is xxx"

Git Tag Silme


git tag --delete 1336rc1 1337rc1

Tag olarak push etme
git push origin test-PYTHON-4779


Git Repo Tag Silme


git push --delete origin 1336 1337rc1


Git graph kullanımı


git log --oneline --decorate --all --graph
git log --graph --pretty=oneline --abbrev-commit --decorate --all
git log --graph --pretty=oneline --abbrev-commit
git log --graph --pretty=oneline --abbrev-commit | tig

kaynaklar
http://www.kernel.org/pub/software/scm/git/docs/user-manual.html [kernel.org]
https://we.riseup.net/debian/git-development-howto [we.riseup.net]
http://www.emrah.com [emrah.com]
yazar husonet

Yorumlar

Bu içerik için sizde yorum yapabilirsiniz!
anasayfa | makaleler | haberler | dosyalar | linkler | hakkımızda