Dağıtık versiyon kontrol sistemleri arasında, bir diğeri Bazaar olarak bilinir. Bazaar, özgür ve açık kaynaklıdır ve GNU Projesi'nin bir parçasıdır. Git’ten oldukça farklı davranır. Git ile aynı şeyi yapabilmek için bazen farklı bir anahtar kelime kullanmanız gerekebilir ve bazı yaygın anahtar kelimelerin aynı anlamı taşımadığı görülebilir. Özellikle, dalların yönetimi çok farklıdır ve Git evreninden gelen birisi için özellikle kafa karıştırıcı olabilir. Bununla birlikte, bir Git reposunda bir Bazaar reposunda çalışmak mümkündür.
Git’i bir Bazaar istemcisi olarak kullanmanıza izin veren birçok proje bulunmaktadır. Burada, Felipe Contreras’in projesini kullanacağız ve bu projeyi şurada bulabilirsiniz: https://github.com/felipec/git-remote-bzr. Kurulum için, sadece git-remote-bzr dosyasını $PATH içeren bir klasöre indirmeniz yeterlidir:
$ wget https://raw.github.com/felipec/git-remote-bzr/master/git-remote-bzr -O ~/bin/git-remote-bzr
$ chmod +x ~/bin/git-remote-bzrAyrıca Bazaar’ın da kurulu olması gerekmektedir. Hepsi bu kadar!
Kullanımı oldukça basittir.
Bir Bazaar reposunu kopyalamak için onu bzr:: önekiyle kopyalamak yeterlidir.
Hem Git hem de Bazaar, makinanıza tam kopyalar yapar; bu nedenle bir Git kopyasını yerel Bazaar kopyanıza bağlamak mümkündür, ancak önerilmez.
Git kopyanızı doğrudan Bazaar kopyanızın bağlı olduğu yere (merkezi repo) bağlamak çok daha kolaydır.
Varsayalım ki bzr+ssh://developer@mybazaarserver:myproject adresinde bir uzak repo ile çalıştınız.
O zaman onu şu şekilde kopyalamalısınız:
$ git clone bzr::bzr+ssh://developer@mybazaarserver:myproject myProject-Git
$ cd myProject-GitBu noktada, Git reposu oluşturulmuş olsa da, disk kullanımı için optimize edilmiş değildir. Bu yüzden, özellikle büyük bir repo ise, Git reposunuzu temizlemeniz ve sıkıştırmanız gerekmektedir:
$ git gc --aggressiveBazaar sadece dalları kopyalamanıza izin verir, ancak bir repo birden çok dal içerebilir ve git-remote-bzr her ikisini de kopyalayabilir.
Örneğin, bir dalı kopyalamak için:
$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs/trunk emacs-trunkVe tüm repoyu kopyalamak için:
$ git clone bzr::bzr://bzr.savannah.gnu.org/emacs emacsİkinci komut, emacs reposunda bulunan tüm dalları kopyalar; yine de, belirli bazı dalları işaretlemek mümkündür:
$ git config remote-bzr.branches 'trunk, xwindow'Bazı uzak repolar, dallarını listeleme izni vermez; bu durumda onları manuel olarak belirtmeniz gerekir. Kpyalama komutunda yapılandırmayı belirtmenize rağmen, bu yöntemi daha kolay bulabilirsiniz:
$ git init emacs
$ git remote add origin bzr::bzr://bzr.savannah.gnu.org/emacs
$ git config remote-bzr.branches 'trunk, xwindow'
$ git fetchBazaar tarafından yönetilen bir projede çalıştığınızdan, .gitignore dosyası oluşturmamalısınız.
Çünkü yanlışlıkla sürüm kontrolü altına alabilirsiniz ve Bazaar ile çalışan diğer kişiler bundan rahatsız olabilir.
Çözüm, simgesel bir bağ olarak veya düzenli bir dosya olarak .git/info/exclude dosyasını oluşturmaktır.
Bu sorunu nasıl çözeceğimizi daha sonra göreceğiz.
Bazaar, dosyaları yok saymak için Git ile aynı modeli kullanır, ancak benzersiz iki özelliğe de sahiptir. Tam açıklamayı dokümantasyonda bulabilirsiniz. Bahsettiğimiz iki özellik şunlardır:
-
"!!", bir "!" kuralı kullanılarak belirtilse bile belirli dosya kalıplarını yok saymanızı sağlar.
-
Bir satırın başında "RE:" yazmak, bir Python düzenli ifadesi belirtmenizi sağlar (Git yalnızca shell globlarını destekler).
Sonuç olarak, düşünülmesi gereken iki farklı durum vardır:
-
Eğer
.bzrignoredosyası bu iki belirli önekten herhangi birini içermiyorsa, o zaman sadece bir sembolik bağ oluşturabilirsiniz:ln -s .bzrignore .git/info/exclude -
Aksi takdirde,
.git/info/excludedosyasını oluşturmalı ve onu.bzrignoreiçindeki tam olarak aynı dosyaları yok sayacak şekilde uyarlamalısınız.
Ne olursa olsun, .bzrignore 'daki herhangi bir değişikliğe karşı dikkatli olmalı ve .git/info/exclude dosyasının her zaman .bzrignore 'u yansıttığından emin olmalısınız.
Gerçekten de, eğer .bzrignore dosyası değişirse ve "!!" veya "RE:" ile başlayan bir veya daha fazla satır içeriyorsa; Git bu satırları yorumlayamadığından, .git/info/exclude dosyanızı .bzrignore ile aynı dosyaları yok sayacak şekilde uyarlamalısınız.
Ayrıca, .git/info/exclude dosyası sembolik bir bağsa, önce sembolik bağı silmeniz, `.bzrignore’u `.git/info/exclude’a kopyalamanız ve daha sonra ikincisini uyarlamanız gerekecektir.
Ancak dikkatli olun, çünkü Git’te bir dosyanın üst dizinini hariç tutarsanız, dosyayı yeniden dahil etmek imkansızdır.
Uzak repodaki değişiklikleri getirmek için, Git komutlarını kullanarak değişiklikleri her zamanki gibi çekersiniz. Değişikliklerinizin "master" dalında olduğunu varsayarak, çalışmanızı "Origin/master" dalında birleştirir veya yeniden temellendirirsiniz:
$ git pull --rebase originBazaar’ın da birleştirme işlemi kavramı olduğu için, birleştirme işlemi içeren bir işlem yaparsanız sorun yaşamayacaksınız. Bu nedenle bir dalda çalışabilir, değişiklikleri `master`a birleştirebilir ve çalışmanızı gönderebilirsiniz. Sonra, dallarınızı oluşturur, çalışmanızı test eder ve normal şekilde kaydedersiniz. Son olarak, çalışmanızı Bazaar reposuna gönderirsiniz:
$ git push origin masterGit’in uzak yardımcılar çerçevesinin geçerli bazı sınırlamaları vardır. Özellikle şu komutlar çalışmaz:
-
git Push Origin :branch-to-delete (Bazaar bu şekilde ref silme işlemlerini kabul edemez.)
-
git Push Origin old:new ("old" itilecektir)
-
git Push --dry-run Origin <dal> (itecektir)
-
git push origin :branch-to-delete (Bazaar can’t accept ref deletions in this way.)
-
git push origin old:new (it will push 'old')
-
git push --dry-run origin branch (it will push)