Latihan - Berkolaborasi dengan menggunakan repositori bersama

Selesai

Menarik langsung dari hasil repositori orang lain, asalkan Anda berdua berada di jaringan yang sama. Tapi, ini adalah proses yang canggung, dan sebagian besar kolaborator tidak berada di jaringan yang sama. Lebih baik menyiapkan repositori pusat yang dapat didorong dan ditarik oleh semua kolaborator.

Ketika Anda memberi tahu teman pengembang Anda Bob tentang proyek Anda dan Bob meminta untuk berpartisipasi, itulah yang Anda putuskan untuk dilakukan—siapkan repositori pusat, yang juga disebut repositori kosong.

Membuat repositori kosong

Yang Anda butuhkan adalah repositori yang tidak memiliki pohon kerja. Repositori kosong memiliki beberapa keunggulan dibandingkan pohon kerja:

  • Tanpa pohon kerja, semua orang dapat mendorong perubahan tanpa khawatir cabang mana yang diperiksa.
  • Sangat mudah bagi Git untuk mendeteksi kapan pengguna lain telah mendorong perubahan yang mungkin bertentangan dengan milik Anda.
  • Repositori bersama menskalakan ke sejumlah pengembang. Dengan repositori kosong, Anda hanya perlu tahu tentang repositori bersama, dan bukan tentang semua kolaborator lain yang mungkin perlu Anda tarik.
  • Dengan menempatkan repositori bersama di server yang dapat diakses oleh Anda semua, Anda tidak perlu khawatir tentang firewall dan izin.
  • Anda tidak memerlukan akun terpisah di server karena Git melacak siapa yang membuat setiap penerapan. (GitHub memiliki jutaan pengguna yang semuanya berbagi akun git. Semua orang menggunakan protokol jaringan kriptografi Secure Shell (SSH), dan pengguna dibedakan oleh kunci publik mereka.)

Membuat repositori kosong untuk berbagi itu mudah:

  1. Buat direktori baru bernama Shared.git pada tingkat yang sama dengan direktori Alice dan Cats untuk menahan repositori kosong:

    cd ..
    mkdir Shared.git
    cd Shared.git
    
    

    Nama direktori tidak penting, tetapi kita akan menyebutnya sebagai direktori Shared.git, atau hanya direktori bersama, dalam latihan ini.

    Penamaan direktori Shared.git mengikuti tradisi lama menetapkan repositori kosong nama yang berakhiran .git untuk membedakannya dari pohon kerja. Ini adalah konvensi, tetapi bukan persyaratan.

  2. Sekarang, gunakan perintah berikut untuk membuat repositori kosong di direktori bersama:

    git init --bare
    
    
  3. Ketika repositori masih kosong, perintah git checkout tidak dapat digunakan untuk mengatur nama cabang default. Untuk menyelesaikan langkah ini, Anda dapat mengubah cabang HEAD agar mengarah ke cabang yang berbeda; dalam hal ini, cabang main:

    git symbolic-ref HEAD refs/heads/main
    
    
  4. Langkah selanjutnya adalah mendapatkan konten repositori Anda ke dalam repositori bersama. Gunakan perintah ini untuk kembali ke direktori proyek tempat repositori Anda disimpan, menyiapkan origin jarak jauh, dan melakukan pendorongan awal:

    cd ../Cats
    git remote add origin ../Shared.git
    git push origin main
    
    
  5. Periksa hasilnya. Output harus menunjukkan keberhasilan:

    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. Anda ingin push dan pull untuk menggunakan cabang main dari origin secara default, seolah-olah Anda telah membuat repositori dengan mengkloningnya di tempat pertama. Tetapi pertama-tama, Anda perlu memberi tahu Git cabang mana yang akan dilacak.

    git branch --set-upstream-to origin/main
    
    
  7. Periksa output ini:

    Branch main set up to track remote branch main from origin.
    

    Git akan mengeluh jika Anda mencoba menjalankan perintah ini sebelum pendorongan awal, karena repositori baru tidak memiliki cabang. Git tidak dapat melacak cabang yang tidak ada. Semua yang Git lakukan di bawah tenda adalah mencari di .git/refs/remotes/origin untuk file bernama trunk.

