Alıştırma - Paylaşılan depo kullanarak işbirliği yapma

Tamamlandı

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:

  1. 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.

  2. Şimdi, paylaşılan dizinde çıplak bir depo oluşturmak için aşağıdaki komutu kullanın:

    git init --bare
    
    
  3. 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ır main :

    git symbolic-ref HEAD refs/heads/main
    
    
  4. 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
    
    
  5. Çı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
    
  6. Deponuzu ilk etapta main kopyalayarak yapmış gibi dalını origin varsayılan olarak kullanmak ve kullanmak istiyorsunuz pushpull. Ancak önce Git'e hangi dalı izlemesi gerektiğini söylemeniz gerekir.

    git branch --set-upstream-to origin/main
    
    
  7. 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.

  1. 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
    
    
  2. Şimdi paylaşılan depoyu kopyalayın (komutun sonuna nokta eklediğinizden emin olun):

    git clone ../Shared.git .
    
    
  3. Ş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.

  1. Bob dizinine gidip Bob olarak çalışarak başlayın:

    cd ../Bob
    git config user.name Bob
    git config user.email bob@contoso.com
    
    
  2. 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.

  3. 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
    
    
  4. Çı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)
    
  5. 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
    
    
  6. Ş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.

  7. 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.

  8. Ş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
    
    
  9. Çı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ı.

  10. Bob’ın index.html dosyasında yaptığı değişiklikleri görmek için git diff komutunu kullanın:

    git diff origin -- index.html
    
    
  11. Çı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
    
    
  12. Çı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
    
  13. Alice'in çekmesi güvenlidir, bundan sonra yığın olarak düzenlenmiş olan zulayı "pop" edebilir. (Aslında, git stash için git stash pushkı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.

  14. Çı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.

  15. 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; }
    
  16. Ş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.

  17. Proje dizinine dönüp bir çekme işlemi yaparak bitirin:

    cd ../Cats
    git pull
    
    
  18. 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>
    
  19. Ş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:

Screenshot of the rendered Cats website.

İsterseniz dosyalarınızı yerel olarak önizlemek için indirebilirsiniz:

  1. Cats klasörünü sıkıştırın:

    cd ..
    zip -r Cats.zip Cats
    
    
  2. Sıkıştırılmış dosyayı indirin:

    download Cats.zip
    
    
  3. Ş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!