Alıştırma - Paylaşılan depo kullanarak işbirliği yapma
Aynı ağda olmanız koşuluyla doğrudan başka birinin deposundan çekme işe yarar. Ancak, bu hantal bir süreçtir ve çoğu ortak çalışan aynı ağda değildir. Tüm ortak çalışanların gönderebileceği ve çekebileceği merkezi bir depo ayarlamak daha iyidir.
Geliştirici arkadaşınız Bob'a projenizden bahsettiğinizde ve Bob da katılmayı istediğinde, tam olarak buna karar verirsiniz. Bu, çıplak depo olarak da adlandırılan merkezi bir depo ayarlayın.
Boş depo oluşturma
Çalışma ağacı olmayan bir depoya ihtiyacınız vardır. Çıplak deponun çalışma ağacına göre çeşitli avantajları vardır:
- Çalışma ağacı olmadan, hangi dalın kullanıma alınmış olduğu konusunda endişelenmeden herkes değişiklikleri gönderebilir.
- Git'in, başka bir kullanıcının sizinkiyle çakışabilecek değişiklikleri ne zaman gönderdiğini algılaması kolaydır.
- Paylaşılan depo istenen sayıda geliştiriciye göre ölçeklendirilir. Çıplak depoda, çekmeniz gerekebilecek diğer tüm ortak çalışanları değil, yalnızca paylaşılan depo hakkında bilgi sahibi olmanız gerekir.
- Paylaşılan depoyu erişebileceğiniz bir sunucuya yerleştirerek güvenlik duvarları ve izinler konusunda endişelenmeniz gerekmez.
- Git her işlemeyi kimin yaptığını takip ettiğinden sunucuda ayrı hesaplara ihtiyacınız yoktur. (GitHub'da hesabı paylaşan
git
milyonlarca kullanıcı vardır. Herkes Secure Shell (SSH) şifreleme ağ protokollerini kullanır ve kullanıcılar ortak anahtarlarıyla ayırt edilir.)
Paylaşım için çıplak depo oluşturmak kolaydır:
Boş depoyu tutmak için Alice ve Cats dizinleriyle aynı düzeyde Shared.git adlı yeni bir dizin oluşturun:
cd .. mkdir Shared.git cd Shared.git
Dizin adı önemli değildir, ancak bu alıştırmalarda bunu Shared.git dizini veya yalnızca paylaşılan dizin olarak adlandıracağız.
Shared.git dizinini adlandırmak, çıplak depoları çalışan ağaçlardan ayırmak için biten
.git
bir ad atama geleneğini izler. Bu bir kuraldır, ancak bir gereksinim değildir.Şimdi, paylaşılan dizinde çıplak bir depo oluşturmak için aşağıdaki komutu kullanın:
git init --bare
Bir depo hala boş olduğunda,
git checkout
varsayılan dalın adını ayarlamak için komutu kullanılamaz. Bu görevi gerçekleştirmek için, dalınıHEAD
farklı bir dala işaret eden şekilde değiştirebilirsiniz; bu durumda, daldırmain
:git symbolic-ref HEAD refs/heads/main
Sonraki adım kendi deponuzun içeriğini paylaşılan depoya taşımaktır. Deponuzun depolandığı proje dizinine dönmek, bir
origin
uzak ayar ayarlamak ve ilk gönderimi gerçekleştirmek için şu komutları kullanın:cd ../Cats git remote add origin ../Shared.git git push origin main
Çıktıyı denetleyin. Çıktı başarılı olduğunu göstermelidir:
Counting objects: 12, done. Delta compression using up to 2 threads. Compressing objects: 100% (8/8), done. Writing objects: 100% (12/12), 1.07 KiB | 0 bytes/s, done. Total 12 (delta 1), reused 0 (delta 0) To ../Shared.git * [new branch] main -> main
Deponuzu ilk etapta
main
kopyalayarak yapmış gibi dalınıorigin
varsayılan olarak kullanmak ve kullanmak istiyorsunuzpush
pull
. Ancak önce Git'e hangi dalı izlemesi gerektiğini söylemeniz gerekir.git branch --set-upstream-to origin/main
Bu çıkışı denetleyin:
Branch main set up to track remote branch main from origin.
Yeni deponun dalları olmadığından, ilk göndermeden önce bu komutu çalıştırmayı denerseniz Git şikayet eder. Git, var olmayan bir dalı izleyemez. Git'in arka planda yaptığı tek şey trunk adlı bir dosya arıyor
.git/refs/remotes/origin
.
Katkıda bulunanları ayarlama
Sonraki adım Bob'un çıplak depoyu kopyalaması ve ardından Alice'in depodaki kaynağı göndermeler ve çekmeler için paylaşılan depoyu hedef alacak şekilde ayarlamasıdır.
Proje dizininin eşdüzeylerinden biri olan Bob adlı bir dizin oluşturun ve ardından Bob dizinine geçin:
cd .. mkdir Bob cd Bob
Şimdi paylaşılan depoyu kopyalayın (komutun sonuna nokta eklediğinizden emin olun):
git clone ../Shared.git .
Şu anda Alice'in deposu kendi deposuna göndermek ve kendi deposundan çekmek için yapılandırılmıştır. Alice dizinine geçmek ve paylaşılan depoya işaret etmek için aşağıdaki
origin
komutları kullanın:cd ../Alice git remote set-url origin ../Shared.git
İşbirliğine başlama
Bob artık web sitesinde çalışacak şekilde ayarlandığından, Bob sayfanın en altına bir alt bilgi eklemeye karar verir. Birkaç dakikalığına kendimizi Bob ile Alice’in yerine koyalım ve işbirliği yapmanın temellerini öğrenelim.
Bob dizinine gidip Bob olarak çalışarak başlayın:
cd ../Bob git config user.name Bob git config user.email bob@contoso.com
Index.html dosyasını açın ve
<hr>
öğesini şu satırla değiştirin (<body>
öğesinin sonunda bulunur):<footer><hr>Copyright (c) 2021 Contoso Cats</footer>
Ardından dosyayı kaydedin ve düzenleyiciyi kapatın.
Değişiklikleri işleyin ve uzak origin konumuna gönderin:
git commit -a -m "Put a footer at the bottom of the page" git push
Çıktıyı denetleyin. Aşağıdaki örneğe benzer bir uyarı görürseniz endişelenmeyin. Bu uyarı yalnızca kullanıcıların Git'in varsayılan davranışlarında bir değişiklik olduğunu bilmesini sağlar. Bu uyarıyı bir daha görmediğinize emin olmak isterseniz komutunu çalıştırabilirsiniz
git config --global push.default simple
.warning: push.default is unset; its implicit value has changed in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the traditional behavior, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple When push.default is set to 'matching', git will push local branches to the remote branches that already exist with the same name. Since Git 2.0, Git defaults to the more conservative 'simple' behavior, which only pushes the current branch to the corresponding remote branch that 'git pull' uses to update the current branch. See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git)
Bob web sitesini düzenlerken Alice’de bir yandan düzenliyor. Alice sayfaya bir gezinti çubuğu eklemeye karar verir. Bu ekleme için Alice'in iki dosyayı değiştirmesi gerekir: index.html ve site.css. Alice dizinine dönerek başlayın:
cd ../Alice
Şimdi index.html dosyasını açın ve 8. satırdaki etiketin
<body>
hemen arkasına aşağıdaki satırı ekleyin:<nav><a href="./index.html">home</a></nav>
Ardından dosyayı kaydedin ve düzenleyiciyi kapatın.
Ardından, CSS klasöründe site.css dosyasını açın ve alta aşağıdaki satırı ekleyin:
nav { background-color: #C0D8DF; }
Dosyayı kaydedin ve düzenleyiciyi kapatın.
Şimdi, Alice'in Bob'dan sitede değişiklik yaptığını söyleyen bir e-posta aldığını varsayalım. Alice kendi değişikliklerini işlemeden önce Bob’ınkileri çekmeye karar verir. (Alice değişikliklerini zaten işlemiş olsaydı, başka bir modülde ele alınan farklı bir sorunu olurdu.) Alice şu komutu çalıştırır:
git pull
Çıktıyı denetleyin. Çıkışta, Git bir sorunu önlemiş gibi görünüyor:
remote: Counting objects: 3, done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 2), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From ../Shared 843d142..2cf6cbf main -> origin/main Updating 843d142..2cf6cbf error: Your local changes to the following files would be overwritten by merge: index.html Please commit your changes or stash them before you can merge. Aborting
Git, çekme işleminin Alice'in index.html sürümünün üzerine yazacağı ve değişikliklerini kaybedeceği konusunda uyarır. Bunun nedeni Bob’ın da index.html dosyasını değiştirmiş olmasıdır. Alice index.html dosyasını değiştirmeseydi Git birleştirmeyi işliyacaktı.
Bob’ın index.html dosyasında yaptığı değişiklikleri görmek için
git diff
komutunu kullanın:git diff origin -- index.html
Çıktıyı denetleyin. Çıktıda, Alice'in değişiklikleriyle Bob'un değişikliklerinin çakışmadığının ortaya çıkar. Alice artık değişikliklerini depolayabilir.
git stash
birkaç geçici işleme yaparak çalışma ağacının ve dizinin durumunu kaydeder. Hazırlama dosyasını, başka bir işle uğraşırken mevcut işinizi “gerçekten” işleyip depo geçmişinizi değiştirmeden kaydetmenin bir yolu olarak düşünün.Gerçekte, Alice çekmeyi denemeden önce değişikliklerini saklamış veya işlemiş olmalıdır. “Kirli” bir çalışma ağacını çekmek risklidir çünkü kolayca kurtaramayacağınız değişiklikler yapabilir.
Alice’in değişikliklerini hazırlamak için aşağıdaki komutu kullanın:
git stash
Çıktıyı denetleyin. Şu örnek gibi görünmelidir:
Saved working directory and index state WIP on main: 95bbc3b Change background color to light blue HEAD is now at 95bbc3b Change background color to light blue
Alice'in çekmesi güvenlidir, bundan sonra yığın olarak düzenlenmiş olan zulayı "pop" edebilir. (Aslında,
git stash
içingit stash push
kısaltmadır. Henüz ödemediğiniz faturaları koyduğun yığına çok benzer.) Şu komutları çalıştırın:git pull git stash pop
Hazırlama dosyasını almak, değişiklikleri birleştirir. Değişiklikler çakışıyorsa, çakışma olabilir. Bu durumları nasıl çözeceğinizi Microsoft Learn'den daha gelişmiş bir Git modülünde öğrenebilirsiniz.
Çıktıyı denetleyin. Alice, birleştirmenin başarılı olduğunu ve değişikliklerinin geri döndüğünü ancak henüz işleme için hazır olmadığını bilmelerini sağlayan bu çıkışı görmelidir:
Auto-merging index.html On branch main Your branch is up-to-date with 'origin/main'. 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: CSS/site.css modified: index.html no changes added to commit (use "git add" and/or "git commit -a") Dropped refs/stash@{0} (0cfb7b75d56611d9fc6a6ab660a51f5582b8d9c5)
Bu noktada Alice çalışmaya devam edebilir veya yalnızca değişiklikleri işleyip gönderebilir. Alice olarak başka bir değişiklik yapalım ve gezinti çubuklarıyla aynı stilde alt bilgiler atayalım.
CSS klasöründe site.css dosyasını açın ve üçüncü satırı (öğeleri biçimlendiren
<nav>
satır) bu paylaşılan CSS kuralıyla değiştirin. Ardından, her zamanki gibi değişikliklerinizi kaydedin ve düzenleyiciyi kapatın.nav, footer { background-color: #C0D8DF; }
Şimdi değişiklikleri işleyin ve bunları paylaşılan depoya gönderin:
git commit -a -m "Stylize the nav bar" git push
Güncelleştirilmiş site artık paylaşılan depoda yer alır.
Proje dizinine dönüp bir çekme işlemi yaparak bitirin:
cd ../Cats git pull
Hem Bob hem de Alice tarafından yapılan değişikliklerin yerel deponuzda bulunduğunu onaylamak için index.html dosyasını (proje dizinindeki) açın. index.html dosyasının en güncel koda sahip olduğunu doğrulayın:
<!DOCTYPE html> <html> <head> <meta charset='UTF-8'> <title>Our Feline Friends</title> <link rel="stylesheet" href="CSS/site.css"> </head> <body> <nav><a href="./index.html">home</a></nav> <h1>Our Feline Friends</h1> <p>Eventually we will put cat pictures here.</p> <footer><hr>Copyright (c) 2021 Contoso Cats</footer> </body> </html>
Şu anda deponuz ve Alice'in deposu eşitlendi, ancak Bob'un deposu eşitlenmedi. Bob’ın deposunu da güncel hale getirerek işlemi tamamlayın:
cd ../Bob git pull
Artık her üç depo da eşitlenmiştir. Paylaşılan depo, tüm kullanıcılar için tek bir gerçek kaynağıdır ve tüm gönderme ve çekme işlemleri paylaşılan depoya yönlendirilir.
Web sitesinin nasıl göründüğünü merak ediyorsanız önizlemeyi aşağıda bulabilirsiniz:
İsterseniz dosyalarınızı yerel olarak önizlemek için indirebilirsiniz:
Cats klasörünü sıkıştırın:
cd .. zip -r Cats.zip Cats
Sıkıştırılmış dosyayı indirin:
download Cats.zip
Şimdi yerel bilgisayarınızdaki dosyanın sıkıştırmasını açın ve kendiniz görmek için index.hml dosyasını açın!