Menyiapkan untuk kolaborator

Langkah selanjutnya adalah Bob mengkloning repositori kosong, dan kemudian bagi Alice untuk mengatur asal dalam repositori mereka untuk menargetkan repositori bersama untuk mendorong dan menarik.

  1. Buat direktori bernama Bob yang merupakan saudara kandung dari direktori proyek, lalu ubah ke direktori Bob :

    cd ..
    mkdir Bob
    cd Bob
    
    
  2. Sekarang, kloning repositori bersama (pastikan untuk menyertakan periode di akhir perintah):

    git clone ../Shared.git .
    
    
  3. Saat ini, repositori Alice dikonfigurasi untuk mendorong dan menarik dari repositori mereka sendiri. Gunakan perintah berikut untuk mengubah ke direktori Alice dan ubah origin untuk menunjuk ke repositori bersama:

    cd ../Alice
    git remote set-url origin ../Shared.git
    
    

Mulai berkolaborasi

Sekarang setelah Bob siap untuk bekerja di situs web, Bob memutuskan untuk menambahkan catatan kaki ke bagian bawah halaman. Mari kita ikuti persona Bob dan Alice selama beberapa saat dan pelajari dasar-dasar kolaborasi.

  1. Mulailah dengan masuk ke direktori Bob dan bekerja sebagai Bob:

    cd ../Bob
    git config user.name Bob
    git config user.email bob@contoso.com
    
    
  2. Buka index.html dan ganti elemen <hr> dengan baris ini (ditemukan di akhir <body> elemen):

    <footer><hr>Copyright (c) 2021 Contoso Cats</footer>
    

    Kemudian, simpan file dan tutup editor.

  3. Terapkan perubahan dan dorong ke asal jarak jauh:

    git commit -a -m "Put a footer at the bottom of the page"
    git push
    
    
  4. Periksa hasilnya. Jika Anda melihat peringatan seperti contoh berikut, jangan khawatir. Peringatan ini hanya memberi tahu pengguna tentang perubahan pada perilaku default Git. Jika Anda ingin memastikan agar Anda tidak melihat peringatan ini lagi, Anda dapat menjalankan 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. Sementara Bob mengedit situs, Alice juga. Alice memutuskan untuk menambahkan bilah navigasi ke halaman. Penambahan ini mengharuskan Alice untuk memodifikasi dua file: index.html dan site.css. Mulailah dengan kembali ke direktori Alice:

    cd ../Alice
    
    
  6. Sekarang, buka index.html dan sisipkan baris berikut tepat setelah tag <body> pada baris 8:

    <nav><a href="./index.html">home</a></nav>
    

    Kemudian, simpan file dan tutup editor.

  7. Kemudian, buka site.css di folder CSS dan tambahkan baris berikut di bagian bawah:

    nav { background-color: #C0D8DF; }
    

    Simpan file dan tutup editor.

  8. Sekarang, mari kita asumsikan bahwa Alice menerima email dari Bob yang mengatakan bahwa Bob membuat perubahan pada situs. Alice memutuskan untuk menarik perubahan Bob sebelum menerapkan perubahan mereka sendiri. (Jika Alice telah melakukan perubahan mereka, mereka akan memiliki masalah yang berbeda, yang dibahas dalam modul lain.) Alice menjalankan perintah ini:

    git pull
    
    
  9. Periksa hasilnya. Dari outputnya, terlihat seolah-olah Git telah mencegah masalah:

    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 memperingatkan bahwa penarikan akan menimpa versi index.html Alice dan kehilangan perubahannya. Itu karena Bob juga memodifikasi index.html. Jika Alice tidak mengubah index.html, Git akan menerapkan penggabungan.

  10. Gunakan perintah git diff untuk melihat perubahan apa yang dibuat Bob pada index.html:

    git diff origin -- index.html
    
    
  11. Periksa hasilnya. Dari outputnya, terbukti bahwa perubahan Alice dan perubahan Bob tidak tumpang tindih. Sekarang, Alice dapat menyimpan perubahan mereka.

    git stash menyimpan status pohon kerja dan indeks dengan membuat beberapa penerapan sementara. Anggap simpanan sebagai cara untuk menyimpan pekerjaan Anda saat ini saat Anda melakukan sesuatu yang lain, tanpa membuat penerapan "nyata" atau memengaruhi riwayat repositori Anda.

    Pada kenyataannya, Alice seharusnya menyimpan atau menerapkan perubahan mereka sebelum mereka mencoba menarik. Menarik ke pohon kerja "kotor" berisiko, karena itu dapat mengubah hal-hal yang tidak dapat dengan mudah Anda pulihkan.

    Gunakan perintah berikut untuk menyimpan perubahan Alice:

    git stash
    
    
  12. Periksa hasilnya. Dan akan terlihat seperti contoh ini:

    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. Sekarang, aman bagi Alice untuk menarik, setelah itu mereka dapat "memunculkan" simpanan, yang diatur sebagai tumpukan. (Sebenarnya, git stash adalah pintasan dari git stash push. Ini sangat mirip dengan tumpukan tempat Anda menempatkan tagihan yang belum Anda bayar.) Jalankan perintah ini:

    git pull
    git stash pop
    
    

    Memunculkan simpanan menggabungkan perubahan. Jika perubahan tumpang tindih, mungkin ada konflik. Anda dapat mempelajari cara mengatasi situasi tersebut dalam modul Git yang lebih canggih dari Microsoft Learn.

  14. Periksa hasilnya. Alice akan melihat output ini, yang memberi tahu mereka bahwa penggabungan berhasil dan bahwa perubahannya kembali, tetapi belum ditahapkan untuk penerapan:

    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)
    

    Pada titik ini, Alice dapat terus bekerja atau hanya menerapkan dan mendorong perubahan mereka. Mari kita buat perubahan lain sebagai Alice dengan menetapkan catatan kaki dengan gaya yang sama dengan bilah navigasi.

  15. Buka site.css di folder CSS dan ganti baris ketiga—baris yang menata elemen <nav>—dengan aturan CSS bersama ini. Kemudian, seperti biasa, simpan perubahan Anda dan tutup editor.

    nav, footer { background-color: #C0D8DF; }
    
  16. Sekarang, terapkan perubahan dan dorong ke repositori bersama:

    git commit -a -m "Stylize the nav bar"
    git push
    
    

    Situs yang diperbarui sekarang berada di repositori bersama.

  17. Selesaikan kembali ke direktori proyek dan lakukan penarikan:

    cd ../Cats
    git pull
    
    
  18. Buka index.html (yang ada di direktori proyek) untuk mengonfirmasi bahwa perubahan yang dibuat oleh Bob dan Alice ada di repositori lokal Anda. Verifikasi bahwa index.html memiliki kode terbaru:

    <!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. Saat ini, repositori Anda dan repositori Alice disinkronkan, tetapi repositori Bob tidak. Selesaikan dengan memperbarui Bob juga:

    cd ../Bob
    git pull
    
    

Ketiga repositori sekarang dalam penyelarasan. Repositori bersama adalah sumber kebenaran tunggal untuk semua pengguna, dan semua pendorongan dan penarikan diarahkan ke repositori bersama.

Jika Anda ingin tahu seperti apa situs webnya, berikut adalah pratinjau:

Screenshot of the rendered Cats website.

Jika mau, Anda dapat mengunduh file untuk melihat pratinjaunya secara lokal:

  1. Zip folder Cats:

    cd ..
    zip -r Cats.zip Cats
    
    
  2. Unduh file zip:

    download Cats.zip
    
    
  3. Sekarang, buka zip file di komputer lokal Anda dan buka index.hml untuk melihatnya sendiri!