CINXE.COM
Git - Одржување на проект
<!DOCTYPE html> <html lang="mk"> <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 - Одржување на проект</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/Distributed-Git-Summary">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Paylanm%c4%b1%c5%9f-Git-Q%c4%b1sa-M%c9%99zmun">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg/v2/Git-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-%d0%9f%d0%be%d0%b4%d0%bf%d0%b8%d1%81%d0%b2%d0%b0%d0%bd%d0%b5-%d0%bd%d0%b0-%d0%b2%d0%b0%d1%88%d0%b0%d1%82%d0%b0-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Verteiltes-Git-Zusammenfassung">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Git-en-entornos-distribuidos-Resumen">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Git-distribu%c3%a9-R%c3%a9sum%c3%a9">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja/v2/Git-%e3%81%a7%e3%81%ae%e5%88%86%e6%95%a3%e4%bd%9c%e6%a5%ad-%e3%81%be%e3%81%a8%e3%82%81">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%ec%9a%94%ec%95%bd">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Gedistribueerd-Git-Samenvatting">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/%d0%a0%d0%b0%d1%81%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d1%91%d0%bd%d0%bd%d1%8b%d0%b9-Git-%d0%97%d0%b0%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Porazdeljeni-Git-Povzetek">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Distributed-Git-Summary">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/%d0%a0%d0%be%d0%b7%d0%bf%d0%be%d0%b4%d1%96%d0%bb%d0%b5%d0%bd%d0%b8%d0%b9-Git-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/%e5%88%86%e5%b8%83%e5%bc%8f-Git-%e6%80%bb%e7%bb%93">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Distribuovan%c3%bd-Git-Shrnut%c3%ad">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd-Git-%d0%9e%d0%b4%d1%80%d0%b6%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Rozproszony-Git-Podsumowanie">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd%d0%b8-%d0%93%d0%b8%d1%82-%d0%a0%d0%b5%d0%b7%d0%b8%d0%bc%d0%b5">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Distributed-Git-Summary">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/%e5%88%86%e6%95%a3%e5%bc%8f%e7%9a%84-Git-Summary">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Distributed-Git-Summary">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/%da%af%db%8c%d8%aa-%d8%aa%d9%88%d8%b2%db%8c%d8%b9%e2%80%8c%d8%b4%d8%af%d9%87-%d8%ae%d9%84%d8%a7%d8%b5%d9%87" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Distributed-Git-Summary">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Distributed-Git-Summary">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Distributed-Git-Summary">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Distributed-Git-Summary">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Git-Distribu%c3%addo-Resumo">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Distribuerade-Git-Sammanfattning">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Da%c4%9f%c4%b1t%c4%b1k-Git-%c3%96zet">Türkçe</a>.</td></tr> </table> </p> <hr class="sidebar"/> <p> The source of this book is <a href="https://github.com/progit2-mk/progit2">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/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-%d0%97%d0%b0-%d0%b2%d0%b5%d1%80%d0%b7%d0%b8%d1%81%d0%ba%d0%b0-%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d0%b0">Почеток</a></h2> <ol> <li> 1.1 <a href="/book/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-%d0%97%d0%b0-%d0%b2%d0%b5%d1%80%d0%b7%d0%b8%d1%81%d0%ba%d0%b0-%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d0%b0">За верзиска контрола</a> </li> <li> 1.2 <a href="/book/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-%d0%9a%d1%80%d0%b0%d1%82%d0%ba%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git">Кратка историја на Git</a> </li> <li> 1.3 <a href="/book/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%bd%d0%b0-%d0%93%d0%b8%d1%82">Основи на Гит</a> </li> <li> 1.4 <a href="/book/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%b0%d1%82%d0%b0-%d0%bb%d0%b8%d0%bd%d0%b8%d1%98%d0%b0">Командната линија</a> </li> <li> 1.5 <a href="/book/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-%d0%98%d0%bd%d1%81%d1%82%d0%b0%d0%bb%d0%b8%d1%80%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-Git">Инсталирање на Git</a> </li> <li> 1.6 <a href="/book/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-First-Time-Git-Setup">First-Time Git Setup</a> </li> <li> 1.7 <a href="/book/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-Getting-Help">Getting Help</a> </li> <li> 1.8 <a href="/book/mk/v2/%d0%9f%d0%be%d1%87%d0%b5%d1%82%d0%be%d0%ba-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-%d0%94%d0%be%d0%b1%d0%b8%d0%b2%d0%b0%d1%9a%d0%b5-%d1%81%d0%ba%d0%bb%d0%b0%d0%b4%d0%b8%d1%88%d1%82%d0%b5-%d0%b7%d0%b0-Git">Основите на Git</a></h2> <ol> <li> 2.1 <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-%d0%94%d0%be%d0%b1%d0%b8%d0%b2%d0%b0%d1%9a%d0%b5-%d1%81%d0%ba%d0%bb%d0%b0%d0%b4%d0%b8%d1%88%d1%82%d0%b5-%d0%b7%d0%b0-Git">Добивање складиште за Git</a> </li> <li> 2.2 <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-%d0%a1%d0%bd%d0%b8%d0%bc%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%bc%d0%b5%d0%bd%d0%b8-%d0%b2%d0%be-%d1%81%d0%ba%d0%bb%d0%b0%d0%b4%d0%b8%d1%88%d1%82%d0%b5%d1%82%d0%be">Снимање на промени во складиштето</a> </li> <li> 2.3 <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-%d0%9f%d1%80%d0%b8%d0%ba%d0%b0%d0%b6%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d0%b8%d1%81%d1%82%d0%be%d1%80%d0%b8%d1%98%d0%b0%d1%82%d0%b0-%d0%bd%d0%b0-%d0%b8%d0%b7%d0%b2%d1%80%d1%88%d1%83%d0%b2%d0%b0%d1%9a%d0%b5">Прикажување на историјата на извршување</a> </li> <li> 2.4 <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-%d0%9f%d0%be%d0%bd%d0%b8%d1%88%d1%82%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d0%bd%d0%b5%d1%88%d1%82%d0%b0%d1%82%d0%b0">Поништување на нештата</a> </li> <li> 2.5 <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-Working-with-Remotes">Working with Remotes</a> </li> <li> 2.6 <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-Tagging">Tagging</a> </li> <li> 2.7 <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-Git-%d0%90%d0%bb%d0%b8%d1%98%d0%b0%d1%81%d0%b8">Git Алијаси</a> </li> <li> 2.8 <a href="/book/mk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8%d1%82%d0%b5-%d0%bd%d0%b0-Git-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%be%d0%b1%d1%98%d0%b0%d1%81%d0%bd%d0%b5%d1%82%d0%be">Гранење во Git</a></h2> <ol> <li> 3.1 <a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%be%d0%b1%d1%98%d0%b0%d1%81%d0%bd%d0%b5%d1%82%d0%be">Гранење објаснето</a> </li> <li> 3.2 <a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%bd%d0%be-%d1%80%d0%b0%d0%b7%d0%b3%d1%80%d0%b0%d0%bd%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%b8-%d1%81%d0%bf%d0%be%d1%98%d1%83%d0%b2%d0%b0%d1%9a%d0%b5">Основно разгранување и спојување</a> </li> <li> 3.3 <a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-Branch-Management">Branch Management</a> </li> <li> 3.4 <a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-%d0%a0%d0%b0%d0%b1%d0%be%d1%82%d0%bd%d0%b8-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d0%b8">Работни процеси</a> </li> <li> 3.5 <a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-%d0%94%d0%b0%d0%bb%d0%b5%d1%87%d0%b8%d0%bd%d1%81%d0%ba%d0%b8-%d0%b3%d1%80%d0%b0%d0%bd%d0%ba%d0%b8">Далечински гранки</a> </li> <li> 3.6 <a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-%d0%a0%d0%b5%d0%b1%d0%b0%d0%b7%d0%b0">Ребаза</a> </li> <li> 3.7 <a href="/book/mk/v2/%d0%93%d1%80%d0%b0%d0%bd%d0%b5%d1%9a%d0%b5-%d0%b2%d0%be-Git-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>4. <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">Git на Сервер</a></h2> <ol> <li> 4.1 <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> </li> <li> 4.2 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%94%d0%be%d0%b1%d0%b8%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-Git-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80">Добивање на Git на сервер</a> </li> <li> 4.3 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%93%d0%b5%d0%bd%d0%b5%d1%80%d0%b8%d1%80%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d0%b2%d0%b0%d1%88%d0%b8%d0%be%d1%82-SSH-%d1%98%d0%b0%d0%b2%d0%b5%d0%bd-%d0%ba%d0%bb%d1%83%d1%87">Генерирање на вашиот SSH јавен клуч</a> </li> <li> 4.4 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%9f%d0%be%d1%81%d1%82%d0%b0%d0%b2%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%be%d1%82">Поставување на серверот</a> </li> <li> 4.5 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%93%d0%b8%d1%82-%d0%b4%d0%b5%d0%bc%d0%be%d0%bd">Гит демон</a> </li> <li> 4.6 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-Smart-HTTP">Smart HTTP</a> </li> <li> 4.7 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%9e%d0%bf%d1%86%d0%b8%d0%b8-%d0%b7%d0%b0-%d0%b4%d0%be%d0%bc%d0%b0%d1%9c%d0%b8%d0%bd%d0%b8-%d0%bd%d0%b0-%d1%82%d1%80%d0%b5%d1%82%d0%b8-%d0%bb%d0%b8%d1%86%d0%b0">Опции за домаќини на трети лица</a> </li> <li> 4.10 <a href="/book/mk/v2/Git-%d0%bd%d0%b0-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/mk/v2/%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd-Git-%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd%d0%b8-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%bd%d0%b8-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d0%b8">Дистрибуиран Git</a></h2> <ol> <li> 5.1 <a href="/book/mk/v2/%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd-Git-%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd%d0%b8-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%bd%d0%b8-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d0%b8">Дистрибуирани работни процеси</a> </li> <li> 5.2 <a href="/book/mk/v2/%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd-Git-%d0%9f%d1%80%d0%b8%d0%b4%d0%be%d0%bd%d0%b5%d1%81-%d0%ba%d0%be%d0%bd-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82">Придонес кон проект</a> </li> <li> 5.3 <a href="/book/mk/v2/%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd-Git-%d0%9f%d1%80%d0%b8%d0%b2%d0%b0%d1%82%d0%b5%d0%bd-%d0%bc%d0%b0%d0%bb-%d1%82%d0%b8%d0%bc">Приватен мал тим</a> </li> <li> 5.4 <a href="/book/mk/v2/%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd-Git-%d0%9e%d0%b4%d1%80%d0%b6%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82" class="active">Одржување на проект</a> </li> <li> 5.5 <a href="/book/mk/v2/%d0%94%d0%b8%d1%81%d1%82%d1%80%d0%b8%d0%b1%d1%83%d0%b8%d1%80%d0%b0%d0%bd-Git-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/mk/v2/GitHub-%d0%9f%d0%be%d1%81%d1%82%d0%b0%d0%b2%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d1%81%d0%bc%d0%b5%d1%82%d0%ba%d0%b0-%d0%b8-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%98%d0%b0">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/mk/v2/GitHub-%d0%9f%d0%be%d1%81%d1%82%d0%b0%d0%b2%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d1%81%d0%bc%d0%b5%d1%82%d0%ba%d0%b0-%d0%b8-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%98%d0%b0">Поставување сметка и конфигурација</a> </li> <li> 6.2 <a href="/book/mk/v2/GitHub-%d0%9f%d1%80%d0%b8%d0%b4%d0%be%d0%bd%d0%b5%d1%81-%d0%ba%d0%be%d0%bd-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82">Придонес кон проект</a> </li> <li> 6.3 <a href="/book/mk/v2/GitHub-%d0%9e%d0%b4%d1%80%d0%b6%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82">Одржување на проект</a> </li> <li> 6.4 <a href="/book/mk/v2/GitHub-%d0%a1%d0%bf%d0%b5%d1%86%d0%b8%d1%98%d0%b0%d0%bb%d0%bd%d0%b8-%d0%b4%d0%b0%d1%82%d0%be%d1%82%d0%b5%d0%ba%d0%b8">Специјални датотеки</a> </li> <li> 6.5 <a href="/book/mk/v2/GitHub-%d0%a3%d0%bf%d1%80%d0%b0%d0%b2%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d1%81%d0%be-%d0%be%d1%80%d0%b3%d0%b0%d0%bd%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0">Управување со организација</a> </li> <li> 6.6 <a href="/book/mk/v2/GitHub-%d0%a1%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d0%b8%d1%80%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-GitHub">Скриптирање на GitHub</a> </li> <li> 6.7 <a href="/book/mk/v2/GitHub-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Revision-Selection">Git Алатки</a></h2> <ol> <li> 7.1 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Revision-Selection">Revision Selection</a> </li> <li> 7.2 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-%d0%98%d0%bd%d1%82%d0%b5%d1%80%d0%b0%d0%ba%d1%82%d0%b8%d0%b2%d0%bd%d0%be-%d1%81%d1%82%d0%b0%d0%b6%d0%b8%d1%80%d0%b0%d1%9a%d0%b5">Интерактивно стажирање</a> </li> <li> 7.3 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Stashing-and-Cleaning">Stashing and Cleaning</a> </li> <li> 7.4 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Signing-Your-Work">Signing Your Work</a> </li> <li> 7.5 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Searching">Searching</a> </li> <li> 7.6 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Rewriting-History">Rewriting History</a> </li> <li> 7.7 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Reset-Demystified">Reset Demystified</a> </li> <li> 7.8 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-%d0%9d%d0%b0%d0%bf%d1%80%d0%b5%d0%b4%d0%bd%d0%be-%d1%81%d0%bf%d0%be%d1%98%d1%83%d0%b2%d0%b0%d1%9a%d0%b5">Напредно спојување</a> </li> <li> 7.9 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-%d0%94%d0%b5%d0%b1%d0%b0%d0%b3%d0%b8%d1%80%d0%b0%d1%9a%d0%b5-%d1%81%d0%be-Git">Дебагирање со Git</a> </li> <li> 7.11 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-Submodules">Submodules</a> </li> <li> 7.12 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-%d0%97%d0%b1%d0%b8%d0%b2%d0%b0%d1%9a%d0%b5">Збивање</a> </li> <li> 7.13 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-%d0%97%d0%b0%d0%bc%d0%b5%d0%bd%d1%83%d0%b2%d0%b0%d1%9a%d0%b5">Заменување</a> </li> <li> 7.14 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-%d0%a1%d0%ba%d0%bb%d0%b0%d0%b4%d0%b8%d1%80%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-%d0%b8%d0%bd%d0%b3%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d0%b8">Складирање на ингеренции</a> </li> <li> 7.15 <a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/mk/v2/%d0%9f%d0%b5%d1%80%d1%81%d0%be%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git-Git-Configuration">Персонализација на Git</a></h2> <ol> <li> 8.1 <a href="/book/mk/v2/%d0%9f%d0%b5%d1%80%d1%81%d0%be%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git-Git-Configuration">Git Configuration</a> </li> <li> 8.2 <a href="/book/mk/v2/%d0%9f%d0%b5%d1%80%d1%81%d0%be%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git-Git-%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8">Git Атрибути</a> </li> <li> 8.3 <a href="/book/mk/v2/%d0%9f%d0%b5%d1%80%d1%81%d0%be%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git-Git-Hooks">Git Hooks</a> </li> <li> 8.4 <a href="/book/mk/v2/%d0%9f%d0%b5%d1%80%d1%81%d0%be%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git-An-Example-Git-Enforced-Policy">An Example Git-Enforced Policy</a> </li> <li> 8.5 <a href="/book/mk/v2/%d0%9f%d0%b5%d1%80%d1%81%d0%be%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/mk/v2/Git-%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8-Git-%d0%ba%d0%b0%d0%ba%d0%be-%d0%9a%d0%bb%d0%b8%d0%b5%d0%bd%d1%82">Git и други системи</a></h2> <ol> <li> 9.1 <a href="/book/mk/v2/Git-%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8-Git-%d0%ba%d0%b0%d0%ba%d0%be-%d0%9a%d0%bb%d0%b8%d0%b5%d0%bd%d1%82">Git како Клиент</a> </li> <li> 9.2 <a href="/book/mk/v2/Git-%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8-%d0%9c%d0%b8%d0%b3%d1%80%d0%b8%d1%80%d0%b0%d1%9a%d0%b5-%d0%ba%d0%be%d0%bd-Git">Мигрирање кон Git</a> </li> <li> 9.3 <a href="/book/mk/v2/Git-%d0%b8-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Plumbing-and-Porcelain">Внатрешноста на Git</a></h2> <ol> <li> 10.1 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Plumbing-and-Porcelain">Plumbing and Porcelain</a> </li> <li> 10.2 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Git-Objects">Git Objects</a> </li> <li> 10.3 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Git-References">Git References</a> </li> <li> 10.4 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Packfiles">Packfiles</a> </li> <li> 10.5 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-The-Refspec">The Refspec</a> </li> <li> 10.6 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Transfer-Protocols">Transfer Protocols</a> </li> <li> 10.7 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Maintenance-and-Data-Recovery">Maintenance and Data Recovery</a> </li> <li> 10.8 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Environment-Variables">Environment Variables</a> </li> <li> 10.9 <a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/mk/v2/Appendix-A:-Git-%d0%b2%d0%be-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d0%bd%d0%b8-Graphical-Interfaces">Appendix A: Git во други околини</a></h2> <ol> <li> A1.1 <a href="/book/mk/v2/Appendix-A:-Git-%d0%b2%d0%be-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d0%bd%d0%b8-Graphical-Interfaces">Graphical Interfaces</a> </li> <li> A1.2 <a href="/book/mk/v2/Appendix-A:-Git-%d0%b2%d0%be-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d0%bd%d0%b8-Git-in-Visual-Studio">Git in Visual Studio</a> </li> <li> A1.3 <a href="/book/mk/v2/Appendix-A:-Git-%d0%b2%d0%be-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d0%bd%d0%b8-Git-in-Eclipse">Git in Eclipse</a> </li> <li> A1.4 <a href="/book/mk/v2/Appendix-A:-Git-%d0%b2%d0%be-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d0%bd%d0%b8-Git-in-Bash">Git in Bash</a> </li> <li> A1.5 <a href="/book/mk/v2/Appendix-A:-Git-%d0%b2%d0%be-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d0%bd%d0%b8-Git-in-Zsh">Git in Zsh</a> </li> <li> A1.6 <a href="/book/mk/v2/Appendix-A:-Git-%d0%b2%d0%be-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d0%bd%d0%b8-Git-in-Powershell">Git in Powershell</a> </li> <li> A1.7 <a href="/book/mk/v2/Appendix-A:-Git-%d0%b2%d0%be-%d0%b4%d1%80%d1%83%d0%b3%d0%b8-%d0%be%d0%ba%d0%be%d0%bb%d0%b8%d0%bd%d0%b8-%d0%97%d0%b0%d0%ba%d0%bb%d1%83%d1%87%d0%be%d0%ba">Заклучок</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/mk/v2/Appendix-B:-%d0%92%d0%bc%d0%b5%d1%82%d0%bd%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-Git-%d0%b2%d0%be-%d0%b2%d0%b0%d1%88%d0%b8%d1%82%d0%b5-%d0%b0%d0%bf%d0%bb%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8-Command-line-Git">Appendix B: Вметнување на Git во вашите апликации</a></h2> <ol> <li> A2.1 <a href="/book/mk/v2/Appendix-B:-%d0%92%d0%bc%d0%b5%d1%82%d0%bd%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-Git-%d0%b2%d0%be-%d0%b2%d0%b0%d1%88%d0%b8%d1%82%d0%b5-%d0%b0%d0%bf%d0%bb%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8-Command-line-Git">Command-line Git</a> </li> <li> A2.2 <a href="/book/mk/v2/Appendix-B:-%d0%92%d0%bc%d0%b5%d1%82%d0%bd%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-Git-%d0%b2%d0%be-%d0%b2%d0%b0%d1%88%d0%b8%d1%82%d0%b5-%d0%b0%d0%bf%d0%bb%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/mk/v2/Appendix-B:-%d0%92%d0%bc%d0%b5%d1%82%d0%bd%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-Git-%d0%b2%d0%be-%d0%b2%d0%b0%d1%88%d0%b8%d1%82%d0%b5-%d0%b0%d0%bf%d0%bb%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8-JGit">JGit</a> </li> <li> A2.4 <a href="/book/mk/v2/Appendix-B:-%d0%92%d0%bc%d0%b5%d1%82%d0%bd%d1%83%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bd%d0%b0-Git-%d0%b2%d0%be-%d0%b2%d0%b0%d1%88%d0%b8%d1%82%d0%b5-%d0%b0%d0%bf%d0%bb%d0%b8%d0%ba%d0%b0%d1%86%d0%b8%d0%b8-go-git">go-git</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Setup-and-Config">Appendix C: Git команди</a></h2> <ol> <li> A3.1 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Setup-and-Config">Setup and Config</a> </li> <li> A3.2 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Getting-and-Creating-Projects">Getting and Creating Projects</a> </li> <li> A3.3 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Basic-Snapshotting">Basic Snapshotting</a> </li> <li> A3.4 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Branching-and-Merging">Branching and Merging</a> </li> <li> A3.5 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Sharing-and-Updating-Projects">Sharing and Updating Projects</a> </li> <li> A3.6 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Inspection-and-Comparison">Inspection and Comparison</a> </li> <li> A3.7 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Debugging">Debugging</a> </li> <li> A3.8 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Patching">Patching</a> </li> <li> A3.9 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Email">Email</a> </li> <li> A3.10 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-External-Systems">External Systems</a> </li> <li> A3.11 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Administration">Administration</a> </li> <li> A3.12 <a href="/book/mk/v2/Appendix-C:-Git-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-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>5.4 Дистрибуиран Git - Одржување на проект</h1> <div> <h2 id="_одржување_на_проект">Одржување на проект</h2> <div class="paragraph"> <p> Покрај тоа што знаете како ефикасно да придонесете за проект, најверојатно ќе треба да знаете како да го задржите. Ова може да се состои од прифаќање и примена на закрпи генерирани преку <code>формат-patch</code> и преку е-маил до вас, или интегрирање на промени во оддалечените гранки за складишта што сте ги додале како дистанционни за вашиот проект. Без разлика дали одржувате канонско складиште или сакате да им помогнете со потврдување или одобрување на закрпи, треба да знаете како да ја прифатите работата на начин кој е појасен за другите доверители и одржлив од вас на долг рок.</p> </div> <div class="sect3"> <h3 id="_работа_во_филијали_на_теми">Работа во филијали на теми</h3> <div class="paragraph"> <p> Кога размислувате за интегрирање на нова работа, обично е добра идеја да се обиде во темата гранка - привремена гранка специјално направена да се обиде таа нова работа. На овој начин, лесно може да се прилагоди печ поединечно и да се остави ако не работи додека не сте време да се вратите на него. Ако креирате едноставно име на гранка врз основа на темата на делото што ќе го пробате, како што е "ruby_client" или нешто слично описни, можете лесно да се сеќавате, ако морате да го напуштите некое време и да се вратите подоцна. Одржувачот на проектот Git има тенденција да именува простор на овие гранки, како што е <code>sc / ruby_client</code>, каде` sc` е краток за лицето кое придонело за работата. Како што ќе се сетите, можете да ја креирате гранката базирана на вашата "майстер" гранка како што е ова:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git branch sc/ruby_client master</code></pre> </div> </div> <div class="paragraph"> <p>Или, ако сакате да се префрлите на него веднаш, можете да ја користите опцијата <code>checkout -b</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git checkout -b sc/ruby_client master</code></pre> </div> </div> <div class="paragraph"> <p>Сега сте подготвени да додадете придонеслената работа што сте ја добиле во оваа гранка на оваа тема и да одредите дали сакате да ја споите во вашите долгорочни гранки.</p> </div> </div> <div class="sect3"> <h3 id="_patches_from_email">Примена на закрпи од е-пошта</h3> <div class="paragraph"> <p> Ако добиете лепенка преку е-пошта која треба да се интегрирате во вашиот проект, треба да го примените лепенчарот во вашата гранка на тема за да ја оцените. Постојат два начини да се примени е-пошта: со <code>git apply</code> или со` git am`.</p> </div> <div class="sect4"> <h4 id="_примена_на_лепенка_со_примен">Примена на лепенка со примен</h4> <div class="paragraph"> <p> Ако сте примиле лепенка од некој кој го создал со <code>git diff</code> или некоја варијанта на Unix` diff` командата (што не е препорачливо, видете го следниот дел), можете да го примените со командата <code>git apply</code>. Под претпоставка дека сте го зачувале лепенка на <code>/ tmp / patch-ruby-client.patch</code>, можете да го примените следењето:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git apply /tmp/patch-ruby-client.patch</code></pre> </div> </div> <div class="paragraph"> <p>Ова ги модифицира датотеките во вашиот работен директориум. Тоа е речиси идентично со извршување на командата <code>patch-p1</code> за да се примени крпеницата, иако е повеќе параноична и прифаќа помалку нејасни натпревари од печ. Исто така, се справува со додавање на датотеки, бришење и преименување ако се опишани во формат <code>git diff</code>, кој` patch` нема да го направи. Конечно, <code>git apply</code> е` <code>примени го целиот или прекини го целиот '' модел, каде што било што се применува или ништо не е, а</code> patch` може делумно да ги примени patchfiles, оставајќи го вашиот работен директориум во чудна состојба. <code>git apply</code> е севкупно многу поконзервативно отколку` patch`. Нема да создаде обврска за вас - откако ќе ја извршите, морате да ги фатите и да ги извршите промените што ги внесовте рачно.</p> </div> <div class="paragraph"> <p>Исто така можете да го користите <code>git apply</code> за да видите дали пакетот се применува чисто пред да се обидете да ја примените истата - може да извршите` git apply - check 'со лепенка:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git apply --check 0001-seeing-if-this-helps-the-gem.patch error: patch failed: ticgit.gemspec:1 error: ticgit.gemspec: patch does not apply</code></pre> </div> </div> <div class="paragraph"> <p>Ако нема излез, тогаш закрпата треба да се применува чисто. Оваа команда, исто така, ќе излезе со не-нула статус ако проверката не успее, па можете да го користите во скрипти ако сакате.</p> </div> </div> <div class="sect4"> <h4 id="_git_am">Примена на лепенка со <code>am</code> </h4> <div class="paragraph"> <p> Ако соработникот е корисник на Git и бил доволно добар за да ја користи командата <code>format-patch</code> за генерирање на нивниот закрпи, тогаш вашата работа е полесна бидејќи лепенка содржи информации за авторот и порака за обврски за вас. Ако можете, поттикнете ги вашите соработници да користат <code>format-patch</code> наместо` diff` за да генерираат закрпи за вас. Треба само да го користите <code>git apply</code> за застарени лепенки и такви работи.</p> </div> <div class="paragraph"> <p>За да примените дамка генерирана од <code>format-patch</code>, користите` git am` (командата е именувана <code>am</code>, бидејќи се користи за" примена на серија закрпи од поштенско сандаче "). Технички, <code>git am</code> е изграден за да прочита mbox датотека, што е едноставен, обичен текст формат за складирање на една или повеќе е-пораки во една текстуална датотека. Тоа изгледа вака:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">From 330090432754092d704da8e76ca5c05c198e71a8 Mon Sep 17 00:00:00 2001 From: Jessica Smith <jessica@example.com> Date: Sun, 6 Apr 2008 10:17:23 -0700 Subject: [PATCH 1/2] add limit to log function Limit log functionality to the first 20</code></pre> </div> </div> <div class="paragraph"> <p>Ова е почеток на излезот од командата <code>git format-patch</code> што ја видовте во претходниот дел; исто така, претставува валиден формат за е-пошта на mbox. Ако некој ви испрати e-mail испраќањето правилно користејќи <code>git send-email</code>, а вие го преземате во формат mbox, тогаш можете да посочете` git am` во таа датотека mbox, и ќе почне да ги применува сите закрпи што ги гледа. Ако извршите пошта клиент кој може да зачува неколку пораки во mbox формат, можете да зачувате цела серија на закрпи во датотека, а потоа користете <code>git am</code> за да ги примените по една.</p> </div> <div class="paragraph"> <p>Меѓутоа, ако некој постави датотека за испраќање генерирана преку <code>git format-patch</code> до систем за издавање билети или нешто слично, можете да ја зачувате датотеката локално, а потоа да ја предадете таа датотека зачувана на вашиот диск на` git am`, за да ја примените:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git am 0001-limit-log-function.patch Applying: add limit to log function</code></pre> </div> </div> <div class="paragraph"> <p>Можете да видите дека се применува чисто и автоматски го креира новиот залог за вас. Информациите за авторот се земаат од насловите на "Од" и "Дата" од е-поштата, а пораката на посветеноста се зема од "Предмет" и телото (пред далноводот) на е-поштата. На пример, ако овој patch беше применет од горниот пример mbox, генерираната обврска ќе изгледа вака:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log --pretty=fuller -1 commit 6c5e70b984a60b3cecd395edd5b48a7575bf58e0 Author: Jessica Smith <jessica@example.com> AuthorDate: Sun Apr 6 10:17:23 2008 -0700 Commit: Scott Chacon <schacon@gmail.com> CommitDate: Thu Apr 9 09:19:06 2009 -0700 add limit to log function Limit log functionality to the first 20</code></pre> </div> </div> <div class="paragraph"> <p>Информацијата <code>Commit</code> укажува на лицето кое го применило лепенката и времето кога се применувало. Информацијата <code>Авторот</code> е поединецот кој првично го создал лепенката и кога бил првично создаден.</p> </div> <div class="paragraph"> <p>Но, можно е печот да не се применува чисто. Можеби вашата главна гранка премногу се оддалечи од гранката од која е изграден лепенка, или пак печот зависи од друг лепенка што не сте ја аплицирале. Во тој случај, процесот <code>git am</code> ќе пропадне и ќе ве праша што сакате:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git am 0001-seeing-if-this-helps-the-gem.patch Applying: seeing if this helps the gem error: patch failed: ticgit.gemspec:1 error: ticgit.gemspec: patch does not apply Patch failed at 0001. When you have resolved this problem run "git am --resolved". If you would prefer to skip this patch, instead run "git am --skip". To restore the original branch and stop patching run "git am --abort".</code></pre> </div> </div> <div class="paragraph"> <p>Оваа команда ги става маркерите за конфликти во сите датотеки со кои има проблеми, слично на конфликтното спојување или ребаза. Го решавате ова прашање на ист начин - уредувајте ја датотеката за решавање на конфликтот, ставете ја новата датотека, а потоа стартувајте го <code>git am -resolved</code> за да продолжите на следниот лепенка:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ (fix the file) $ git add ticgit.gemspec $ git am --resolved Applying: seeing if this helps the gem</code></pre> </div> </div> <div class="paragraph"> <p>Ако сакате Git да се обиде малку поинтелигентно за да го разреши конфликтот, можете да му дадете опција за <code>-3</code>, што го прави Git обид да се спои со три начини. Оваа опција не е вклучена стандардно, бидејќи не функционира ако извршителот на кој се вели дека тој е базиран не е во вашето складиште. Ако го имате тоа што го извршите - ако лепенката е заснована на јавна обврска - тогаш опцијата <code>-3</code> е генерално многу попаметна за примена на конфликтна лепенка:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git am -3 0001-seeing-if-this-helps-the-gem.patch Applying: seeing if this helps the gem error: patch failed: ticgit.gemspec:1 error: ticgit.gemspec: patch does not apply Using index info to reconstruct a base tree... Falling back to patching base and 3-way merge... No changes -- Patch already applied.</code></pre> </div> </div> <div class="paragraph"> <p>Во овој случај, без опцијата "-3", лепенката би се сметала за конфликт. Бидејќи опцијата <code>-3</code> била користена, крпеницата се применувала чисто.</p> </div> <div class="paragraph"> <p>Ако користите голем број на закрпи од mbox, исто така можете да ја извршите командата <code>am</code> во интерактивен режим, кој застанува на секој закрпат што го наоѓа и прашува дали сакате да го примените:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git am -3 -i mbox Commit Body is: -------------------------- seeing if this helps the gem -------------------------- Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all</code></pre> </div> </div> <div class="paragraph"> <p>Ова е убаво ако имате зачувано голем број закрпи, затоа што прво можете да го видите спотот ако не се сеќавате што е тоа, или да не го примените лепенка ако веќе сте го направиле тоа.</p> </div> <div class="paragraph"> <p>Кога сите закрпи за вашата тема се применуваат и се посветени на вашата гранка, можете да одберете дали и како да ги интегрирате во подолготрајна гранка.</p> </div> </div> </div> <div class="sect3"> <h3 id="_checking_out_remotes">Checking Out Remote Branches</h3> <div class="paragraph"> <p> Доколку вашиот придонес дојде од корисник на Git кој го поставил сопственото складиште, го вметнал голем број промени во него, а потоа ви го испрати URL-то до складиштето и името на оддалечената гранка во која се наоѓаат промените, можете да ги додадете како далечински и се спојуваат локално.</p> </div> <div class="paragraph"> <p>На пример, ако Џесика ви испрати е-пошта велејќи дека има одлична нова функција во "руби-клиент" филијала на нејзиното складиште, можете да ја тестирате со додавање на далечинскиот управувач и проверка на таа подружница локално:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git remote add jessica git://github.com/jessica/myproject.git $ git fetch jessica $ git checkout -b rubyclient jessica/ruby-client</code></pre> </div> </div> <div class="paragraph"> <p>Ако таа повторно ви испрати e-mail со друга гранка која содржи уште една одлична можност, можете директно да "добиете" и "checkout" затоа што веќе имате далечинско поставување.</p> </div> <div class="paragraph"> <p>Ова е најкорисно ако континуирано соработувате со некоја личност. Ако некој има само еден лепенка за да придонесе еднаш во некое време, тогаш прифаќањето преку е-пошта може да биде помалку одземање од потребата секој да работи на свој сервер и постојано да додава и отстранува далечински управувачи за да добие неколку закрпи. Исто така, веројатно нема да сакате да имате стотици далечински управувачи, секој за некој што придонесува само со еден или два лепенка. Сепак, скриптите и хостираните услуги може да го олеснат тоа - во голема мера зависи од тоа како се развивате и како се развиваат вашите соработници.</p> </div> <div class="paragraph"> <p>Другата предност на овој пристап е што ја добивате историјата на обврските, исто така. Иако можеби имате легитимни прашања за спојување, знаете каде во вашата историја се базира нивната работа; правилното тројно спојување е стандардно, наместо да се снабдува со "-3" и се надеваме дека закржувањето е генерирано од јавна обврска на која имате пристап.</p> </div> <div class="paragraph"> <p>Ако не работат со некоја личност постојано, но сепак сакате да се повлечете од нив на овој начин, можете да го дадете URL на далечинското складиште во командата за <code>git pull</code>. Ова го прави еднократно повлекување и не го зачувува УРЛ како далечинска референца:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git pull https://github.com/onetimeguy/project From https://github.com/onetimeguy/project * branch HEAD -> FETCH_HEAD Merge made by the 'recursive' strategy.</code></pre> </div> </div> </div> <div class="sect3"> <h3 id="_what_is_introduced">Одредување на она што се воведува</h3> <div class="paragraph"> <p> Сега имате тема за гранка која содржи придонесена работа. Во овој момент, можете да одредите што сакате да го направите со него. Овој дел повторно ги ревидира неколку команди за да можете да видите како можете да ги користите за да го прегледате токму она што ќе го запознаете ако го споите ова во вашата главна гранка.</p> </div> <div class="paragraph"> <p>Често е корисно да се добие преглед на сите обврски што се во оваа гранка, но кои не се во вашата господарска гранка. Можете да ги исклучите обврските во главната гранка со додавање на опцијата <code>--not</code> пред името на филијалата. Ова го прави истото како и формат <code>master..contrib</code> што го користевме порано. На пример, ако вашиот доверител ви испрати две закрпи и ќе креирате гранка наречена "придонеси" и ќе ги примените овие закрпи таму, можете да го извршите ова:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log contrib --not master commit 5b6235bd297351589efc4d73316f0a68d484f118 Author: Scott Chacon <schacon@gmail.com> Date: Fri Oct 24 09:53:59 2008 -0700 seeing if this helps the gem commit 7482e0d16d04bea79d0dba8988cc78df655f16a0 Author: Scott Chacon <schacon@gmail.com> Date: Mon Oct 22 19:38:36 2008 -0700 updated the gemspec to hopefully work better</code></pre> </div> </div> <div class="paragraph"> <p>За да видите какви промени секој запис го воведува, запомнете дека можете да ја пренесете опцијата <code>-p</code> во` git log` и да додаде разлика што ќе се внесе во секоја заложба.</p> </div> <div class="paragraph"> <p>За да видите целосен разлика од тоа што ќе се случи ако сте се соединиле со оваа гранка со друга гранка, можеби ќе треба да користите чуден трик за да ги добиете точните резултати. Може да мислите да го извршите ова:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git diff master</code></pre> </div> </div> <div class="paragraph"> <p>Оваа команда ви дава разлика, но може да биде погрешно. Ако вашата "господар" гранка се придвижи напред, откако сте ја создале гранката на тема од тоа, тогаш ќе добиете навидум чудни резултати. Ова се случува затоа што Git директно ги споредува сликите од последната посветеност на гранката на тема на која сте вклучени, како и моменталната слика на последната заложба во гранката <code>master</code>. На пример, ако сте додале линија во датотека на "господар" гранка, директна споредба на сликите ќе изгледа како гранката на тема ќе ја отстрани таа линија.</p> </div> <div class="paragraph"> <p>Ако <code>master</code> е директен предок на вашата гранка на тема, ова не е проблем; но ако двете истории се разликуваат, разликата ќе изгледа како да ги додавате сите нови работи во вашата гранка на тема и да ги избришете сè што е уникатно за гранката <code>master</code>.</p> </div> <div class="paragraph"> <p>Она што навистина сакате да го видите се промените додадени на гранката на темата - работата што ќе ја внесете ако се спои оваа гранка со господар. Го правиш тоа со тоа што Git го споредува последното извршување на вашата гранка на тема со првиот заеднички предок што го има со главната гранка.</p> </div> <div class="paragraph"> <p>Технички, можете да го направите тоа преку експлицитно сфаќање на заедничкиот предок, а потоа да го извршите различното од тоа:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git merge-base contrib master 36c7dba2c95e6bbb78dfa822519ecfec6e1ca649 $ git diff 36c7db</code></pre> </div> </div> <div class="paragraph"> <p>или, поточно:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git diff $(git merge-base contrib master)</code></pre> </div> </div> <div class="paragraph"> <p>Сепак, ниту еден од нив не е особено погоден, така што Git обезбедува уште една кратенка за истото: синтаксичка со три точки. Во контекст на командата <code>git diff</code>, можете да ставите три периоди по друга гранка за да направите` diff` помеѓу последната посветеност на гранката на која сте и нејзиниот заеднички предок со друга гранка:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git diff master...contrib</code></pre> </div> </div> <div class="paragraph"> <p>Оваа команда ви ја прикажува само работата што вашата филијала на темата ја воведе од својот заеднички предок со господар. Тоа е многу корисна синтакса за да се запамети.</p> </div> </div> <div class="sect3"> <h3 id="_интегрирање_на_придонесената_работа">Интегрирање на придонесената работа</h3> <div class="paragraph"> <p> Кога целата работа во гранката на вашата тема е подготвена да се интегрира во погласно гранка, прашањето е како да го направите тоа. Понатаму, кој целокупен работен тек сакате да го користите за одржување на вашиот проект? Имате голем број на избори, па ние ќе ги покриеме неколку од нив.</p> </div> <div class="sect4"> <h4 id="_спојување_на_работни_процеси">Спојување на работни процеси</h4> <div class="paragraph"> <p> Еден основен работен тек е едноставно спојување на сите кои работат директно во вашата "мајстор" гранка. Во ова сценарио, имате "господар" гранка која содржи во основа стабилен код. Кога имате работа во гранка на тема за која мислите дека сте завршиле, или работа која некој друг придонела и сте потврдиле, ќе ја споите во вашата господарска гранка, избришете ја само споената гранка на тема и повторете ја.</p> </div> <div class="paragraph"> <p>На пример, ако имаме складиште со работа во две гранки именувани <code>ruby_client</code> и` php_client` што изгледа како << merwf_a >>, а ние се спојуваме со <code>ruby_client</code>, проследено со` php_client`, вашата историја ќе заврши како да изгледа како < <merwf_b >>.</p> </div> <div id="merwf_a" class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/merging-workflows-1.png" alt="History with several topic branches."> </div> <div class="title">Figure 68. History with several topic branches.</div> </div> <div id="merwf_b" class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/merging-workflows-2.png" alt="After a topic branch merge."> </div> <div class="title">Figure 69. After a topic branch merge.</div> </div> <div class="paragraph"> <p>Тоа е веројатно наједноставниот тек на работа, но може да биде проблематичен ако се занимавате со поголеми или постабилни проекти каде што сакате да бидете навистина внимателни за она што го воведувате.</p> </div> <div class="paragraph"> <p>Ако имате поважен проект, можеби ќе сакате да користите двофазен циклус на спојување. Во ова сценарио, имате две долготрајни гранки, <code>master</code> и` develop`, во кои ќе се утврди дека <code>господар</code> се ажурира само кога е исклучено многу стабилно ослободување и целиот нов код е интегриран во` развие` гранка . Редовно ги притискате двата гранки во јавното складиште. Секој пат кога имате нова гранка на тема за да се спојат (<< merwf_c >>), ќе ја споите во <code>развие</code> (<< merwf_d >>); тогаш, кога ќе означите порака, ќе го пренасочите <code>господар</code> до каде што е сега стабилната` развие` гранка (<< merwf_e >>).</p> </div> <div id="merwf_c" class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/merging-workflows-3.png" alt="Before a topic branch merge."> </div> <div class="title">Figure 70. Before a topic branch merge.</div> </div> <div id="merwf_d" class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/merging-workflows-4.png" alt="After a topic branch merge."> </div> <div class="title">Figure 71. After a topic branch merge.</div> </div> <div id="merwf_e" class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/merging-workflows-5.png" alt="After a topic branch release."> </div> <div class="title">Figure 72. After a project release.</div> </div> <div class="paragraph"> <p>На овој начин, кога луѓето клонираат складиштето на вашиот проект, тие можат или да го проверат <code>господар</code> за да ја изградат најновата стабилна верзија и да продолжат да ја следат таа лесно, или да проверат` развиваат`, што е најсовремена содржина . Вие исто така може да го проширите овој концепт со тоа што имаат "интегрираат" гранка каде целата работа се спојува заедно. Потоа, кога кодовата база на таа гранка е стабилна и поминува тестови, ќе ја споите во <code>развие</code> гранка; и кога тоа се докажа себеси стабилно за некое време, ќе го пренасочите вашиот "господар" гранка.</p> </div> </div> <div class="sect4"> <h4 id="_рабовилни_процеси_со_голема_спојување">Рабовилни процеси со голема спојување</h4> <div class="paragraph"> <p> Проектот Git има четири долготрајни гранки: <code>master ',</code> next` и <code>pu</code> (предложени надградби) за нова работа, и` maint` за подржувачи за одржување. Кога новата работа е воведена од страна на учесниците, таа е собрана во филијали за теми во складиштето на одржувачот на начин сличен на она што го опишавме (види << merwf_f >>). Во овој момент, темите се оценуваат за да се утврди дали се безбедни и подготвени за потрошувачка или дали им е потребна поголема работа. Ако тие се безбедни, тие се споени во <code>следната</code>, и таа гранка се турка за да можат сите да ги пробаат темите интегрирани заедно.</p> </div> <div id="merwf_f" class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/large-merges-1.png" alt="Managing a complex series of parallel contributed topic branches."> </div> <div class="title">Figure 73. Managing a complex series of parallel contributed topic branches.</div> </div> <div class="paragraph"> <p>If the topics still need work, they’re merged into <code>pu</code> instead. Кога се утврди дека тие се целосно стабилни, темите се повторно споени во <code>господар</code>. Отсеките <code>next</code> и` pu` потоа се обновуваат од <code>master</code>. Ова значи дека "господар" скоро секогаш се движи напред, "следниот" е повремено повлечен, а <code>pu</code> се рестартира уште почесто:</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/large-merges-2.png" alt="Merging contributed topic branches into long-term integration branches."> </div> <div class="title">Figure 74. Merging contributed topic branches into long-term integration branches.</div> </div> <div class="paragraph"> <p>Кога филијалата на тема конечно е споена во <code>master</code>, таа е отстранета од складиштето. Проектот Git, исто така, има <code>maint</code> гранка која се откажува од последното издание за да обезбеди поднесени закрпи во случај да се бара ослободување од одржување. Така, кога клонирате Git репозиториумот, имате четири гранки кои можете да ги проверите за да го оцените проектот во различни фази на развој, во зависност од тоа како најсовреме сакате да биде или како сакате да придонесете; а одржувачот има структуриран тек на работа за да им помогне да проверат нови придонеси. Работен процес на Git проектот е специјализиран. За да ја разберете ова, можете да ја проверите <a href="https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt">Hithead Guide</a>.</p> </div> </div> <div class="sect4"> <h4 id="_rebase_cherry_pick">Работни процедури за пребирање и обработка на цреша</h4> <div class="paragraph"> <p> Други одржувачи претпочитаат да се омаловажат или да видат придонеси од цреша на врвот на нивната господарска гранка, наместо да ја спојуваат, за да одржуваат претежно линеарна историја. Кога имате работа во филијала на тема и сте утврдиле дека сакате да ја интегрирате, се преместите во таа гранка и ја стартувате командата rebase за да ги измените промените на врвот на вашиот сегашен господар (или "развиј" и така натаму) филијала. Ако тоа функционира добро, можете да го пренасочите вашиот "мастер" филијала и ќе завршите со линеарна историја на проектот.</p> </div> <div class="paragraph"> <p> Друг начин да се преместите воведена работа од една гранка во друга е да ја изберете црешата. Изборот на цреша во Git е како обичај за една посветеност. Потребно е далновод кој беше воведен со обврска и се обидува повторно да го примени на филијалата во која сте моментално. Ова е корисно ако имате голем број на обврски во филијала на тема и сакате да се интегрирате само еден од нив, или ако имате само една застапеност во некоја одделна тема и би сакале да ја користите цреша отколку да ја стартувате. На пример, да претпоставиме дека имате проект кој изгледа вака:</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/rebasing-1.png" alt="Example history before a cherry-pick."> </div> <div class="title">Figure 75. Example history before a cherry-pick.</div> </div> <div class="paragraph"> <p>Ако сакате да се повлечеш "e43a6" во вашата господарска гранка, можете да го извршите</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git cherry-pick e43a6 Finished one cherry-pick. [master]: created a0a41a9: "More friendly message when locking the index fails." 3 files changed, 17 insertions(+), 3 deletions(-)</code></pre> </div> </div> <div class="paragraph"> <p>Ова ја повлекува истата промена воведена во <code>e43a6</code>, но добивате нова вредност за SHA-1, бидејќи применливиот датум е различен. Сега вашата историја изгледа вака:</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/mk/v2/images/rebasing-2.png" alt="History after cherry-picking a commit on a topic branch."> </div> <div class="title">Figure 76. History after cherry-picking a commit on a topic branch.</div> </div> <div class="paragraph"> <p>Now you can remove your topic branch and drop the commits you didn’t want to pull in.</p> </div> </div> <div class="sect4"> <h4 id="_повторно">Повторно</h4> <div class="paragraph"> <p> Ако правиш многу спојување и опоравување, или ако одржуваш долготрајна тематска гранка, Git има функција наречена ‘rerere '’ која може да помогне.</p> </div> <div class="paragraph"> <p>Rerere претставува ‘` повторна употреба снимена резолуција '’ - тоа е начин на скратување рачно решавање на конфликти. Кога е овозможено, Git ќе одржи збир на претходни и пост-слики од успешните спојувања, и ако забележи дека има конфликт кој изгледа токму како оној што веќе сте го поправиле, тој само ќе го искористи поправката од последен пат , без да ви пречи со тоа.</p> </div> <div class="paragraph"> <p>Оваа функција доаѓа во два дела: поставка за конфигурација и команда. Поставката за конфигурација е <code>rerere.enabled</code>, и доволно е да се стави во вашата глобална конфигурација:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global rerere.enabled true</code></pre> </div> </div> <div class="paragraph"> <p>Сега, секогаш кога ќе направите спојување кое ги решава конфликтите, резолуцијата ќе биде снимена во кешот во случај да ви треба во иднина.</p> </div> <div class="paragraph"> <p>Ако ви треба, можете да комуницирате со преферираниот кеш користејќи ја командата <code>git rerere</code>. Кога се повикува сам, Git ја проверува својата база на податоци за резолуции и се обидува да пронајде совпаѓање со било какви тековни спорови за спојување и да ги разреши (иако ова се прави автоматски ако <code>rerere.enabled</code> е поставено на` true`). Исто така, постојат подкомисии за да се види што ќе се сними, да се избрише специфичната резолуција од кешот и да се исчисти целата кеш. Повеќе детали ќе ги покриеме во << ref_rerere >>.</p> </div> </div> </div> <div class="sect3"> <h3 id="_tagging_releases">Обележување на вашите изданија</h3> <div class="paragraph"> <p> Кога одлучивте да го намалите објавувањето, најверојатно ќе сакате да доделите таг за да можете повторно да го креирате тоа издание во било која точка што оди напред. Можете да креирате нова ознака како што е наведено во << ch02-git-basics-chapter >>. Ако одлучите да ја потпишете ознаката како одржувач, означувањето може да изгледа вака:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git tag -s v1.5 -m 'my signed 1.5 tag' You need a passphrase to unlock the secret key for user: "Scott Chacon <schacon@gmail.com>" 1024-bit DSA key, ID F721C45A, created 2009-02-09</code></pre> </div> </div> <div class="paragraph"> <p>Ако ги потпишете вашите ознаки, може да имате проблем со дистрибуирањето на јавниот PGP клуч кој се користи за потпишување на вашите ознаки. Одржувачот на проектот Git го реши ова прашање со вклучување на нивниот јавен клуч како дупка во складиштето, а потоа додавајќи ознака која директно упатува на таа содржина. За да го направите ова, можете да дознаете кој клуч сакате со извршување <code>gpg -list-keys</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ gpg --list-keys /Users/schacon/.gnupg/pubring.gpg --------------------------------- pub 1024D/F721C45A 2009-02-09 [expires: 2010-02-09] uid Scott Chacon <schacon@gmail.com> sub 2048g/45D02282 2009-02-09 [expires: 2010-02-09]</code></pre> </div> </div> <div class="paragraph"> <p>Потоа, можете директно да го внесувате клучот во базата на податоци Git со тоа што ќе го извезете и ќе го напишете преку <code>git hash-object</code>, кој пишува нов blob со тие содржини во Git и ви го враќа SHA-1 на blob:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ gpg -a --export F721C45A | git hash-object -w --stdin 659ef797d181633c87ec71ac3f9ba29fe5775b92</code></pre> </div> </div> <div class="paragraph"> <p>Сега кога ја имате содржината на клучот во Git, можете да креирате ознака која директно упатува на неа со специфицирање на новата SHA-1 вредност што ви ја дал командата <code>hash-object</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git tag -a maintainer-pgp-pub 659ef797d181633c87ec71ac3f9ba29fe5775b92</code></pre> </div> </div> <div class="paragraph"> <p>Ако извршите <code>git push -tags</code>, ознаката` maintainer-pgp-pub` ќе биде споделена со сите. Ако некој сака да потврди ознака, тие можат директно да го внесат вашиот PGP клуч со повлекување на blob директно надвор од базата на податоци и внесување во GPG:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git show maintainer-pgp-pub | gpg --import</code></pre> </div> </div> <div class="paragraph"> <p>Тие можат да го користат тој клуч за да ги потврдат сите ваши потпишани ознаки. Исто така, ако вклучите инструкции во пораката за ознаки, со активирањето на <code>git show <tag></code> ќе ви овозможиме краен корисник поконкретни инструкции за верификација на ознаки.</p> </div> </div> <div class="sect3"> <h3 id="_build_number">Генерирање на изграден број</h3> <div class="paragraph"> <p> Бидејќи Git нема монотоно зголемување на броеви како "v123" или еквивалентно да се оди со секоја заложба, ако сакате да имате човечко читливо име за да оди со посетување, можете да стартувате <code>git опишуваат</code> за таа залог. Git ви го дава името на најблиската таг со бројот на обврски на таа ознака и делумна SHA-1 вредноста на посетувањето што го опишувате:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git describe master v1.6.2-rc1-20-g8c5b85c</code></pre> </div> </div> <div class="paragraph"> <p>На овој начин, можете да извезувате слика или да изградите и да именувате нешто разбирливо за луѓето. Всушност, ако го изградите Git од изворниот код клониран од Git репозиториумот, <code>git -version</code> ви дава нешто што изгледа вака. Ако опишувате обврска која сте директно обележана, таа ви го дава името на ознаката.</p> </div> <div class="paragraph"> <p>Командата <code>git descriptione</code> ги фаворизира означените ознаки (ознаки создадени со знаме` -a` или <code>-s</code>), па оттука треба да се креираат тагови за ослободување на овој начин ако користите` git опишуваат`, за да осигурате дека именката е именувана правилно кога е опишано. Исто така можете да го користите овој стринг како цел на исходот или да покажете команда, иако се потпира на скратената SHA-1 вредност на крајот, па затоа не може да биде валидна засекогаш. На пример, кернелот Линукс неодамна скокна од 8 до 10 знаци за да се обезбеди единственост на објект SHA-1, па постарите имиња на излезните <code>git опишуваат</code> беа поништени.</p> </div> </div> <div class="sect3"> <h3 id="_preparing_release">Подготовка за издавање</h3> <div class="paragraph"> <p> Сега сакате да објавите изгради. Една од работите што ќе сакате да направите е да креирате архива на најновата слика на вашиот код за оние сиромашни души кои не го користат Git. Командата да го направите ова е <code>git архива</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git archive master --prefix='project/' | gzip > `git describe master`.tar.gz $ ls *.tar.gz v1.6.2-rc1-20-g8c5b85c.tar.gz</code></pre> </div> </div> <div class="paragraph"> <p>Ако некој го отвори тој тарбол, го добиваат најновото слика на вашиот проект под проектниот именик. Исто така можете да создадете архива на истиот начин, но со пренесување на опцијата <code>--format = zip</code> во` git archive`:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git archive master --prefix='project/' --format=zip > `git describe master`.zip</code></pre> </div> </div> <div class="paragraph"> <p>Сега имате убав тарифен и зип архива на вашиот проект порака што можете да испратите на вашата веб-страница или е-пошта до луѓето.</p> </div> </div> <div class="sect3"> <h3 id="_the_shortlog">The Shortlog</h3> <div class="paragraph"> <p> Време е да испратите е-мејл листа на луѓе кои сакаат да знаат што се случува во вашиот проект. Убав начин за брзо добивање еден вид на промени на она што е додадено на вашиот проект, бидејќи твоето последно издание или е-пошта е да ја користите командата <code>git shortlog</code>. Ги сумира сите обврски во опсегот што го давате; на пример, следново ви дава резиме на сите обврски од вашето последно издание, ако вашето последно издание беше именувано како v1.0.1:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git shortlog --no-merges master --not v1.0.1 Chris Wanstrath (8): Add support for annotated tags to Grit::Tag Add packed-refs annotated tag support. Add Grit::Commit#to_patch Update version and History.txt Remove stray `puts` Make ls_tree ignore nils Tom Preston-Werner (4): fix dates in history dynamic version method Version bump to 1.0.2 Regenerated gemspec for version 1.0.2</code></pre> </div> </div> <div class="paragraph"> <p>Ќе добиете чисто резиме на сите обврски од v1.0.1, групирани според автор, кои можете да ги испратите на е-пошта до вашата листа.</p> </div> </div> <div id="nav"><a href="/book/mk/v2/Дистрибуиран-Git-Приватен-мал-тим">prev</a> | <a href="/book/mk/v2/Дистрибуиран-Git-Заклучок">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>