Pythontr

husonet | Tarih: 17.04.2024

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

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

{reklam}
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
https://we.riseup.net/debian/git-development-howto
http://www.emrah.com