CINXE.COM
Git - Protokol
<!DOCTYPE html> <html lang="id"> <head> <meta charset='utf-8'> <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Git - Protokol</title> <link href="/favicon.ico" rel='shortcut icon' type='image/x-icon'> <link rel="stylesheet" href="/application.min.css"> <script src="/js/modernizr.js"></script> <script src="/js/modernize.js"></script> </head> <body id="documentation"> <div class="inner"> <header> <a href="/"><img src="/images/logo@2x.png" width="110" height="46" alt="Git" /></a> <span id="tagline"></span> <script type="text/javascript"> const taglines = [ "fast-version-control", "everything-is-local", "distributed-even-if-your-workflow-isnt", "local-branching-on-the-cheap", "distributed-is-the-new-centralized" ]; var tagline = taglines[Math.floor(Math.random() * taglines.length)]; document.getElementById('tagline').innerHTML = '--' + tagline; </script> <form id="search" action="/search/results"> <input id="search-text" name="search" placeholder="Type / to search entire site…" autocomplete="off" type="text" /> </form> <div id="search-results"></div> </header> </div> <div class="inner"> <div id="content-wrapper"> <div tabindex="1" class="sidebar-btn"></div> <aside class="sidebar" id="sidebar"> <nav> <ul> <li> <a href="/about">About</a> <ul> </ul> </li> <li> <a href="/doc" class="active">Documentation</a> <ul class="expanded"> <li> <a href="/docs">Reference</a> </li> <li> <a href="/book" class="active">Book</a> </li> <li> <a href="/videos">Videos</a> </li> <li> <a href="/doc/ext">External Links</a> </li> </ul> </li> <li> <a href="/downloads">Downloads</a> <ul > <li> <a href="/downloads/guis">GUI Clients</a> </li> <li> <a href="/downloads/logos">Logos</a> </li> </ul> </li> <li> <a href="/community">Community</a> </li> </ul> <hr class="sidebar"> <p> This book is available in <a href="/book/en/v2/Git-on-the-Server-The-Protocols">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Server%e2%80%99d%c9%99-Git-Protokollar">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg/v2/GitHub-%d0%a1%d1%8a%d0%b7%d0%b4%d0%b0%d0%b2%d0%b0%d0%bd%d0%b5-%d0%b8-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d0%bd%d0%b0-%d0%b0%d0%ba%d0%b0%d1%83%d0%bd%d1%82">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-auf-dem-Server-Die-Protokolle">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Git-en-el-Servidor-Los-Protocolos">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Git-sur-le-serveur-Protocoles">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja/v2/Git%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc-%e3%83%97%e3%83%ad%e3%83%88%e3%82%b3%e3%83%ab">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-op-de-server-De-protocollen">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/Git-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b5-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d1%8b">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Git-na-stre%c5%beniku-Protokoli">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Git-sa-Server-Ang-Mga-Protokol">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/Git-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d1%96-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d0%b8">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e5%8d%8f%e8%ae%ae">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Git-na-serveru-Protokoly">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d1%82%d0%b5">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Git-na-serwerze-Protoko%c5%82y">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%93%d0%b8%d1%82-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d1%83-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d0%b8">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b4%d0%b0-The-Protocols">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/%e4%bc%ba%e6%9c%8d%e5%99%a8%e4%b8%8a%e7%9a%84-Git-%e9%80%9a%e8%a8%8a%e5%8d%94%e5%ae%9a">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-on-the-Server-The-Protocols">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/%da%af%db%8c%d8%aa-%d8%b1%d9%88%db%8c-%d8%b3%d8%b1%d9%88%d8%b1-%d9%be%d8%b1%d9%88%d8%aa%da%a9%d9%84%e2%80%8c%d9%87%d8%a7" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-di-Server-Protokol">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-on-the-Server-The-Protocols">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-on-the-Server-The-Protocols">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Git-no-servidor-Os-Protocolos">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Git-no-Servidor-The-Protocols">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-p%c3%a5-servern-Protokollen">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Bir-Sunucuda-Git-Kurma-%c4%b0leti%c5%9fim-Kurallar%c4%b1-Protocols">Türkçe</a>.</td></tr> </table> </p> <hr class="sidebar"/> <p> The source of this book is <a href="https://github.com/progit/progit2-id">hosted on GitHub.</a></br> Patches, suggestions and comments are welcome. </p> </nav> </aside> <div id="content"> <div id="book-chapters"> <a class="dropdown-trigger" id="book-chapters-trigger" data-panel-id="chapters-dropdown" href="#">Chapters ▾</a> <div class='dropdown-panel' id='chapters-dropdown'> <div class='three-column'> <div class="column-left"> <ol class='book-toc'> <li class='chapter'> <h2>1. <a href="/book/id/v2/Memulai-Tentang-Version-Control">Memulai</a></h2> <ol> <li> 1.1 <a href="/book/id/v2/Memulai-Tentang-Version-Control">Tentang Version Control</a> </li> <li> 1.2 <a href="/book/id/v2/Memulai-Sejarah-Singkat-Git">Sejarah Singkat Git</a> </li> <li> 1.3 <a href="/book/id/v2/Memulai-Dasar-dasar-Git">Dasar-dasar Git</a> </li> <li> 1.4 <a href="/book/id/v2/Memulai-Command-Line">Command Line</a> </li> <li> 1.5 <a href="/book/id/v2/Memulai-Memasang-Git">Memasang Git</a> </li> <li> 1.6 <a href="/book/id/v2/Memulai-Pengaturan-Awal-Git">Pengaturan Awal Git</a> </li> <li> 1.7 <a href="/book/id/v2/Memulai-Mendapatkan-Bantuan">Mendapatkan Bantuan</a> </li> <li> 1.8 <a href="/book/id/v2/Memulai-Kesimpulan">Kesimpulan</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/id/v2/Git-Basics-Mendapatkan-Repository-Git">Git Basics</a></h2> <ol> <li> 2.1 <a href="/book/id/v2/Git-Basics-Mendapatkan-Repository-Git">Mendapatkan Repository Git</a> </li> <li> 2.2 <a href="/book/id/v2/Git-Basics-Recording-Changes-to-the-Repository">Recording Changes to the Repository</a> </li> <li> 2.3 <a href="/book/id/v2/Git-Basics-Viewing-the-Commit-History">Viewing the Commit History</a> </li> <li> 2.4 <a href="/book/id/v2/Git-Basics-Undoing-Things">Undoing Things</a> </li> <li> 2.5 <a href="/book/id/v2/Git-Basics-Working-with-Remotes">Working with Remotes</a> </li> <li> 2.6 <a href="/book/id/v2/Git-Basics-Tagging">Tagging</a> </li> <li> 2.7 <a href="/book/id/v2/Git-Basics-Alias-Git">Alias Git</a> </li> <li> 2.8 <a href="/book/id/v2/Git-Basics-Summary">Summary</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/id/v2/Git-Branching-Branches-in-a-Nutshell">Git Branching</a></h2> <ol> <li> 3.1 <a href="/book/id/v2/Git-Branching-Branches-in-a-Nutshell">Branches in a Nutshell</a> </li> <li> 3.2 <a href="/book/id/v2/Git-Branching-Basic-Branching-and-Merging">Basic Branching and Merging</a> </li> <li> 3.3 <a href="/book/id/v2/Git-Branching-Branch-Management">Branch Management</a> </li> <li> 3.4 <a href="/book/id/v2/Git-Branching-Branching-Workflows">Branching Workflows</a> </li> <li> 3.5 <a href="/book/id/v2/Git-Branching-Remote-Branches">Remote Branches</a> </li> <li> 3.6 <a href="/book/id/v2/Git-Branching-Rebasing">Rebasing</a> </li> <li> 3.7 <a href="/book/id/v2/Git-Branching-Summary">Summary</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/id/v2/Git-di-Server-Protokol">Git di Server</a></h2> <ol> <li> 4.1 <a href="/book/id/v2/Git-di-Server-Protokol" class="active">Protokol</a> </li> <li> 4.2 <a href="/book/id/v2/Git-di-Server-Getting-Git-on-a-Server">Getting Git on a Server</a> </li> <li> 4.3 <a href="/book/id/v2/Git-di-Server-Generating-Your-SSH-Public-Key">Generating Your SSH Public Key</a> </li> <li> 4.4 <a href="/book/id/v2/Git-di-Server-Setting-Up-the-Server">Setting Up the Server</a> </li> <li> 4.5 <a href="/book/id/v2/Git-di-Server-Git-Daemon">Git Daemon</a> </li> <li> 4.6 <a href="/book/id/v2/Git-di-Server-Smart-HTTP">Smart HTTP</a> </li> <li> 4.7 <a href="/book/id/v2/Git-di-Server-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/id/v2/Git-di-Server-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/id/v2/Git-di-Server-Third-Party-Hosted-Options">Third Party Hosted Options</a> </li> <li> 4.10 <a href="/book/id/v2/Git-di-Server-Ringkasan">Ringkasan</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/id/v2/Distributed-Git-Distributed-Workflows">Distributed Git</a></h2> <ol> <li> 5.1 <a href="/book/id/v2/Distributed-Git-Distributed-Workflows">Distributed Workflows</a> </li> <li> 5.2 <a href="/book/id/v2/Distributed-Git-Contributing-to-a-Project">Contributing to a Project</a> </li> <li> 5.3 <a href="/book/id/v2/Distributed-Git-Maintaining-a-Project">Maintaining a Project</a> </li> <li> 5.4 <a href="/book/id/v2/Distributed-Git-Summary">Summary</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/id/v2/GitHub-Pengaturan-dan-Konfigurasi-Akun">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/id/v2/GitHub-Pengaturan-dan-Konfigurasi-Akun">Pengaturan dan Konfigurasi Akun</a> </li> <li> 6.2 <a href="/book/id/v2/GitHub-Contributing-to-a-Project">Contributing to a Project</a> </li> <li> 6.3 <a href="/book/id/v2/GitHub-Maintaining-a-Project">Maintaining a Project</a> </li> <li> 6.4 <a href="/book/id/v2/GitHub-Mengelola-Organization">Mengelola Organization</a> </li> <li> 6.5 <a href="/book/id/v2/GitHub-Scripting-GitHub">Scripting GitHub</a> </li> <li> 6.6 <a href="/book/id/v2/GitHub-Ringkasan">Ringkasan</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/id/v2/Git-Tools-Revision-Selection">Git Tools</a></h2> <ol> <li> 7.1 <a href="/book/id/v2/Git-Tools-Revision-Selection">Revision Selection</a> </li> <li> 7.2 <a href="/book/id/v2/Git-Tools-Interactive-Staging">Interactive Staging</a> </li> <li> 7.3 <a href="/book/id/v2/Git-Tools-Stashing-and-Cleaning">Stashing and Cleaning</a> </li> <li> 7.4 <a href="/book/id/v2/Git-Tools-Signing-Your-Work">Signing Your Work</a> </li> <li> 7.5 <a href="/book/id/v2/Git-Tools-Searching">Searching</a> </li> <li> 7.6 <a href="/book/id/v2/Git-Tools-Rewriting-History">Rewriting History</a> </li> <li> 7.7 <a href="/book/id/v2/Git-Tools-Reset-Demystified">Reset Demystified</a> </li> <li> 7.8 <a href="/book/id/v2/Git-Tools-Advanced-Merging">Advanced Merging</a> </li> <li> 7.9 <a href="/book/id/v2/Git-Tools-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/id/v2/Git-Tools-Debugging-with-Git">Debugging with Git</a> </li> <li> 7.11 <a href="/book/id/v2/Git-Tools-Submodules">Submodules</a> </li> <li> 7.12 <a href="/book/id/v2/Git-Tools-Bundling">Bundling</a> </li> <li> 7.13 <a href="/book/id/v2/Git-Tools-Replace">Replace</a> </li> <li> 7.14 <a href="/book/id/v2/Git-Tools-Credential-Storage">Credential Storage</a> </li> <li> 7.15 <a href="/book/id/v2/Git-Tools-Summary">Summary</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/id/v2/Kostumisasi-Git-Konfigurasi-Git">Kostumisasi Git</a></h2> <ol> <li> 8.1 <a href="/book/id/v2/Kostumisasi-Git-Konfigurasi-Git">Konfigurasi Git</a> </li> <li> 8.2 <a href="/book/id/v2/Kostumisasi-Git-Git-Attributes">Git Attributes</a> </li> <li> 8.3 <a href="/book/id/v2/Kostumisasi-Git-Git-Hooks">Git Hooks</a> </li> <li> 8.4 <a href="/book/id/v2/Kostumisasi-Git-An-Example-Git-Enforced-Policy">An Example Git-Enforced Policy</a> </li> <li> 8.5 <a href="/book/id/v2/Kostumisasi-Git-Ringkasan">Ringkasan</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/id/v2/Git-and-Other-Systems-Git-as-a-Client">Git and Other Systems</a></h2> <ol> <li> 9.1 <a href="/book/id/v2/Git-and-Other-Systems-Git-as-a-Client">Git as a Client</a> </li> <li> 9.2 <a href="/book/id/v2/Git-and-Other-Systems-Migrating-to-Git">Migrating to Git</a> </li> <li> 9.3 <a href="/book/id/v2/Git-and-Other-Systems-Summary">Summary</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/id/v2/Git-Internals-Plumbing-and-Porcelain">Git Internals</a></h2> <ol> <li> 10.1 <a href="/book/id/v2/Git-Internals-Plumbing-and-Porcelain">Plumbing and Porcelain</a> </li> <li> 10.2 <a href="/book/id/v2/Git-Internals-Git-Objects">Git Objects</a> </li> <li> 10.3 <a href="/book/id/v2/Git-Internals-Git-References">Git References</a> </li> <li> 10.4 <a href="/book/id/v2/Git-Internals-Packfiles">Packfiles</a> </li> <li> 10.5 <a href="/book/id/v2/Git-Internals-The-Refspec">The Refspec</a> </li> <li> 10.6 <a href="/book/id/v2/Git-Internals-Transfer-Protocols">Transfer Protocols</a> </li> <li> 10.7 <a href="/book/id/v2/Git-Internals-Maintenance-and-Data-Recovery">Maintenance and Data Recovery</a> </li> <li> 10.8 <a href="/book/id/v2/Git-Internals-Environment-Variables">Environment Variables</a> </li> <li> 10.9 <a href="/book/id/v2/Git-Internals-Summary">Summary</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/id/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces">Appendix A: Git in Other Environments</a></h2> <ol> <li> A1.1 <a href="/book/id/v2/Appendix-A:-Git-in-Other-Environments-Graphical-Interfaces">Graphical Interfaces</a> </li> <li> A1.2 <a href="/book/id/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Visual-Studio">Git in Visual Studio</a> </li> <li> A1.3 <a href="/book/id/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Eclipse">Git in Eclipse</a> </li> <li> A1.4 <a href="/book/id/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Bash">Git in Bash</a> </li> <li> A1.5 <a href="/book/id/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Zsh">Git in Zsh</a> </li> <li> A1.6 <a href="/book/id/v2/Appendix-A:-Git-in-Other-Environments-Git-in-Powershell">Git in Powershell</a> </li> <li> A1.7 <a href="/book/id/v2/Appendix-A:-Git-in-Other-Environments-Summary">Summary</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/id/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git">Appendix B: Embedding Git in your Applications</a></h2> <ol> <li> A2.1 <a href="/book/id/v2/Appendix-B:-Embedding-Git-in-your-Applications-Command-line-Git">Command-line Git</a> </li> <li> A2.2 <a href="/book/id/v2/Appendix-B:-Embedding-Git-in-your-Applications-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/id/v2/Appendix-B:-Embedding-Git-in-your-Applications-JGit">JGit</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/id/v2/Appendix-C:-Git-Commands-Setup-and-Config">Appendix C: Git Commands</a></h2> <ol> <li> A3.1 <a href="/book/id/v2/Appendix-C:-Git-Commands-Setup-and-Config">Setup and Config</a> </li> <li> A3.2 <a href="/book/id/v2/Appendix-C:-Git-Commands-Getting-and-Creating-Projects">Getting and Creating Projects</a> </li> <li> A3.3 <a href="/book/id/v2/Appendix-C:-Git-Commands-Basic-Snapshotting">Basic Snapshotting</a> </li> <li> A3.4 <a href="/book/id/v2/Appendix-C:-Git-Commands-Branching-and-Merging">Branching and Merging</a> </li> <li> A3.5 <a href="/book/id/v2/Appendix-C:-Git-Commands-Sharing-and-Updating-Projects">Sharing and Updating Projects</a> </li> <li> A3.6 <a href="/book/id/v2/Appendix-C:-Git-Commands-Inspection-and-Comparison">Inspection and Comparison</a> </li> <li> A3.7 <a href="/book/id/v2/Appendix-C:-Git-Commands-Debugging">Debugging</a> </li> <li> A3.8 <a href="/book/id/v2/Appendix-C:-Git-Commands-Patching">Patching</a> </li> <li> A3.9 <a href="/book/id/v2/Appendix-C:-Git-Commands-Email">Email</a> </li> <li> A3.10 <a href="/book/id/v2/Appendix-C:-Git-Commands-External-Systems">External Systems</a> </li> <li> A3.11 <a href="/book/id/v2/Appendix-C:-Git-Commands-Administration">Administration</a> </li> <li> A3.12 <a href="/book/id/v2/Appendix-C:-Git-Commands-Plumbing-Commands">Plumbing Commands</a> </li> </ol> </li> </ol> </div> </div> </div> <span class="light" id="edition"> 2nd Edition </span> </div> <div id="main" data-pagefind-filter="category:book" data-pagefind-meta="category:Book" data-pagefind-weight="0.05" data-pagefind-body class="book edition2"> <h1>4.1 Git di Server - Protokol</h1> <div> <p> Pada tahap ini, seharusnya Anda sudah mampu melakukan sebagian besar tugas sehari-hari yang akan Anda kerjakan dengan menggunakan Git. Namun, untuk melakukan kolaborasi di Git, Anda harus memiliki repositori remote Git. Walaupun secara teknis Anda dapat mendorong dan menarik perubahan dari dan ke repositori seseorang, namun hal itu sangat tidak dianjurkan karena Anda akan kebingungan terhadap apa yang sedang mereka kerjakan jika Anda tidak berhati-hati. Selanjutnya, Anda mengharapkan kolaborator Anda dapat mengakses repositori meskipun komputer Anda sedang luring - memiliki repositori umum yang dapat diandalkan seringkali berguna dalam hal ini. Oleh karena itu, metode yang dianjurkan untuk berkolaborasi dengan seseorang adalah dengan cara membuat repositori perantara dimana Anda berdua memiliki akses untuk mendorong dan menarik perubahan dari repositori tersebut.</p><p>Menjalankan <em>server</em> Git cukup mudah dilakukan. Pertama, Anda memilih protokol yang diinginkan untuk berkomunikasi dengan <em>server</em> Anda. Bagian pertama dari bab ini akan membahas protokol-protokol yang tersedia beserta pro dan kontra dari masing-masing protokol. Bagian selanjutnya akan menjelaskan beberapa pengaturan khusus menggunakan protokol-protokol tersebut dan bagaimana manjalankan <em>server</em> Anda dengannya. Terakhir, kita akan membahas beberapa pilihan tempat penyimpanan, jika Anda tidak keberatan menyimpan kode Anda pada <em>server</em> orang lain dan tidak ingin rumit-rumit mengatur dan merawat <em>server</em> Anda sendiri.</p><p>Jika Anda tidak tertarik untuk menjalankan <em>server</em> sendiri, Anda dapat melewatinya dan langsung ke bagian terakhir bab ini untuk melihat beberapa pilihan untuk pengaturan penyimpanan akun dan kemudian beralih ke bab berikutnya, di mana kami membahas berbagai seluk beluk tentang bekerja dalam lingkungan sumber kontrol yang terdistribusi.</p><p>Sebuah repositori remote pada umumnya merupakan sebuah <em>repositori kosong</em> - sebuah repositori Git yang tidak memiliki direktori kerja. Karena repositori tersebut hanya digunakan sebagai titik kolaborasi, tidak ada alasan untuk memeriksa setiap gambarannya pada <em>disk</em>; itu hanya data Git. Dalam istilah yang paling sederhana, sebuah repositori kosong merupakan isi dari direktori <code>.git</code> proyek Anda dan tidak ada yang lain.</p> <h2 id="_protokol">Protokol</h2> <div class="paragraph"> <p>Git dapat menggunakan empat protokol utama untuk mentransfer data: Lokal, HTTP, <em>Secure Shell</em>(SSH) dan Git. Di sini kita akan membahas apa saja itu dan dalam keadaan dasar seperti apa Anda ingin (atau tidak ingin) menggunakannya.</p> </div> <div class="sect3"> <h3 id="_protokol_lokal">Protokol Lokal</h3> <div class="paragraph"> <p> Hal yang paling mendasar adalah <em>Protokol lokal</em>, di mana repositori <em>remote</em> berada dalam direktori lain pada <em>disk</em>. Ini sering digunakan jika semua orang dalam tim Anda memiliki akses bersama terhadap filesistem seperti <em>mount</em> NFS, atau pada kasus yang sering terjadi setiap orang masuk ke komputer yang sama. Tidak masalah siapa yang terakhir, karena semua contoh kode repositori Anda akan tetap berada pada komputer yang sama, yang lebih mungkin terjadi adalah kerugian dan kehilangan data.</p> </div> <div class="paragraph"> <p>Jika Anda memiliki filesistem yang terpasang bersama, Anda dapat melakukan kloning, <em>push</em>, <em>pull</em> dari dan ke repositori lokal yang berbasis berkas. Untuk melakukan kloning sebuah repositori seperti ini atau menambahkannya sebagai <em>remote</em> kedalam proyek yang sudah ada, gunakan jalur ke repositori sebagai URL. Sebagai contoh, untuk mengkloning sebuah repositori lokal, Anda dapat melakukannya dengan cara seperti ini:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone /opt/git/project.git</code></pre> </div> </div> <div class="paragraph"> <p>Atau dapat dilakukan dengan cara:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone file:///opt/git/project.git</code></pre> </div> </div> <div class="paragraph"> <p>Git bekerja dengan cara yang sedikit berbeda jika Anda menentukan <code>file://</code> di awal URL secara eksplisit. Jika Anda hanya menentukan jalurnya, Git akan mencoba menggunakan <em>hardlink</em> atau menyalin berkas-berkas yang diperlukan secara langsung. Jika Anda menentukan <code>file://</code>, Git akan mengaktifkan proses-proses yang biasanya digunakan untuk memindahkan data melalui jaringan yang umumnya merupakan metode yang kurang efisien dalam memindahkan data. Alasan utama untuk menentukan awalan <code>file://</code> adalah jika Anda menginginkan sebuah salinan repositori yang bersih dengan meninggalkan referensi dan objek asing - biasanya setelah diimpor dari sistem kontrol versi lain atau yang serupa dengannya (lihat <a href="/book/id/v2/ch00/_git_internals">Git Internals</a> untuk tugas-tugas perawatan). Kita akan menggunakan jalur normal di sini karena hal ini akan menjadikannya lebih cepat.</p> </div> <div class="paragraph"> <p>Untuk menambahkan repositori lokal kedalam proyek Git yang sudah ada, Anda dapat menjalankan perintah seperti ini:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git remote add local_proj /opt/git/project.git</code></pre> </div> </div> <div class="paragraph"> <p>Lalu, Anda dapat melakukan <em>push</em> dan <em>pull</em> dari dan ke repositori <em>remote</em> seperti Anda melakukannya melalui jaringan.</p> </div> <div class="sect4"> <h4 id="_pro">Pro</h4> <div class="paragraph"> <p>Repositori berbasis <em>file</em> ini didukung karena terlihat lebih sederhana dan menggunakan hak akses berkas dan akses jaringan yang ada. Jika Anda sudah memiliki sebuah sistem file bersama di mana seluruh tim Anda memiliki akses, mudah sekali membuat sebuah repositori. Simpan salinan repositori kosong di suatu tempat yang dapat diakses secara bersama dan atur hak akses baca/tulis seperti yang Anda inginkan untuk direktori bersama lainya. Kita akan membahas bagaimana mengekspor salinan repositori kosong untuk tujuan ini pada <a href="/book/id/v2/ch00/_git_on_the_server">Getting Git on a Server</a>.</p> </div> <div class="paragraph"> <p>Ini juga merupakan pilihan yang bagus untuk mengambil pekerjaan dari repositori kerja orang lain dengan cepat. Jika Anda dan rekan kerja sedang mengerjakan proyek yang sama dan mereka ingin Anda memeriksa sesuatu, menjalankan perintah seperti <code>git pull /home/john/project</code> seringkali lebih mudah dari pada harus melakukan <em>pushing</em> ke <em>server remote</em> dan mengharuskan Anda untuk melakukan <em>pulling</em> ke komputer lokal.</p> </div> </div> <div class="sect4"> <h4 id="_kontra">Kontra</h4> <div class="paragraph"> <p>Yang menjadi kontra dari metode ini bahwa akses bersama pada umumnya lebih sulit pada pengaturan dan untuk akses dari berbagai lokasi daripada akses jaringan dasar. Jika Anda ingin melakukan <em>push</em> dari laptop saat berada di rumah, Anda harus melakukan <em>mounting</em> disk remote, yang bisa lebih sulit dan lambat jika dibandingkan dengan akses berbasis jaringan.</p> </div> <div class="paragraph"> <p>Penting juga untuk menyebutkan bahwa ini bukan merupakan pilihan tercepat jika Anda menggunakan <em>mount</em> bersama. Repositori lokal cepat hanya jika Anda memiliki akses yang cepat terhadap data. Sebuah repositori pada NFS seringkali lebih lambat jika dibandingkan dengan repositori yang diakses melalui SSH pada <em>server</em> yang sama, yang memungkinkan Git untuk menjalankan disk lokal pada setiap sistem.</p> </div> </div> </div> <div class="sect3"> <h3 id="_protokol_http">Protokol HTTP</h3> <div class="paragraph"> <p>Git dapat berkomunikasi melalui HTTP dalam dua <em>mode</em> yang berbeda. Sebelum Git 1.6.6 hanya ada satu cara yang bisa dilakukan untuk melakukan hal ini dengan cara yang sangat sederhana dan umumnya hanya bisa dibaca. Pada versi 1.6.6 sebuah protokol baru yang lebih cerdas diperkenalkan yang melibatkan kemampuan cerdas Git dalam melakukan transfer data dengan cara yang serupa ketika dilakukan melalui SSH. Dalam beberapa tahun terakhir, protokol HTTP baru ini menjadi sangat terkenal karena lebih mudah bagi pengguna dan lebih pintar dalam cara berkomunikasi. Versi yang lebih baru sering disebut sebagai protokol “Smart” HTTP dan yang lama disebut sebagai protokol “Dumb” HTTP. Kami akan membahas protokol “Smart” HTTP terlebih dahulu.</p> </div> <div class="sect4"> <h4 id="_smart_http">Smart HTTP</h4> <div class="paragraph"> <p> Protokol “Smart” HTTP beroperasi dengan cara yang sama seperti protokol SSH atau Git namun berjalan melalui port standar HTTP/S dan dapat menggunakan bermacam mekanisme otentikasi HTTP, artinya seringkali lebih mudah bagi si pengguna dari pada menggunakan SSH, karena Anda dapat menggunakan hal-hal seperti otentikasi dasar nama pengguna/kata sandi dari pada harus mengatur kunci SSH.</p> </div> <div class="paragraph"> <p>Mungkin ini telah menjadi cara yang paling populer dalam menggunakan Git sekarang ini, karena keduanya dapat diatur untuk berfungsi secara anonim seperti protokol <code>git://</code>, dan juga dapat dilakukan <em>pushing</em> dengan otentikasi dan enkripsi seperti protokol SSH. Daripada harus menyiapkan URL yang berbeda untuk hal-hal seperti ini, sekarang Anda dapat menggunakan satu URL untuk keduanya. Jika Anda melakukan <em>push</em> sedangkan repositori mengharuskan otentikasi (yang memang begitu seharusnya), <em>server</em> dapat meminta nama pengguna dan kata sandi. Hal ini juga berlaku untuk akses baca.</p> </div> <div class="paragraph"> <p>Sebenarnya, untuk layanan seperti GitHub, URL yang Anda gunakan untuk melihat sebuah repositori yang daring (contohnya, “<a href="https://github.com/schacon/simplegit" class="bare">https://github.com/schacon/simplegit</a>”) merupakan URL yang sama yang dapat Anda gunakan untuk mengkloning, dan jika Anda memiliki akses terhadapnya, Anda dapat melakukan <em>push</em> ke repositori tersebut.</p> </div> </div> <div class="sect4"> <h4 id="_dumb_http">Dumb HTTP</h4> <div class="paragraph"> <p> Jika server tidak menanggapi layanan <em>smart</em> HTTP Git, maka klien akan mencoba untuk kembali menggunakan protokol “dumb” HTTP yang lebih sederhana. Protokol <em>Dumb</em> mengharapkan repositori Git yang kosong disajikan seperti berkas yang normal dari <em>server</em> web. Yang menarik dari protokol HTTP <em>Dumb</em> adalah kesederhanaan pengaturannya. Pada dasarnya, yang harus Anda lakukan adalah meletakkan sebuah repositori Git kosong di bawah <em>root</em> dokumen HTTP Anda dan mengaitkannya dengan <code>post-update</code> tertentu, dan selesai (Lihat <a href="/book/id/v2/ch00/_git_hooks">Git Hooks</a>). Pada tahap itu, siapa saja yang dapat mengakses <em>server</em> web tempat Anda meletakkan repositori juga dapat mengkloning repositori Anda. Untuk mengizinkan akses baca ke repositori Anda mealui HTTP, lakukanlah seperti ini:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cd /var/www/htdocs/ $ git clone --bare /jalur/ke/proyek_git gitproject.git $ cd gitproject.git $ mv hooks/post-update.sample hooks/post-update $ chmod a+x hooks/post-update</code></pre> </div> </div> <div class="paragraph"> <p>Itu saja. Kaitan <code>post-update</code> yang hadir bersama Git secara <em>default</em> menjalankan perintah yang tepat (<code>git update-server-info</code>) untuk membuat <em>fetching</em> dan <em>cloning</em> HTTP bekerja dengan semestinya. Perintah ini dijalankan saat Anda melakukan <em>push</em> ke repositori ini (mungkin melalui SSH); maka orang lain dapat melakukan <em>clone</em> dengan cara seperti ini</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone https://example.com/gitproject.git</code></pre> </div> </div> <div class="paragraph"> <p>Pada kasus ini, kami menggunakan jalur <code>/var/www/htdocs</code> yang umum digunakan untuk pengaturan Apache, namun Anda dapat menggunakan <em>server</em> web statis - cukup dengan meletakkan repositori kosong di jalurnya. Data Git berfungsi sebagai <em>file</em> statis dasar (lihat <a href="/book/id/v2/ch00/_git_internals">Git Internals</a> untuk rincian tentang bagaimana cara kerjanya).</p> </div> <div class="paragraph"> <p>Umumnya Anda akan memilih untuk menjalankan <em>server</em> <em>Smart</em> HTTP dengan akses baca/tulis atau hanya memiliki <em>file</em> yang dapat diakses sebagai baca-saja pada kondisi <em>Dumb</em> HTTP. Jarang sekali menjalankan perpaduan dari dua layanan ini.</p> </div> </div> <div class="sect4"> <h4 id="_pro_2">Pro</h4> <div class="paragraph"> <p>Kami akan berkonsentrasi pada dukungan dari versi Smart dari protokol HTTP.</p> </div> <div class="paragraph"> <p>Salah satu kesederhanaan memiliki satu URL untuk semua jenis akses dan mengharuskan pengguna untuk mengisi kembali data untuk otentikasi yang ditampilkan oleh layar <em>server</em> membuat semuanya sangat mudah bagi pengguna akhir. Mampu mengotentikasi dengan menggunakan nama pengguna dan kata sandi juga merupakan keuntungan besar dari SSH, karena pengguna tidak perlu menghasilkan kunci SSH secara lokal dan mengunggah kunci publik mereka ke server sebelum dapat berinteraksi dan bekerja dengannya. Untuk pengguna yang kurang berpengalaman, atau pengguna sistem di mana SSH kurang umum digunakan, kegunaan ini merupakan keuntungan yang utama. Juga merupakan protokol yang sangat cepat dan efisien, mirip dengan SSH.</p> </div> <div class="paragraph"> <p>Anda juga dapat menjalankan repositori Anda dengan status baca-saja melalui HTTPS, yang berarti Anda dapat memindahkan konten data dalam keadaan terenkripsi; atau lebih lanjut dapat dilakukan dengan membuat klien menggunakan sertifikat SSL yang ditandatangani khusus.</p> </div> <div class="paragraph"> <p>Hal menarik lainnya adalah bahwa HTTP/S merupakan protokol yang umum digunakan sehingga <em>firewall-firewall</em> yang digunakan pada perusahaan sering dibuat untuk memungkinkan lalu lintas jaringan melalui <em>port</em> ini.</p> </div> </div> <div class="sect4"> <h4 id="_kontra_2">Kontra</h4> <div class="paragraph"> <p>Penggunaag Git melalui HTTP/S bisa sedikit lebih rumit dalam pengaturannya jika dibandingkan dengan SSH pada beberapa <em>server</em>. Selain itu, protokol-protokol yang lain memiliki sedikit sekali keuntungan jika dibandingkan dengan protokol “Smart” HTTP dalam menjalankan Git.</p> </div> <div class="paragraph"> <p>Jika Anda menggunakan HTTP untuk melakukan <em>pushing</em> yang terotentikasi, memberikan kredensial Anda terkadang menjadi lebih rumit jika dibandingkan dengan menggunakan kunci melalui SSH. Namun ada beberapa perkakas <em>caching</em> kredensial yang dapat Anda gunakan, termasuk akses <em>Keychain</em> pada OSX dan <em>Credential Manager</em> di Windows, untuk menjadikannya lebih mudah. Baca <a href="/book/id/v2/ch00/_credential_caching">Credential Storage</a> untuk melihat bagaimana menyiapkan <em>caching</em> kata sandi HTTP yang aman di sistem Anda.</p> </div> </div> </div> <div class="sect3"> <h3 id="_protokol_ssh">Protokol SSH</h3> <div class="paragraph"> <p> Protokol transportasi yang umum digunakan untuk Git jika melakukan <em>hosting</em> sendiri adalah melalui SSH. Hal ini dikarenakan akses melalui SSH ke <em>server</em> sudah diatur pada kebanyakan sistem - dan jika tidak, cukup mudah untuk melakukannya. SSH juga merupakan sebuah protokol jaringan yang terotentikasi; dan karena itu ada di mana-mana, umumnya mudah untuk dipasang dan digunakan.</p> </div> <div class="paragraph"> <p>Untuk melakukan <em>clone</em> sebuah repositori Git melalui SSH, Anda dapat menentukan ssh:// URL seperti ini:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone ssh://user@server/project.git</code></pre> </div> </div> <div class="paragraph"> <p>Atau Anda dapat menggunakan sintaks yang lebih singkat seperti sintaks <em>secure copy</em> untuk protokol SSH:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git clone user@server:project.git</code></pre> </div> </div> <div class="paragraph"> <p>Anda juga dapat tidak mencantumkan nama pengguna, dan Git akan menganggap pengguna yang saat ini masuk sebagai Anda.</p> </div> <div class="sect4"> <h4 id="_pro_3">Pro</h4> <div class="paragraph"> <p>Ada banyak keuntungan menggunakan SSH. Pertama, SSH relatif mudah diatur - <em>daemon</em> SSH sudah biasa digunakan, banyak administrator jaringan juga memiliki pengalaman menggunakannya, dan kebanyakan distribusi Sistem Operasi disiapkan untuk menggunakan SSH atau memiliki perkakas untuk mengelolanya. Selanjutnya, akses melalui SSH lebih aman - semua transfer data terenkripsi dan terkonfirmasi. Terakhir, seperti halnya protokol HTTP/S, Git dan Lokal, SSH lebih efisien, menjadikan data serapi mungkin sebelum mentransfernya.</p> </div> </div> <div class="sect4"> <h4 id="_the_cons">The Cons</h4> <div class="paragraph"> <p>Aspek negatif dari menggunakan SSH adalah Anda tidak dapat menjalankan akses anonim repositori Anda melaluinya. Pengguna harus memiliki akses ke komputer Anda melalui SSH untuk mengaksesnya, bahkan dalam bentuk baca-saja, sehingga membuat akses SSH tidak kondisif untuk proyek sumber terbuka. Jika Anda hanya menggunakannya dalam jaringa perusahaan Anda, SSH mungkin satu-satunya protokol yang perlu Anda tangani. Jika Anda ingin mengizinkan akses baca-saja bagi pengguna anonim terhadap proyek Anda dan juga ingin menggunakan SSH, Anda harus mempersiapkan SSH bagi Anda agar dapat melakukan <em>push</em> dan sesuatu yang lain bagi pengguna lain untuk melakukan <em>fetch</em>.</p> </div> </div> </div> <div class="sect3"> <h3 id="_protokol_git">Protokol Git</h3> <div class="paragraph"> <p> Berikutnya adalah protokol Git. Ini merupakan <em>daemon</em> khusus yang dikemas bersamaan dengan Git; tugasnya melakukan <em>listening</em> pada <em>port</em> khusus (9418) yang menyediakan layanan yang serupa dengan protokol SSH, namun tanpa otentikasi sama sekali. Agar repositori dapat dijalankan melalui protokol Git, Anda harus membuat berkas <code>git-daemon-export-ok</code> - <em>daemon</em> tidak akan menjalankan repositori tanpa berkas ini di dalamnya - tapi selain itu tidak ada keamanan. Repositori Git tersedia bagi semua orang baik untuk dikloning atau tidak. Ini berarti bahwa secara umum protokol ini tidak dapat melakukan <em>pushing</em> melalui protokol ini. Anda dapat mengaktifkan akses <em>push</em>; namun mengingat kurangnya masalah otentikasi, jika Anda mengaktifkan akses <em>push</em>, setiap orang di internet yang menemukan URL proyek Anda dapat melakukan <em>pushing</em> terhadap proyek Anda. Cukup untuk dikatakan bahwa hal ini jarang terjadi.</p> </div> <div class="sect4"> <h4 id="_pro_4">Pro</h4> <div class="paragraph"> <p>Protokol Git seringkali merupakan protokol transfer jaringan tercepat yang tersedia. Jika Anda melayani banyak lalu lintas data untuk proyek umum atau melayani proyek yang sangat besar yang tidak mengharuskan pengguna melakukan otentikasi untuk akses baca, kemungkinan Anda ingin menyiapkan <em>daemon</em> untuk menjalankan proyek Anda. Protokol ini menggunaka mekanisme transfer data yang sama seperti protokol SSH namun tanpa melalui enkripsi dan otentikasi.</p> </div> </div> <div class="sect4"> <h4 id="_kontra_3">Kontra</h4> <div class="paragraph"> <p>Kelemahan dari protokol Git adalah kurangnya otentikasi. Secara umum hal ini tidak diinginkan untuk menjadikan protokol Git sebagai satu-satunya protokol akses ke proyek Anda. Umumnya, Anda akan menggabungkannya dengan akses melalui SSH atau HTTPS untuk beberapa pengembang yang memilikik akses <em>push</em> (tulis) dan meminta pengguna lain untuk menggunakan <code>git://</code> untuk akses hanya-baca. Ini juga mungkin merupakan protokol yang paling sulit untuk dipersiapkan. Protokol ini harus menjalankan <em>daemon</em> sendiri, yang membutuhkan konfigurasi <code>xinetd</code> atau sejenisnya, yang tidak selalu mudah untuk dilakukan. Protokol ini juga memerlukan akses <em>firewall</em> ke <em>port</em> 9418, yang bukan merupakan <em>port</em> standar yang selalu diizinkan untuk diakses oleh <em>firewall</em> perusahaan. Pada <em>firewall</em> perusahaan besar, <em>port</em> yang tidak dikenal ini biasanya diblokir.</p> </div> </div> </div> <div id="nav"><a href="/book/id/v2/Git-Branching-Summary">prev</a> | <a href="/book/id/v2/Git-di-Server-Getting-Git-on-a-Server">next</a></div> </div> </div> </div> </div> <footer> <div class="site-source"> <a href="/site">About this site</a><br> Patches, suggestions, and comments are welcome. </div> <div class="sfc-member"> Git is a member of <a href="/sfc">Software Freedom Conservancy</a> </div> </footer> <a href="#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top"> <img src="/images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/> </a> <script src="/js/jquery-1.7.1.min.js"></script> <script src="/js/jquery-ui-1.8.18.custom.min.js"></script> <script src="/js/jquery.defaultvalue.js"></script> <script src="/js/session.min.js"></script> <script src="/js/application.min.js"></script> </div> </body> </html>