CINXE.COM

Git - Супроводжування проекту

<!DOCTYPE html> <html lang="uk"> <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-Maintaining-a-Project">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Paylanm%c4%b1%c5%9f-Git-Layih%c9%99nin-Saxlan%c4%b1lmas%c4%b1">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-Stashing-%d0%b8-Cleaning">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Verteiltes-Git-Ein-Projekt-verwalten">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Git-en-entornos-distribuidos-Manteniendo-un-proyecto">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Git-distribu%c3%a9-Maintenance-d%e2%80%99un-projet">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%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ae%e9%81%8b%e5%96%b6">日本語</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-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ea%b4%80%eb%a6%ac%ed%95%98%ea%b8%b0">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Gedistribueerd-Git-Het-beheren-van-een-project">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%a1%d0%be%d0%bf%d1%80%d0%be%d0%b2%d0%be%d0%b6%d0%b4%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d0%b0">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Porazdeljeni-Git-Vzdr%c5%beevanje-projekta">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Distributed-Git-Maintaining-a-Project">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%a1%d1%83%d0%bf%d1%80%d0%be%d0%b2%d0%be%d0%b4%d0%b6%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d1%83">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/%e5%88%86%e5%b8%83%e5%bc%8f-Git-%e7%bb%b4%e6%8a%a4%e9%a1%b9%e7%9b%ae">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Distribuovan%c3%bd-Git-Spr%c3%a1va-projektu">Č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%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>,</td></tr> <tr><td><a href="/book/pl/v2/Rozproszony-Git-Utrzymywanie-projektu">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%9e%d0%b4%d1%80%d0%b6%d0%b0%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bf%d1%80%d0%be%d1%98%d0%b5%d0%ba%d1%82%d0%b0">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Distributed-Git-Maintaining-a-Project">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/%e5%88%86%e6%95%a3%e5%bc%8f%e7%9a%84-Git-%e7%b6%ad%e8%ad%b7%e4%b8%80%e5%80%8b%e5%b0%88%e6%a1%88">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Distributed-Git-Maintaining-a-Project">Беларуская</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-%d9%86%da%af%d9%87%d8%af%d8%a7%d8%b1%db%8c-%db%8c%da%a9-%d9%be%d8%b1%d9%88%da%98%d9%87" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Distributed-Git-Maintaining-a-Project">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Distributed-Git-Maintaining-a-Project">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Distributed-Git-Maintaining-a-Project">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Distributed-Git-Maintaining-a-Project">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Git-Distribu%c3%addo-Maintaining-a-Project">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Distribuerade-Git-Underh%c3%a5lla-ett-projekt">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Da%c4%9f%c4%b1t%c4%b1k-Git-Bir-Projeyi-Y%c3%bcr%c3%bctme">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-uk">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/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%9f%d1%80%d0%be-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d1%83-%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8e-%d0%b2%d0%b5%d1%80%d1%81%d1%96%d0%b9">Вступ</a></h2> <ol> <li> 1.1 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%9f%d1%80%d0%be-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d1%83-%d0%ba%d0%be%d0%bd%d1%82%d1%80%d0%be%d0%bb%d1%8e-%d0%b2%d0%b5%d1%80%d1%81%d1%96%d0%b9">Про систему контролю версій</a> </li> <li> 1.2 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%9a%d0%be%d1%80%d0%be%d1%82%d0%ba%d0%b0-%d1%96%d1%81%d1%82%d0%be%d1%80%d1%96%d1%8f-Git">Коротка історія Git</a> </li> <li> 1.3 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git">Основи Git</a> </li> <li> 1.4 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-Git,-%d0%b7%d0%b0%d0%b7%d0%b2%d0%b8%d1%87%d0%b0%d0%b9,-%d1%82%d1%96%d0%bb%d1%8c%d0%ba%d0%b8-%d0%b4%d0%be%d0%b4%d0%b0%d1%94-%d0%b4%d0%b0%d0%bd%d1%96">Git, зазвичай, тільки додає дані</a> </li> <li> 1.5 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%a2%d1%80%d0%b8-%d1%81%d1%82%d0%b0%d0%bd%d0%b8">Три стани</a> </li> <li> 1.6 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%b8%d0%b9-%d1%80%d1%8f%d0%b4%d0%be%d0%ba">Командний рядок</a> </li> <li> 1.7 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%86%d0%bd%d1%81%d1%82%d0%b0%d0%bb%d1%8f%d1%86%d1%96%d1%8f-Git">Інсталяція Git</a> </li> <li> 1.8 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%9f%d0%be%d1%87%d0%b0%d1%82%d0%ba%d0%be%d0%b2%d0%b5-%d0%bd%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git">Початкове налаштування Git</a> </li> <li> 1.9 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%9e%d1%82%d1%80%d0%b8%d0%bc%d0%b0%d0%bd%d0%bd%d1%8f-%d0%b4%d0%be%d0%bf%d0%be%d0%bc%d0%be%d0%b3%d0%b8">Отримання допомоги</a> </li> <li> 1.10 <a href="/book/uk/v2/%d0%92%d1%81%d1%82%d1%83%d0%bf-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%a1%d1%82%d0%b2%d0%be%d1%80%d0%b5%d0%bd%d0%bd%d1%8f-Git-%d1%81%d1%85%d0%be%d0%b2%d0%b8%d1%89%d0%b0">Основи Git</a></h2> <ol> <li> 2.1 <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%a1%d1%82%d0%b2%d0%be%d1%80%d0%b5%d0%bd%d0%bd%d1%8f-Git-%d1%81%d1%85%d0%be%d0%b2%d0%b8%d1%89%d0%b0">Створення Git-сховища</a> </li> <li> 2.2 <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%97%d0%b0%d0%bf%d0%b8%d1%81-%d0%b7%d0%bc%d1%96%d0%bd-%d0%b4%d0%be-%d1%80%d0%b5%d0%bf%d0%be%d0%b7%d0%b8%d1%82%d0%be%d1%80%d1%96%d1%8f">Запис змін до репозиторія</a> </li> <li> 2.3 <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%9f%d0%b5%d1%80%d0%b5%d0%b3%d0%bb%d1%8f%d0%b4-%d1%96%d1%81%d1%82%d0%be%d1%80%d1%96%d1%97-%d0%ba%d0%be%d0%bc%d1%96%d1%82%d1%96%d0%b2">Перегляд історії комітів</a> </li> <li> 2.4 <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%a1%d0%ba%d0%b0%d1%81%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d1%80%d0%b5%d1%87%d0%b5%d0%b9">Скасування речей</a> </li> <li> 2.5 <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%92%d0%b7%d0%b0%d1%94%d0%bc%d0%be%d0%b4%d1%96%d1%8f-%d0%b7-%d0%b2%d1%96%d0%b4%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d0%b8%d0%bc%d0%b8-%d1%81%d1%85%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d0%bc%d0%b8">Взаємодія з віддаленими сховищами</a> </li> <li> 2.6 <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%a2%d0%b5%d2%91%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f">Теґування</a> </li> <li> 2.7 <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%9f%d1%81%d0%b5%d0%b2%d0%b4%d0%be%d0%bd%d1%96%d0%bc%d0%b8-Git">Псевдоніми Git</a> </li> <li> 2.8 <a href="/book/uk/v2/%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-Git-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%93%d1%96%d0%bb%d0%ba%d0%b8-%d1%83-%d0%ba%d1%96%d0%bb%d1%8c%d0%ba%d0%be%d1%85-%d1%81%d0%bb%d0%be%d0%b2%d0%b0%d1%85">Галуження в git</a></h2> <ol> <li> 3.1 <a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%93%d1%96%d0%bb%d0%ba%d0%b8-%d1%83-%d0%ba%d1%96%d0%bb%d1%8c%d0%ba%d0%be%d1%85-%d1%81%d0%bb%d0%be%d0%b2%d0%b0%d1%85">Гілки у кількох словах</a> </li> <li> 3.2 <a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%9e%d1%81%d0%bd%d0%be%d0%b2%d0%b8-%d0%b3%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%b7%d0%bb%d0%b8%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f">Основи галуження та зливання</a> </li> <li> 3.3 <a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%a3%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d1%96%d0%bd%d0%bd%d1%8f-%d0%b3%d1%96%d0%bb%d0%ba%d0%b0%d0%bc%d0%b8">Управління гілками</a> </li> <li> 3.4 <a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%9f%d1%80%d0%be%d1%86%d0%b5%d1%81%d0%b8-%d1%80%d0%be%d0%b1%d0%be%d1%82%d0%b8-%d0%b7-%d0%b3%d1%96%d0%bb%d0%ba%d0%b0%d0%bc%d0%b8">Процеси роботи з гілками</a> </li> <li> 3.5 <a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%92%d1%96%d0%b4%d0%b4%d0%b0%d0%bb%d0%b5%d0%bd%d1%96-%d0%b3%d1%96%d0%bb%d0%ba%d0%b8">Віддалені гілки</a> </li> <li> 3.6 <a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%9f%d0%b5%d1%80%d0%b5%d0%b1%d0%b0%d0%b7%d0%be%d0%b2%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f">Перебазовування</a> </li> <li> 3.7 <a href="/book/uk/v2/%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2-git-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>4. <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">Git на сервері</a></h2> <ol> <li> 4.1 <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> </li> <li> 4.2 <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%9e%d1%82%d1%80%d0%b8%d0%bc%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d1%96">Отримання Git на сервері</a> </li> <li> 4.3 <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%93%d0%b5%d0%bd%d0%b5%d1%80%d0%b0%d1%86%d1%96%d1%8f-%d0%b2%d0%b0%d1%88%d0%be%d0%b3%d0%be-%d0%bf%d1%83%d0%b1%d0%bb%d1%96%d1%87%d0%bd%d0%be%d0%b3%d0%be-%d0%ba%d0%bb%d1%8e%d1%87%d0%b0-SSH">Генерація вашого публічного ключа SSH</a> </li> <li> 4.4 <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%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%a1%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d1%83">Налаштування Серверу</a> </li> <li> 4.5 <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%94%d0%b5%d0%bc%d0%be%d0%bd-Git">Демон Git</a> </li> <li> 4.6 <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%a0%d0%be%d0%b7%d1%83%d0%bc%d0%bd%d0%b8%d0%b9-HTTP">Розумний HTTP</a> </li> <li> 4.7 <a href="/book/uk/v2/Git-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d1%96-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/uk/v2/Git-%d0%bd%d0%b0-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d1%96-GitLab">GitLab</a> </li> <li> 4.9 <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%92%d0%b0%d1%80%d1%96%d0%b0%d0%bd%d1%82%d0%b8-%d1%81%d1%82%d0%be%d1%80%d0%be%d0%bd%d0%bd%d1%8c%d0%be%d0%b3%d0%be-%d1%85%d0%be%d1%81%d1%82%d0%b8%d0%bd%d0%b3%d1%83">Варіанти стороннього хостингу</a> </li> <li> 4.10 <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%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>5. <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%a0%d0%be%d0%b7%d0%bf%d0%be%d0%b4%d1%96%d0%bb%d0%b5%d0%bd%d1%96-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d0%b8-%d1%80%d0%be%d0%b1%d0%be%d1%82%d0%b8">Розподілений Git</a></h2> <ol> <li> 5.1 <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%a0%d0%be%d0%b7%d0%bf%d0%be%d0%b4%d1%96%d0%bb%d0%b5%d0%bd%d1%96-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d0%b8-%d1%80%d0%be%d0%b1%d0%be%d1%82%d0%b8">Розподілені процеси роботи</a> </li> <li> 5.2 <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%92%d0%bd%d0%b5%d1%81%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b7%d0%bc%d1%96%d0%bd-%d0%b4%d0%be-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d1%83">Внесення змін до проекту</a> </li> <li> 5.3 <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%a1%d1%83%d0%bf%d1%80%d0%be%d0%b2%d0%be%d0%b4%d0%b6%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d1%83" class="active">Супроводжування проекту</a> </li> <li> 5.4 <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> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/uk/v2/GitHub-%d0%a1%d1%82%d0%b2%d0%be%d1%80%d0%b5%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%bd%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%be%d0%b1%d0%bb%d1%96%d0%ba%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%b7%d0%b0%d0%bf%d0%b8%d1%81%d1%83">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/uk/v2/GitHub-%d0%a1%d1%82%d0%b2%d0%be%d1%80%d0%b5%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%bd%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%be%d0%b1%d0%bb%d1%96%d0%ba%d0%be%d0%b2%d0%be%d0%b3%d0%be-%d0%b7%d0%b0%d0%bf%d0%b8%d1%81%d1%83">Створення та налаштування облікового запису</a> </li> <li> 6.2 <a href="/book/uk/v2/GitHub-%d0%af%d0%ba-%d0%b7%d1%80%d0%be%d0%b1%d0%b8%d1%82%d0%b8-%d0%b2%d0%bd%d0%b5%d1%81%d0%be%d0%ba-%d0%b4%d0%be-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d1%83">Як зробити внесок до проекту</a> </li> <li> 6.3 <a href="/book/uk/v2/GitHub-%d0%a1%d1%83%d0%bf%d1%80%d0%be%d0%b2%d0%be%d0%b4%d0%b6%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%bf%d1%80%d0%be%d1%94%d0%ba%d1%82%d1%83">Супроводжування проєкту</a> </li> <li> 6.4 <a href="/book/uk/v2/GitHub-%d0%9a%d0%b5%d1%80%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%be%d1%80%d0%b3%d0%b0%d0%bd%d1%96%d0%b7%d0%b0%d1%86%d1%96%d1%94%d1%8e">Керування організацією</a> </li> <li> 6.5 <a href="/book/uk/v2/GitHub-%d0%a1%d0%ba%d1%80%d0%b8%d0%bf%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-GitHub">Скриптування GitHub</a> </li> <li> 6.6 <a href="/book/uk/v2/GitHub-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%92%d0%b8%d0%b1%d1%96%d1%80-%d1%80%d0%b5%d0%b2%d1%96%d0%b7%d1%96%d0%b9">Інструменти Git</a></h2> <ol> <li> 7.1 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%92%d0%b8%d0%b1%d1%96%d1%80-%d1%80%d0%b5%d0%b2%d1%96%d0%b7%d1%96%d0%b9">Вибір ревізій</a> </li> <li> 7.2 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%86%d0%bd%d1%82%d0%b5%d1%80%d0%b0%d0%ba%d1%82%d0%b8%d0%b2%d0%bd%d0%b5-%d1%96%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f">Інтерактивне індексування</a> </li> <li> 7.3 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%a5%d0%be%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d1%87%d0%b8%d1%89%d0%b5%d0%bd%d0%bd%d1%8f">Ховання та чищення</a> </li> <li> 7.4 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%9f%d1%96%d0%b4%d0%bf%d0%b8%d1%81%d0%b0%d0%bd%d0%bd%d1%8f-%d0%bf%d1%80%d0%b0%d1%86%d1%96">Підписання праці</a> </li> <li> 7.5 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%9f%d0%be%d1%88%d1%83%d0%ba">Пошук</a> </li> <li> 7.6 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%9f%d0%b5%d1%80%d0%b5%d0%bf%d0%b8%d1%81%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d1%96%d1%81%d1%82%d0%be%d1%80%d1%96%d1%97">Переписування історії</a> </li> <li> 7.7 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%a3%d1%81%d0%b2%d1%96%d0%b4%d0%be%d0%bc%d0%bb%d0%b5%d0%bd%d0%bd%d1%8f-%d1%81%d0%ba%d0%b8%d0%b4%d0%b0%d0%bd%d0%bd%d1%8f-reset">Усвідомлення скидання (reset)</a> </li> <li> 7.8 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%a1%d0%ba%d0%bb%d0%b0%d0%b4%d0%bd%d0%b5-%d0%b7%d0%bb%d0%b8%d1%82%d1%82%d1%8f">Складне злиття</a> </li> <li> 7.9 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%97%d0%bd%d0%b5%d0%b2%d0%b0%d0%b4%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b7-Git">Зневадження з Git</a> </li> <li> 7.11 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%9f%d1%96%d0%b4%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d1%96">Підмодулі</a> </li> <li> 7.12 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%9f%d0%b0%d0%ba%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f">Пакування</a> </li> <li> 7.13 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%97%d0%b0%d0%bc%d1%96%d0%bd%d0%b0">Заміна</a> </li> <li> 7.14 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%97%d0%b1%d0%b5%d1%80%d0%b5%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%bf%d0%be%d1%81%d0%b2%d1%96%d0%b4%d1%87%d0%b5%d0%bd%d0%bd%d1%8f-credential">Збереження посвідчення (credential)</a> </li> <li> 7.15 <a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/uk/v2/%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%9a%d0%be%d0%bd%d1%84%d1%96%d0%b3%d1%83%d1%80%d0%b0%d1%86%d1%96%d1%8f-Git">Налаштування Git</a></h2> <ol> <li> 8.1 <a href="/book/uk/v2/%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%9a%d0%be%d0%bd%d1%84%d1%96%d0%b3%d1%83%d1%80%d0%b0%d1%86%d1%96%d1%8f-Git">Конфігурація Git</a> </li> <li> 8.2 <a href="/book/uk/v2/%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%90%d1%82%d1%80%d0%b8%d0%b1%d1%83%d1%82%d0%b8-Git">Атрибути Git</a> </li> <li> 8.3 <a href="/book/uk/v2/%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%93%d0%b0%d0%ba%d0%b8-hooks-Git">Гаки (hooks) Git</a> </li> <li> 8.4 <a href="/book/uk/v2/%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%9f%d1%80%d0%b8%d0%ba%d0%bb%d0%b0%d0%b4-%d0%bf%d0%be%d0%bb%d1%96%d1%82%d0%b8%d0%ba%d0%b8-%d0%ba%d0%be%d1%80%d0%b8%d1%81%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d0%b2%d0%b8%d0%ba%d0%be%d0%bd%d1%83%d0%b2%d0%b0%d0%bd%d0%be%d1%97-Git-%d0%be%d0%bc">Приклад політики користування виконуваної Git-ом</a> </li> <li> 8.5 <a href="/book/uk/v2/%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/uk/v2/Git-and-Other-Systems-Git-%d1%8f%d0%ba-%d0%ba%d0%bb%d1%96%d1%94%d0%bd%d1%82">Git and Other Systems</a></h2> <ol> <li> 9.1 <a href="/book/uk/v2/Git-and-Other-Systems-Git-%d1%8f%d0%ba-%d0%ba%d0%bb%d1%96%d1%94%d0%bd%d1%82">Git як клієнт</a> </li> <li> 9.2 <a href="/book/uk/v2/Git-and-Other-Systems-%d0%9c%d1%96%d0%b3%d1%80%d0%b0%d1%86%d1%96%d1%8f-%d0%bd%d0%b0-Git">Міграція на Git</a> </li> <li> 9.3 <a href="/book/uk/v2/Git-and-Other-Systems-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%9a%d1%83%d1%85%d0%be%d0%bd%d0%bd%d1%96-%d1%82%d0%b0-%d0%bf%d0%b0%d1%80%d0%b0%d0%b4%d0%bd%d1%96-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">Git зсередини</a></h2> <ol> <li> 10.1 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%9a%d1%83%d1%85%d0%be%d0%bd%d0%bd%d1%96-%d1%82%d0%b0-%d0%bf%d0%b0%d1%80%d0%b0%d0%b4%d0%bd%d1%96-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">Кухонні та парадні команди</a> </li> <li> 10.2 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%9e%d0%b1%e2%80%99%d1%94%d0%ba%d1%82%d0%b8-Git">Об’єкти Git</a> </li> <li> 10.3 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%9f%d0%be%d1%81%d0%b8%d0%bb%d0%b0%d0%bd%d0%bd%d1%8f-Git">Посилання Git</a> </li> <li> 10.4 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%a4%d0%b0%d0%b9%d0%bb%d0%b8-%d0%bf%d0%b0%d0%ba%d1%83%d0%bd%d0%ba%d0%b8">Файли пакунки</a> </li> <li> 10.5 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%a1%d0%bf%d0%b5%d1%86%d0%b8%d1%84%d1%96%d0%ba%d0%b0%d1%86%d1%96%d1%8f-%d0%bf%d0%be%d1%81%d0%b8%d0%bb%d0%b0%d0%bd%d1%8c-refspec">Специфікація посилань (refspec)</a> </li> <li> 10.6 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%9f%d1%80%d0%be%d1%82%d0%be%d0%ba%d0%be%d0%bb%d0%b8-%d0%bf%d0%b5%d1%80%d0%b5%d0%b4%d0%b0%d1%87%d1%96">Протоколи передачі</a> </li> <li> 10.7 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%a1%d1%83%d0%bf%d1%80%d0%be%d0%b2%d0%be%d0%b4%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%b2%d1%96%d0%b4%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b4%d0%b0%d0%bd%d0%b8%d1%85">Супроводження та відновлення даних</a> </li> <li> 10.8 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%97%d0%bc%d1%96%d0%bd%d0%bd%d1%96-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0">Змінні середовища</a> </li> <li> 10.9 <a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%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/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-A:-Git-%d0%b2-%d1%96%d0%bd%d1%88%d0%b8%d1%85-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d1%85-%d0%93%d1%80%d0%b0%d1%84%d1%96%d1%87%d0%bd%d1%96-%d1%96%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81%d0%b8">Додаток A: Git в інших середовищах</a></h2> <ol> <li> A1.1 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-A:-Git-%d0%b2-%d1%96%d0%bd%d1%88%d0%b8%d1%85-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d1%85-%d0%93%d1%80%d0%b0%d1%84%d1%96%d1%87%d0%bd%d1%96-%d1%96%d0%bd%d1%82%d0%b5%d1%80%d1%84%d0%b5%d0%b9%d1%81%d0%b8">Графічні інтерфейси</a> </li> <li> A1.2 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-A:-Git-%d0%b2-%d1%96%d0%bd%d1%88%d0%b8%d1%85-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d1%85-Git-%d1%83-Visual-Studio">Git у Visual Studio</a> </li> <li> A1.3 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-A:-Git-%d0%b2-%d1%96%d0%bd%d1%88%d0%b8%d1%85-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d1%85-Git-%d0%b2-Eclipse">Git в Eclipse</a> </li> <li> A1.4 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-A:-Git-%d0%b2-%d1%96%d0%bd%d1%88%d0%b8%d1%85-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d1%85-Git-%d1%83-Bash">Git у Bash</a> </li> <li> A1.5 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-A:-Git-%d0%b2-%d1%96%d0%bd%d1%88%d0%b8%d1%85-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d1%85-Git-%d1%83-Zsh">Git у Zsh</a> </li> <li> A1.6 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-A:-Git-%d0%b2-%d1%96%d0%bd%d1%88%d0%b8%d1%85-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d1%85-Git-%d1%83-Powershell">Git у Powershell</a> </li> <li> A1.7 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-A:-Git-%d0%b2-%d1%96%d0%bd%d1%88%d0%b8%d1%85-%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%be%d0%b2%d0%b8%d1%89%d0%b0%d1%85-%d0%9f%d1%96%d0%b4%d1%81%d1%83%d0%bc%d0%be%d0%ba">Підсумок</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-B:-%d0%92%d0%b1%d1%83%d0%b4%d0%be%d0%b2%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d1%83-%d0%b2%d0%b0%d1%88%d1%96-%d0%b7%d0%b0%d1%81%d1%82%d0%be%d1%81%d1%83%d0%bd%d0%ba%d0%b8-Git-%d0%b7-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b3%d0%be-%d1%80%d1%8f%d0%b4%d0%ba%d0%b0">Додаток B: Вбудовування Git у ваші застосунки</a></h2> <ol> <li> A2.1 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-B:-%d0%92%d0%b1%d1%83%d0%b4%d0%be%d0%b2%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d1%83-%d0%b2%d0%b0%d1%88%d1%96-%d0%b7%d0%b0%d1%81%d1%82%d0%be%d1%81%d1%83%d0%bd%d0%ba%d0%b8-Git-%d0%b7-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b3%d0%be-%d1%80%d1%8f%d0%b4%d0%ba%d0%b0">Git з командного рядка</a> </li> <li> A2.2 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-B:-%d0%92%d0%b1%d1%83%d0%b4%d0%be%d0%b2%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d1%83-%d0%b2%d0%b0%d1%88%d1%96-%d0%b7%d0%b0%d1%81%d1%82%d0%be%d1%81%d1%83%d0%bd%d0%ba%d0%b8-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-B:-%d0%92%d0%b1%d1%83%d0%b4%d0%be%d0%b2%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d1%83-%d0%b2%d0%b0%d1%88%d1%96-%d0%b7%d0%b0%d1%81%d1%82%d0%be%d1%81%d1%83%d0%bd%d0%ba%d0%b8-JGit">JGit</a> </li> <li> A2.4 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-B:-%d0%92%d0%b1%d1%83%d0%b4%d0%be%d0%b2%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d1%83-%d0%b2%d0%b0%d1%88%d1%96-%d0%b7%d0%b0%d1%81%d1%82%d0%be%d1%81%d1%83%d0%bd%d0%ba%d0%b8-go-git">go-git</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%ba%d0%be%d0%bd%d1%84%d1%96%d0%b3%d1%83%d1%80%d0%b0%d1%86%d1%96%d1%8f">Додаток C: Команди Git</a></h2> <ol> <li> A3.1 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%ba%d0%be%d0%bd%d1%84%d1%96%d0%b3%d1%83%d1%80%d0%b0%d1%86%d1%96%d1%8f">Налаштування та конфігурація</a> </li> <li> A3.2 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%9e%d1%82%d1%80%d0%b8%d0%bc%d0%b0%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d1%81%d1%82%d0%b2%d0%be%d1%80%d0%b5%d0%bd%d0%bd%d1%8f-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d1%96%d0%b2">Отримання та створення проектів</a> </li> <li> A3.3 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%91%d0%b0%d0%b7%d0%be%d0%b2%d0%b5-%d0%b7%d0%b1%d0%b5%d1%80%d0%b5%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b2%d1%96%d0%b4%d0%b1%d0%b8%d1%82%d0%ba%d1%96%d0%b2">Базове збереження відбитків</a> </li> <li> A3.4 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%93%d0%b0%d0%bb%d1%83%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%b7%d0%bb%d0%b8%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f">Галуження та зливання</a> </li> <li> A3.5 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%9f%d0%be%d1%88%d0%b8%d1%80%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b9-%d0%be%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%bd%d1%8f-%d0%bf%d1%80%d0%be%d0%b5%d0%ba%d1%82%d1%96%d0%b2">Поширення й оновлення проектів</a> </li> <li> A3.6 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%9e%d0%b3%d0%bb%d1%8f%d0%b4-%d1%82%d0%b0-%d0%bf%d0%be%d1%80%d1%96%d0%b2%d0%bd%d1%8f%d0%bd%d0%bd%d1%8f">Огляд та порівняння</a> </li> <li> A3.7 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%97%d0%bd%d0%b5%d0%b2%d0%b0%d0%b4%d0%b6%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f">Зневаджування</a> </li> <li> A3.8 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%9b%d0%b0%d1%82%d0%b0%d0%bd%d0%bd%d1%8f-patching">Латання (patching)</a> </li> <li> A3.9 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%95%d0%bb%d0%b5%d0%ba%d1%82%d1%80%d0%be%d0%bd%d0%bd%d0%b0-%d0%bf%d0%be%d1%88%d1%82%d0%b0">Електронна пошта</a> </li> <li> A3.10 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%97%d0%be%d0%b2%d0%bd%d1%96%d1%88%d0%bd%d1%96-%d1%81%d0%b8%d1%81%d1%82%d0%b5%d0%bc%d0%b8">Зовнішні системи</a> </li> <li> A3.11 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%90%d0%b4%d0%bc%d1%96%d0%bd%d1%96%d1%81%d1%82%d1%80%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f">Адміністрування</a> </li> <li> A3.12 <a href="/book/uk/v2/%d0%94%d0%be%d0%b4%d0%b0%d1%82%d0%be%d0%ba-C:-%d0%9a%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8-Git-%d0%9a%d1%83%d1%85%d0%be%d0%bd%d0%bd%d1%96-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">Кухонні команди</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.3 Розподілений Git - Супроводжування проекту</h1> <div> <h2 id="_супроводжування_проекту">Супроводжування проекту</h2> <div class="paragraph"> <p> Окрім знань щодо того, як ефективно зробити внесок до проекту, вам можливо знадобиться вміння його супроводжувати. Це може включати прийняття та застосування латок, які були згенеровані <code>format-patch</code> та надіслані вам поштою, або інтегрування змін з віддалених гілок для сховищ, які ви додали як віддалене для вашого проекту. Чи ви супроводжуєте канонічний репозиторій, чи бажаєте допомогти перевіряти або схвалювати латки, вам треба знати, як приймати роботу в спосіб, який є найзрозумілішим для інших учасників та щоб ви були в змозі підтримувати його у майбутньому.</p> </div> <div class="sect3"> <h3 id="_робота_з_тематичними_гілками">Робота з тематичними гілками</h3> <div class="paragraph"> <p> Коли ви збираєтесь інтегрувати нову роботу, зазвичай слушно випробувати її в тематичній гілці — тимчасова гілка, спеціально створена для перевірки нової роботи. У такому разі буде легко окремо налаштовувати латку та облишити її, якщо вона не працює, доки не зʼявиться час, щоб повернутися до неї. Якщо ви виберете просте імʼя для гілки, повʼязане з тематикою роботи, яку ви збираєтесь випробувати, наприклад <code>ruby_client</code> чи щось не менш змістовне, то легко зможете пригадати назву гілки, якщо ви покинули її на деякий час та вирішили повернутись до неї пізніше. Супроводжувач проекту Git переважно також розподіляє ці гілки за просторами імен — на кшталт <code>sc/ruby_client</code>, де <code>sc</code> є скороченням від імені автора роботи. Як ви памʼятаєте, можна відгалузити гілку від <code>master</code> таким чином:</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> або <code>git am</code>.</p> </div> <div class="sect4"> <h4 id="_застосування_латки_за_допомогою_apply">Застосування латки за допомогою apply</h4> <div class="paragraph"> <p> Якщо ви отримали латку від когось, хто згенерував її командою <code>git diff</code> або якимось різновидом Unix <code>diff</code> (не рекомендовано; дивіться наступну підсекцію), то її можна застосувати за допомогою команди <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>, щоб застосувати латку, хоча вона є більш параноїдною та приймає менше невизначених збігів, ніж patch. Вона також опрацьовує додавання, вилучення та перейменування файлів, якщо вони описані в форматі <code>git diff</code>, чого <code>patch</code> не зробить. Нарешті, <code>git apply</code> працює за принципом <code>`застосувати все або скасувати все'': буде застосовано все або нічого, у той час як `patch</code> може частково застосувати латки, залишивши робочу директорію в дивному стані. Загалом <code>git apply</code> набагато консервативніша, ніж <code>patch</code>. Вона не створить для вас коміт — після виконання, вам доведеться індексувати та зберегти нові зміни вручну.</p> </div> <div class="paragraph"> <p>Ви також можете використати <code>git apply</code>, щоб побачити, чи латка може бути застосована чисто перед тим, як власно намагатись справді застосувати її — ви можете виконати <code>git apply --check</code> з латкою:</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> замість <code>diff</code> для генерації латок для вас. Ви маєте використовувати <code>git apply</code> лише для застарілих латок та тому подібних речей.</p> </div> <div class="paragraph"> <p>Щоб застосувати латку, що її згенерувала <code>format-patch</code>, скористуйтесь <code>git am</code> (команда називається <code>am</code>, бо використовується, щоб застосувати (apply) низку латок з поштової скриньки (mailbox)). Технічно, <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 &lt;jessica@example.com&gt; 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. Якщо хтось правильно надіслав вам латку, використовуючи <code>git send-email</code>, та ви завантажили її у форматі mbox, то ви можете вказати <code>git am</code> цей mbox файл, та він розпочне застосовувати всі латки, які зустріне. Якщо ви користуєтесь поштовим клієнтом, який може зберегти декілька листів у mbox форматі, то можете зберегти всю послідовність латок до одного файлу, а потім використати <code>git am</code> щоб застосувати їх усіх по одній.</p> </div> <div class="paragraph"> <p>Втім, якщо хтось відвантажив файл латки, який згенерував <code>git format-patch</code>, до системи завдань (ticketing system) чи чогось подібного, то файл можна зберегти локально та потім передати його з вашого диску до <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-limit-log-function.patch Applying: add limit to log function</code></pre> </div> </div> <div class="paragraph"> <p>Як бачите, команда чисто застосувала та автоматично створила новий коміт для вас. Інформація про автора взята зі заголовків листа <code>From</code> та <code>Date</code>, а повідомлення коміту взято зі <code>Subject</code> та тіла (перед латкою) листа. Наприклад, якби латка застосовувалась з наведеного вище прикладу 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 &lt;jessica@example.com&gt; AuthorDate: Sun Apr 6 10:17:23 2008 -0700 Commit: Scott Chacon &lt;schacon@gmail.com&gt; 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>Author</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 спробує три-точкове злиття (three-way merge). Ця опція типово не ввімкнена, адже вона не працює, якщо коміту, на якому базується латка, немає у вашому репозиторії. Якщо ви маєте цей коміт — якщо латка базувалася на публічному коміті — то зазвичай опція <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>У цьому випадку без опції <code>-3</code> латка викликала б конфлікт. Але з опцією <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">Отримання віддалених гілок</h3> <div class="paragraph"> <p> Якщо внесок прийшов від користувача Git, який налаштував свій власний репозиторій, надіслав до нього декілька змін, та відправив вам URL цього сховища, а також ім’я віддаленої гілки, яка містить зміни, то можете додати його як віддалене сховище та зробити локальне злиття.</p> </div> <div class="paragraph"> <p>Наприклад, якщо Джесіка надсилає вам листа, в якому розповідає про чудовий новий функціонал у гілці <code>ruby-client</code> її сховища, то ви можете подивитись на них, якщо додасте віддалене сховище та отримаєте цю гілку локально:</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>Якщо пізніше вона знову надішле вам листа з іншою гілкою з ще однією чудовою функцією, то ви зможете отримати зміни напряму, адже у вас вже є її віддалене сховище.</p> </div> <div class="paragraph"> <p>Це найзручніше, якщо ви працюєте з кимось постійно. Якщо ж це подеколи єдина латка для внеску, то на прийняття її листом може піти менше часу, ніж вимагати від когось мати власний сервер та постійно додавати та вилучати віддалені сховища задля отримання нових латок. Також, навряд чи вам сподобається мати сотні віддалених репозиторіїв, у кожен з яких було додано лише одну чи дві латки. Втім, скрипти та сервіси розгортання (hosted services) можуть полегшити це — переважно все залежить від того, як працюєте ви, та як працюють автори внесків.</p> </div> <div class="paragraph"> <p>Інша перевага цього підходу в тому, що ви також отримуєте історію комітів. Хоча у вас можуть бути справжні проблеми злиття, ви будете знати на чому з вашої історії вони базуються; належне три-точкове злиття є типовим — немає необхідності додавати <code>-3</code> та сподіватись, що латку було згенеровано на базі публічного коміту, до якого ви маєте доступ.</p> </div> <div class="paragraph"> <p>Якщо ви не співпрацюєте з людиною постійно, проте все одно бажаєте отримати зміни в такий спосіб, то можете надати URL віддаленого сховища команді <code>git pull</code>. Це робить одноразове отримання змін та не зберігає URL як посилання на віддалений репозиторій:</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 -&gt; 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>Буває корисним переглянути всі коміти, які є в поточній гілці, проте яких немає в гілці master. Коміти з головної гілки можна виключити за допомогою опції <code>--not</code> перед ім’ям гілки. Це робить те саме, що й формат <code>master..contrib</code>, що ми його використовували раніше. Наприклад, якщо вам надіслано дві латки та ви створили гілку під назвою <code>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 &lt;schacon@gmail.com&gt; Date: Fri Oct 24 09:53:59 2008 -0700 seeing if this helps the gem commit 7482e0d16d04bea79d0dba8988cc78df655f16a0 Author: Scott Chacon &lt;schacon@gmail.com&gt; 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> команди <code>git log</code>, яка додає привнесену різницю після кожного коміту.</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>Ця команда видає вам різницю, проте вона може бути оманливою. Якщо гілка <code>master</code> пішла вперед після створення тематичної гілки на її базі, то ви отримаєте назверх дивний результат. Так сталося через те, що Git напряму порівнює відбитки останнього коміту поточної тематичної гілки та відбиток останнього коміту в гілці <code>master</code>. Наприклад, якщо ви додали рядок у файлі в гілці <code>master</code>, пряме порівняння цих відбитків виглядатиме ніби тематична гілка збирається вилучити цей рядок.</p> </div> <div class="paragraph"> <p>Якщо <code>master</code> є прямим предком тематичної гілки, то це не буде проблемою; проте якщо ці дві історії розійшлися, різниця виглядатиме ніби ви додаєте все нове зі своєї тематичної гілки та видаляєте все, що зʼявилося лише в гілці <code>master</code>.</p> </div> <div class="paragraph"> <p>Що вам дійсно потрібно побачити — це зміни, додані до тематичної гілки — праця, яку ви запровадите, якщо зіллєте цю гілку до master. Це можна зробити, якщо порівняти останній коміт тематичної гілки з першим спільним предком, який вона має з гілкою master.</p> </div> <div class="paragraph"> <p>Технічно, ви можете зробити це явно зʼясувавши спільного предка та виконавши diff з ним:</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>, ви можете поставити три крапки після іншої гілки, щоб побачити різницю між останнім комітом поточної гілки та її спільного предка з іншою гілкою:</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>Ця команда показує лише зроблене у поточній тематичній гілці після спільного з master предка. Цей синтаксис дійсно варто запамʼятати.</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> Одним з простих процесів роботи — зливати всю цю працю прямо до гілки <code>master</code>. У цьому сценарії, гілка <code>master</code> містить зазвичай стабільний код. Коли зʼявляється робота в тематичній гілці, яку ви вважаєте завершеною, чи хтось інший запропонував та ви перевірили, ви зливаєте її до гілки <code>master</code>, вилучаєте цю щойно залиту тематичну гілку, та повторюєте це все знову.</p> </div> <div class="paragraph"> <p>Наприклад, якщо в нас є репозиторій з роботою в двох гілках під назвами <code>ruby_client</code> та <code>php_client</code>, що мають вигляд <a href="/book/uk/v2/ch00/merwf_a">Історія з декількома тематичними гілками.</a>, та ми зіллємо <code>ruby_client</code>, а потім <code>php_client</code>, то наша історія в результаті виглядатиме як <a href="/book/uk/v2/ch00/merwf_b">Після злиття тематичної гілки.</a>.</p> </div> <div id="merwf_a" class="imageblock"> <div class="content"> <img src="/book/uk/v2/images/merging-workflows-1.png" alt="Історія з декількома тематичними гілками."> </div> <div class="title">Рисунок 72. Історія з декількома тематичними гілками.</div> </div> <div id="merwf_b" class="imageblock"> <div class="content"> <img src="/book/uk/v2/images/merging-workflows-2.png" alt="Після злиття тематичної гілки."> </div> <div class="title">Рисунок 73. Після злиття тематичної гілки.</div> </div> <div class="paragraph"> <p>Це, напевно, найпростіший процес роботи, проте він може бути проблемним, якщо треба працювати з більшими або стабільнішими проектами, в яких ви бажаєте бути дійсно обережними з новими змінами.</p> </div> <div class="paragraph"> <p>Якщо у вас достатньо важливий проект, то можна скористатися двофазним циклом зливання. У цьому сценарії, у вас є дві довгострокові гілки: <code>master</code> та <code>develop</code>. Ви домовляєтесь оновлювати <code>master</code> лише коли зʼявляється дуже стабільна версія, а весь новий код інтегрується до гілки <code>develop</code>. Ви регулярно надсилаєте зміни до обох цих гілок до публічного сховища. Щоразу, коли виникає готова до злиття тематична гілка (<a href="/book/uk/v2/ch00/merwf_c">Перед злиттям тематичної гілки.</a>), ви зливаєте її до <code>develop</code> (<a href="/book/uk/v2/ch00/merwf_d">Після злиття тематичної гілки.</a>); потім, коли ви створите теґ перевіреної версії, то перемотуєте вперед <code>master</code> до останнього коміту тепер стабільного <code>develop</code> (<a href="/book/uk/v2/ch00/merwf_e">Після випуску проекту.</a>).</p> </div> <div id="merwf_c" class="imageblock"> <div class="content"> <img src="/book/uk/v2/images/merging-workflows-3.png" alt="Перед злиттям тематичної гілки."> </div> <div class="title">Рисунок 74. Перед злиттям тематичної гілки.</div> </div> <div id="merwf_d" class="imageblock"> <div class="content"> <img src="/book/uk/v2/images/merging-workflows-4.png" alt="Після злиття тематичної гілки."> </div> <div class="title">Рисунок 75. Після злиття тематичної гілки.</div> </div> <div id="merwf_e" class="imageblock"> <div class="content"> <img src="/book/uk/v2/images/merging-workflows-5.png" alt="Після випуску проекту."> </div> <div class="title">Рисунок 76. Після випуску проекту.</div> </div> <div class="paragraph"> <p>Таким чином, коли хтось створює клон сховища вашого проекту, вони можуть або отримати <code>master</code>, щоб зібрати останню стабільну версію та легко оновлюватись, або можуть отримати <code>develop</code>, в якому зміст найновіше. Ви також можете розширити цю концепцію: додати гілку <code>integrate</code>, в якій вся робота зливається разом. Потім, коли код у цій гілці стає стабільним та проходитиме тести, ви зливаєте її до гілки <code>develop</code>; а вже коли вона дійсно довела свою стабільність, ви перемотуєте вперед гілку <code>master</code>.</p> </div> </div> <div class="sect4"> <h4 id="_процеси_роботи_великих_зливань">Процеси роботи великих зливань</h4> <div class="paragraph"> <p> Проект Git має чотири довгострокових гілки: <code>master</code>, <code>next</code> та <code>pu</code> (proposed updates — пропоновані оновлення) для нової роботи, та <code>main</code> для виправлень старших версій. Коли учасники впроваджують щось нове, воно накопичується в тематичних гілках у сховищі супроводжувача — схоже на вищеописані методи (дивіться <a href="/book/uk/v2/ch00/merwf_f">Керування складною послідовністю паралельних доданих тематичних гілок.</a>). Потім тематичні гілки перевіряють, щоб визначити, чи вони є безпечними та готовими для використання, чи треба ще над ними працювати. Якщо вони безпечні, їх зливають до <code>next</code>, і цю гілку надсилають до сервера, аби всі могли спробувати злити тематичні гілки разом.</p> </div> <div id="merwf_f" class="imageblock"> <div class="content"> <img src="/book/uk/v2/images/large-merges-1.png" alt="Керування складною послідовністю паралельних доданих тематичних гілок."> </div> <div class="title">Рисунок 77. Керування складною послідовністю паралельних доданих тематичних гілок.</div> </div> <div class="paragraph"> <p>Якщо теми досі потребують доопрацювання, їх натомість зливають до <code>pu</code>. Коли визначено, що вони цілковито стабільні, їх зливають вдруге — до <code>master</code>. Гілки <code>next</code> та <code>pu</code> перезбираються з <code>master</code>. Це означає, що <code>master</code> майже завжди рухається вперед, <code>next</code> іноді перебазовують, а <code>pu</code> перебазовують навіть частіше:</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/uk/v2/images/large-merges-2.png" alt="Зливання доданих тематичних гілок до довготривалих інтеграційних гілок."> </div> <div class="title">Рисунок 78. Зливання доданих тематичних гілок до довготривалих інтеграційних гілок.</div> </div> <div class="paragraph"> <p>Коли тематичну гілку нарешті зливають до <code>master</code>, її вилучать з репозиторія. Проект Git також містить гілку <code>main</code>, яка відгалужена від останнього видання (release), щоб постачати латки до цієї версії, якщо необхідно супроводження цього видання. Отже, коли ви робите клон сховища Git, у вас є чотири гілки, на які ви можете переключитися, щоб випробувати проект на різних щаблях розробки, в залежності від того, наскільки новітня версія вам потрібна, чи яким чином ви бажаєте зробити внесок; та супроводжувач має структурований процес роботи, щоб йому було зручно оцінити нових учасників. Процес роботи проекту Git дуже спеціалізований. Щоб добре це зрозуміти, можете поглянути на <a href="https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt">Інструкцію супроводжувача Git</a>.</p> </div> </div> <div class="sect4"> <h4 id="_rebase_cherry_pick">Процеси роботи з перебазуванням та висмикуванням</h4> <div class="paragraph"> <p> Інші супроводжувачі надають перевагу перебазуванню та висмикуванню нової роботи поверху їхньої гілки master, замість зливання до неї, задля якомога лінійнішої історії. Коли у вас є робота в тематичній гілці, та ви вирішили, що бажаєте її інтегрувати, ви переходите до цієї гілки та виконуєте команду rebase, щоб перебудувати зміни поверху вашої поточної гілки master (або <code>develop</code> тощо). Якщо все вийшло добре, ви можете перемотати вперед свою гілку <code>master</code>, та отримаєте лінійну історію проекту.</p> </div> <div class="paragraph"> <p> Інший спосіб перемістити впроваджену роботу з однієї гілки до іншої — висмикнути її. Висмикування в Git — це ніби перебазування для єдиного коміту. Воно бере латку, яку запровадив коміт, та намагається застосувати його на поточній гілці. Це корисно, якщо у вас є декілька комітів у тематичній гілці, та ви бажаєте інтегрувати лише один з них, або якщо у вас лише один коміт у тематичній гілці, та вам легше висмикнути його, ніж виконувати перебазування. Наприклад, припустимо, що у вас є ось такий проект:</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/uk/v2/images/rebasing-1.png" alt="Приклад історії перед висмикуванням."> </div> <div class="title">Рисунок 79. Приклад історії перед висмикуванням.</div> </div> <div class="paragraph"> <p>Якщо ви бажаєте додати коміт <code>e43a6</code> до гілки master, ви можете виконати</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/uk/v2/images/rebasing-2.png" alt="Історія після висмикування коміту з тематичної гілки."> </div> <div class="title">Рисунок 80. Історія після висмикування коміту з тематичної гілки.</div> </div> <div class="paragraph"> <p>Тепер ви можете вилучити тематичну гілку та викинути коміти, які ви не бажали додавати.</p> </div> </div> <div class="sect4"> <h4 id="_rerere">Rerere</h4> <div class="paragraph"> <p> Якщо ви робите багато зливань та перебазувань, або супроводжуєте довготривалу тематичну гілку, Git має функціонал під назвою ``rerere'', який може стати в пригоді.</p> </div> <div class="paragraph"> <p>Rerere означає ``використовуй записані розвʼязання'' (reuse recorded resolution) — це метод скоротити ручні розвʼязання конфліктів. Коли 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>Якщо потрібно, ви можете взаємодіяти з памʼяттю rerere за допомогою команди <code>git rerere</code>. Якщо викликати окремо, Git перевіряє базу даних розвʼязань та намагається знайти збіг з будь-яким поточним конфліктом злиття та розвʼязує їх (хоча це здійснюється автоматично, якщо <code>rerere.enabled</code> встановлено в <code>true</code>). Також існують підкоманди, для перегляду того, що буде записано, для стирання окремого розвʼязання з памʼяті, та щоб очистити всю памʼять. Ми розглянемо rerere докладніше в <a href="/book/uk/v2/ch00/ref_rerere">Rerere</a>.</p> </div> </div> </div> <div class="sect3"> <h3 id="_tagging_releases">Теґування ваших видань (release)</h3> <div class="paragraph"> <p> Коли ви вирішили випустити видання, ви, вірогідно, забажаєте створити теґ, щоб мати можливість відтворити його після того. Як ви можете створити новий теґ, розказано в <a href="/book/uk/v2/ch00/ch02-git-basics-chapter">Основи Git</a>. Якщо ви, як супроводжувач, вирішите підписати теґ, процес може виглядати приблизно так:</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 &lt;schacon@gmail.com&gt;" 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 &lt;schacon@gmail.com&gt; sub 2048g/45D02282 2009-02-09 [expires: 2010-02-09]</code></pre> </div> </div> <div class="paragraph"> <p>Потім, ви можете напряму імпортувати ключ до бази даних Git, якщо експортуєте його та пропустити через команду <code>git hash-object</code>, яка записує новий блоб з його вмістом до Git та видає SHA-1 цього блобу:</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>, то теґ <code>maintainer-pgp-pub</code> стане доступним всім. Якщо хтось забажає перевірити теґ, то він зможе напряму імпортувати ваш PGP ключ. Для цього йому треба дістати блоб напряму з бази даних та імпортувати його до 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 &lt;теґ&gt;</code> дозволить вам надати користувачу більш детальні інструкції щодо перевірки теґу.</p> </div> </div> <div class="sect3"> <h3 id="_build_number">Генерація номеру збірки</h3> <div class="paragraph"> <p> Оскільки Git не має монотонно зростаючих номерів як 'v123' чи чогось подібного для кожного коміту, якщо ви бажаєте мати зручне для людини імʼя для коміту, ви можете виконати <code>git describe</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 describe</code> схиляється до анотованих теґів (теґи, що їх створили з опцією <code>-a</code> або <code>-s</code>), отже теґи для видань (release) варто створювати таким чином при використанні <code>git describe</code>, щоб бути впевненим, що коміт буде названо належним чином при описі. Ви також можете використати цей рядок як ціль для команд checkout або show, хоча вона покладається на скорочене значення SHA-1 наприкінці, отже воно може не бути дійсним завжди. Наприклад, ядро Linux нещодавно стрибнуло з 8 до 10 символів, щоб подбати про унікальність SHA-1 обʼєктів, отже старіші імена з виводу <code>git describe</code> стали непридатними.</p> </div> </div> <div class="sect3"> <h3 id="_preparing_release">Підготовка видань</h3> <div class="paragraph"> <p> Тепер ви бажаєте видати збірку. Одна з речей, які ви забажаєте — створити архів останнього відбитку вашого коду для знедолених, які не користуються Git. Для цього існує команда <code>git archive</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 &gt; `git describe master`.tar.gz $ ls *.tar.gz v1.6.2-rc1-20-g8c5b85c.tar.gz</code></pre> </div> </div> <div class="paragraph"> <p>Якщо хтось відкриє цей архів tar, то отримає останній відбиток вашого проекту в директорії проекту. Ви також можете створити архів zip майже так само — треба лише передати опцію <code>--format=zip</code> до <code>git archive</code>:</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 &gt; `git describe master`.zip</code></pre> </div> </div> <div class="paragraph"> <p>Тепер у вас є гарний архів tar та zip вашого видання проекту, яке ви можете відвантажити на вебсайт або надіслати комусь поштою.</p> </div> </div> <div class="sect3"> <h3 id="_the_shortlog">Короткий журнал (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/uk/v2/Розподілений-Git-Внесення-змін-до-проекту">prev</a> | <a href="/book/uk/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>

Pages: 1 2 3 4 5 6 7 8 9 10