husonet | Tarih: 24.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