<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Заядлый</title><generator>teletype.in</generator><description><![CDATA[Заядлый]]></description><image><url>https://img4.teletype.in/files/75/ff/75ffb1d5-3cc6-4e7c-858e-d68ed0d02eef.png</url><title>Заядлый</title><link>https://teletype.in/@kurilkv</link></image><link>https://teletype.in/@kurilkv?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=kurilkv</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/kurilkv?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/kurilkv?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Fri, 01 May 2026 18:30:34 GMT</pubDate><lastBuildDate>Fri, 01 May 2026 18:30:34 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@kurilkv/CodimGitHub</guid><link>https://teletype.in/@kurilkv/CodimGitHub?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=kurilkv</link><comments>https://teletype.in/@kurilkv/CodimGitHub?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=kurilkv#comments</comments><dc:creator>kurilkv</dc:creator><title>Ультимативный гайд по Git &amp; GitHub(PyCharm/Terminal)</title><pubDate>Wed, 09 Aug 2023 10:19:50 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/5e/94/5e94a297-4fe1-41dd-8d60-6661ffada1ae.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/fc/1c/fc1cb700-2c98-4e77-8693-0993eef1be8b.jpeg"></img>Время прочтения: 10 минут]]></description><content:encoded><![CDATA[
  <figure id="VetT" class="m_column">
    <img src="https://img4.teletype.in/files/fc/1c/fc1cb700-2c98-4e77-8693-0993eef1be8b.jpeg" width="640" />
  </figure>
  <p id="cJMW"><em>Время прочтения: <code>25 минут</code></em></p>
  <p id="ceFB"><strong>Привет!</strong> Недавно я загорелся идеей изучить одну из систем контроля версий. Лишним точно не будет, к тому же я мог бы заливать открытый код своих проектов в репозиторий для общего доступа (и публикации в <a href="https://t.me/CCrypty" target="_blank"><em>Кодим Крипту</em></a>) — выбор пал на <strong>Git </strong>и <strong>GitHub</strong>, как Веб-сервис, основанный на <strong>Git</strong>. </p>
  <p id="kiFb">И все бы хорошо, но перерыв весь dev телеграм и часть ютуба я пришел к выводу, что <em>нормальных, развернутых и понятных гайдов по <strong>Git </strong>просто нет.</em></p>
  <p id="GGuP">Что ж, посидев несколько дней и наконец поняв, как все работает, я, в партнерстве со вторым админом канала решил написать ультимативный гайд по <strong>Git </strong>&amp; <strong>GitHub</strong>, тем самым сэкономить вам кучу сил, времени и нервов. </p>
  <p id="EZTI">Эта статья состоит из двух глав, в каждой из которых есть <strong>Основная часть </strong>и <strong>Advanced</strong>, если основ мало. Обсудим работу <strong>Git </strong>при помощи интерфейса <strong>PyCharm</strong>, а также по старинке через <strong>терминал</strong>. </p>
  <p id="3ACO">Статья ориентирована на новичка, но даже если вы таковым не являетесь — не уходите, возможно вы почерпнете здесь что-то новое для себя. Новичок же получит ВСЮ необходимую базу для полноценной работы с <strong>Git </strong>на первых порах. </p>
  <p id="yB8y"><strong>Первая Глава - <a href="https://t.me/kurilkv" target="_blank">Заядлый<br /></a>Вторая Глава - <a href="https://t.me/papa_nft" target="_blank">Глеб<br /></a>Авторы канала - <a href="https://t.me/CCrypty" target="_blank">Кодим крипту</a></strong></p>
  <section style="background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Q5J6">Это наверное первый действительно всеобъемлющий гайд по <strong>Git </strong>&amp; <strong>GitHub</strong>, который сможет понять даже твоя бабушка, <strong>Поехали!</strong></p>
  </section>
  <hr />
  <p id="P4Ms"></p>
  <h3 id="zIqY">Как читать эту статью?</h3>
  <p id="WdGf">Первая Глава нашей работы целиком и полностью посвящена работе с <strong>Git </strong>при помощи встроенного интерфейса <strong>PyCharm</strong>, но даже если вы не юзаете <strong>PyCharm </strong>- первая глава является обязательной к прочтению(хотя бы просто к прочтению, можно не повторять действия) для дальнейшего понимания материала и формирования в голове общего алгоритма работы с <strong>Git</strong>. </p>
  <p id="PEBk">В остальном же, старайтесь не просто &quot;пробегаться&quot; по статье, а пытаться реализовать ту или иную механику на своем собственном проекте, именно так вы вынесете максимальный <em>impact </em>для себя из этой статьи.</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="0rD9"><strong>Внимательно будешь читать статью - найдешь тикет на 10 проходок в наш {Layer  1} чатик:)</strong></p>
  </section>
  <p id="9H1a"></p>
  <h2 id="GEUU">Навигация</h2>
  <p id="L1ZV">- <a href="#CorX">Установка Git<br /></a>- <strong>ГЛАВА</strong> 1: <a href="#H084"><strong>Git &amp; GitHub через PyCharm</strong><br /></a>    <strong> База:</strong>     1.<a href="#R7Xn">Создание проекта и запуск VCS</a><br />        2. <a href="#L0JM">.gitignore </a><br />        3. <a href="#hdfl">Начинаем отслеживать файлы</a><br />       4.<a href="#qo7Q">Первый Коммит</a><br />        5. <a href="#Bfid">Просмотр изменений, откат</a><br />        6.<a href="#Bey9">push</a><br />        7. <a href="#gN92">pull</a><br />        <a href="#VnBN">Промежуточные итоги</a></p>
  <p id="tNtG"><strong>    Advanced LVL:<br />         </strong>1. <a href="#bRVr">Клонируем проект<br /></a>        2. <a href="#hpSZ">Установка venv</a><br />        3. <a href="#yG0L"><code>requirements.txt</code></a><br />        4. <a href="#JLao">Создаем новую ветку</a><br />        5. <a href="#oRpl">Pull-request</a><br />        6. <a href="#04gm">Переход в master branch</a><br />        <a href="#3Jkq">Промежуточные итоги</a><br />  </p>
  <p id="YvBJ">- <strong>ГЛАВА 2: <a href="#xd0e">Git &amp; GitHub через Terminal</a></strong><br />    <strong>База:</strong><br />        1. <a href="#yIce">Настройка Git<br /></a>        2. <a href="#mWFn">Инициализация репозитория</a><br />        3. <a href="#6duo">Области Git</a><br />        4. <a href="#UitW">Статусы отслеживания файлов</a><br />        5. <a href="#OxxP">.gitignore</a><br />        6. <a href="#c4MQ">Создание проекта</a><br />        7. <a href="#owRd">Первый Коммит</a><br />        8. <a href="#zWBW">Второй Коммит</a><br />        9. <a href="#1IWS">Перемещение между версиями</a><br />        10. <a href="#pB3j">Ветки</a> <br />        11. <a href="#DFTr">Remote репозитории</a><br />        12. <a href="#JA9m">Связь local и remote repository</a><br />        <a href="#aj7e">Промежуточные итоги</a></p>
  <p id="exBL"><strong>    Advanced LVL:<br /></strong>        1. <a href="#QWYk">Слияние веток</a><br />        2. <a href="#j6mp">Перемещение</a><br />        3. <a href="#87pk">Pull-request</a><br />        <a href="#vNXj">Промежуточные итоги</a></p>
  <p id="IPak">- <a href="#Z4RT"><strong>Заключение</strong></a><br />- <strong>Приложение А:</strong> <a href="#fdlh">Git Справочник</a></p>
  <hr />
  <p id="9ruX"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="CorX" data-align="center">Установка Git</h2>
  </section>
  <p id="Wz8H">Это первое, с чего стоит начать вне зависимости от того, какой из способов вы выберете(PyCharm/Terminal), все просто:</p>
  <ul id="aQvN">
    <li id="mjHz">Скачайте клиент с <a href="https://git-scm.com/downloads" target="_blank">официального сайта</a></li>
  </ul>
  <figure id="KUhV" class="m_column">
    <img src="https://img4.teletype.in/files/bb/45/bb455dfb-15f2-45c1-aa3f-a3a009309cf1.png" width="892" />
    <figcaption>Выбирайте свою разрядность системы</figcaption>
  </figure>
  <p id="Mxwa">Выполните установку, <strong>не меняя никаких пунктов</strong>, кроме расположения(по желанию)</p>
  <figure id="Zq68" class="m_column">
    <img src="https://img2.teletype.in/files/d6/70/d6709ca0-aefd-4e4a-9458-8781ca7c8a2e.png" width="580" />
  </figure>
  <p id="OqrY"><strong>Готово! </strong></p>
  <hr />
  <p id="lTtH"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="H084" data-align="center">ГЛАВА 1: Git &amp; GitHub через PyCharm (by заядлый)</h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <blockquote id="liVi"><strong>Дисклеймер:</strong> Вы вольны использовать любой веб-сервис с Git помимо GitHub, интерфейс везде +- один</blockquote>
    <p id="CMiv">Этот раздел посвящен работе с Git при помощи встроенного интерфейса PyCharm, если вы по какой-то причине кодите на питоне и до сих пор не используете PyCharm — то это как минимум странно. Одумайтесь. </p>
    <p id="QkAW">Вообще PyCharm платный, но для работы с Git вам хватит и бесплатной версии (кстати если вы учитесь в тех. вузе, то вероятно, у Вашего университета уже приобретена лицензия на JetBrains, попробуйте)</p>
    <p id="Md6Q">Пока сам изучал материал, натыкался на додиков, которые работают с Git в Pycharm через терминал.. я же считаю, что мы обязаны использовать все возможности IDE, иначе проще тогда писать код в блокноте.</p>
  </section>
  <hr />
  <h3 id="HSJ4"></h3>
  <h3 id="R7Xn" data-align="center">1. Создание проекта и запуск VCS</h3>
  <p id="oxLn">Наша задача создать новый проект в PyCharm с виртуальным окружением(<a href="https://dvmn.org/encyclopedia/qna/12/chto-takoe-virtualnoe-okruzhenie-zachem-ono-kakie-byvajut-analogi/" target="_blank">что это</a>)</p>
  <figure id="6WZ0" class="m_column">
    <img src="https://img3.teletype.in/files/a1/c8/a1c8b637-5b1c-4fcc-8684-859199b1df2d.png" width="1187" />
    <figcaption>Ничего не меняем, кроме расположения, жмем <strong>Create</strong></figcaption>
  </figure>
  <p id="nnL2">Тут же для примера создадим отдельный модуль, чтобы на его примере увидеть работу <strong>Git:</strong></p>
  <figure id="14Em" class="m_column">
    <img src="https://img3.teletype.in/files/6e/76/6e763874-0973-45dd-94a4-dbd77379b65d.png" width="1116" />
  </figure>
  <p id="ILmt"><strong>Теперь давайте активируем Git! </strong><br /><code>VSC -&gt; Enable Version Control Integration</code>, в выпадающем меню выбираем <strong><code>Git</code></strong></p>
  <figure id="Rrvo" class="m_column">
    <img src="https://img1.teletype.in/files/8b/1e/8b1e7037-0396-4cdf-bda9-cdb647805eee.png" width="977" />
  </figure>
  <p id="K8Np">После активации файлы должны загореться красным цветом, это говорит о том, что они не трекаются гитом. </p>
  <hr />
  <h3 id="gE3i"></h3>
  <h3 id="L0JM" data-align="center">2. .gitignore </h3>
  <p id="UWhh"><code>.gitignore</code> - это специальный файлик, который содержит в себе имена других файлов, которые git не должен отслеживать, которые в последствие не попадут в <strong>GitHub </strong>репозиторий. Примеры таких файлов: логи, папка <code>venv</code>, <code>.idea</code>, <a href="https://t.me/python_web3/44" target="_blank">приватники от кошельков.</a>.</p>
  <p id="WMcb">Создается он во внешней папке проекта, <strong>ни в какие venv мы не лезем и ничего там не трогаем!</strong></p>
  <figure id="dSrh" class="m_column">
    <img src="https://img4.teletype.in/files/3b/41/3b419915-3f62-45ff-8019-bd57d01ca134.png" width="1399" />
  </figure>
  <p id="hZ4Q">При создании <strong>Git</strong> спросит вас, нужно ли отслеживать новый файл, я предпочитаю не трекать такое, ибо зачем. <strong>Cancel</strong></p>
  <p id="5Ppa">По умолчанию в <code>.gitignore</code> заносим две папки:<code> /venv/</code> и <code>/.idea/</code></p>
  <figure id="Ybyn" class="m_column">
    <img src="https://img4.teletype.in/files/36/be/36bec650-86aa-4bd4-9c72-7858c3cec63c.png" width="471" />
  </figure>
  <p id="ikWG">Виртуальное окружение пользователь всегда сможет восстановить через <code>requirements.txt</code>(подробно в Advanced разделе), а .idea ему не к чему, это настройки вашей <strong>IDE</strong>.</p>
  <hr />
  <p id="fUcR"></p>
  <h3 id="hdfl" data-align="center">3. Начинаем отслеживать файлы</h3>
  <p id="NCP4">Но в самом начале вам необходимо перейти в <code>Settings -&gt; Version Control -&gt; Use non-modal commit interface</code>, чтобы отобразить интерфейс как у меня.</p>
  <figure id="e1sM" class="m_column">
    <img src="https://img1.teletype.in/files/48/eb/48eb6630-0587-4d6e-ba55-a80d417932d7.png" width="2159" />
  </figure>
  <p id="Lb9E">В самом низу(как на картинке) есть вкладка <code>git</code>, переходим туда, разворачиваем папку <code>Unversioned files</code> - это те файлы, которые ждут своего добавления в отслеживание, а я напомню, чтобы <strong>Git </strong>начал трекать изменения в файлах, их нужно начать отслеживать(в терминале это команда <code>add</code>).</p>
  <p id="OgsW"><strong>Действуем! </strong>Выбираем все файлы кроме <code>.gitignore</code> и тыкаем <code>Add to VCS</code></p>
  <figure id="43WD" class="m_column">
    <img src="https://img4.teletype.in/files/b8/35/b8356ab2-4662-451c-a7be-ce8aa5c3db99.png" width="755" />
  </figure>
  <p id="t8FB">Файлы должны стать зелеными и переместиться во вкладку <code>Changes</code>, теперь все изменения в этих файлах будут отображаться во вкладке <code>Git </code>в красивом интерфейсе</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="tvtz"><strong>Note: </strong>если вы создаете новый файл, его также нужно добавлять в отслеживание</p>
  </section>
  <hr />
  <p id="0O6i"></p>
  <h3 id="qo7Q" data-align="center">4. Первый Коммит</h3>
  <p id="0b3Z">Начальная структура проекта готова, файлы отслеживаются - самое время сделать первое сохранение! Коммиты - это и есть сохранения, между которыми можно перемещаться в процессе работы. </p>
  <figure id="b7VW" class="m_column">
    <img src="https://img2.teletype.in/files/99/c1/99c149ba-eaa1-497f-be26-b94b7725cabe.png" width="733" />
  </figure>
  <figure id="u9Zp" class="m_column">
    <img src="https://img3.teletype.in/files/2e/65/2e653c9b-24c9-4834-9856-8cda23aa01a7.png" width="1058" />
    <figcaption>Обычно первый коммит называют <strong>init</strong></figcaption>
  </figure>
  <p id="WNwo">В поле <code>Commit Message</code> ваша задача в одну строчку описать, что произошло с проектом с момента последнего коммита, например вы добавили новый модуль, пофиксили баг и тд, первый же коммит по классике называют <code>init</code></p>
  <p id="VddB">Итак, папка <code>Changes </code>должна очиститься, ведь коммит сделан и с тех пор мы не изменили ничего. <strong>Давайте изменим!</strong></p>
  <hr />
  <p id="H7kX"></p>
  <h3 id="Bfid" data-align="center">5. Просмотр изменений, откат</h3>
  <p id="QqPK">В файле math.py я немного изменю код, что безусловно должно отобразиться во вкладке <code>git -&gt; changes:</code></p>
  <figure id="dhqo" class="m_column">
    <img src="https://img3.teletype.in/files/ea/f4/eaf43b25-a513-42ef-90c8-650438398772.png" width="2159" />
  </figure>
  <p id="Nane">Файл загорелся синим цветом, что сигнализирует о том, что есть несохраненные(незакомиченные) изменения. Справа показываются сами изменения, которые можно посмотреть в еще более удобном виде, через <strong>show diff</strong>(отобразить разницу), тут даже можно отображать изменения поэтапно, используя стрелочку вниз:</p>
  <figure id="S4kd" class="m_column">
    <img src="https://img4.teletype.in/files/3b/82/3b82a478-44d8-43bf-a112-97d6c9c2caeb.png" width="716" />
  </figure>
  <figure id="R0Gs" class="m_column">
    <img src="https://img1.teletype.in/files/42/0c/420cf76b-9074-4b83-9bf3-e3f5f007061c.png" width="1558" />
  </figure>
  <p id="tIDD">Если новый код протестирован, работает так, как ожидается, если вы его трижды проверили через <code>show diff</code> - то можно делать следующий коммит по аналогии с прошлым пунктом. Не забудьте добавить <a href="https://techrocks.ru/2019/12/02/writing-good-commit-messages/" target="_blank">качественное описание</a> к коммиту. </p>
  <p id="rfGh">Историю коммитов можно смотреть во вкладке <code>Log </code>окна <code>Git</code></p>
  <p id="E9wh">Более того, если мы где-то накосячили, сломали код, всегда можно воспользоваться откатом - <strong><code>Rollback</code>!</strong></p>
  <figure id="ipas" class="m_column">
    <img src="https://img3.teletype.in/files/eb/cf/ebcfdded-6783-4820-b58f-51336829dda6.png" width="864" />
  </figure>
  <p id="xwYH">Оп! И вкладка <code>Cnanges </code>снова пустая, а код откатился к состоянию последнего коммита.</p>
  <hr />
  <p id="WUGk"></p>
  <h3 id="Bey9" data-align="center">6. Заливаем в репозиторий GitHub(push)</h3>
  <p id="iB0A">До этого все изменения у нас сохранялись локально на компьютере, но пришло время поделиться своим кодом с миром. Для этого существует команда <code>push</code>, в отличие от <code>commit</code>, она сохраняет твой код не локально, а удаленно и отображает все в качестве репозитория(в нашем случае <strong>GitHub</strong>).</p>
  <p id="n88H">Итак, можно поступить следующим образом:</p>
  <figure id="bDNj" class="m_column">
    <img src="https://img1.teletype.in/files/86/c6/86c6eccb-e11d-429d-861e-02c65b4771ed.png" width="1167" />
  </figure>
  <p id="sJ18">Репозиторий автоматически создастся в привязанном гитхаб аккаунте. </p>
  <p id="X9q5">Если репозиторий уже есть, или например вы просто внесли какие-то изменения в существующий проект у себя на пк, и их нужно залить в репозиторий, вы можете использовать эту кнопку:</p>
  <figure id="jetv" class="m_column">
    <img src="https://img2.teletype.in/files/98/5e/985e8477-3200-4448-b230-946c9cbf5f2d.png" width="875" />
  </figure>
  <p id="ZJxQ">тогда существующий репозиторий обновится в соответствии с вашим кодом!</p>
  <p id="o044"><strong>В обоих случаях это выглядит примерно вот так:</strong></p>
  <figure id="2zre" class="m_column">
    <img src="https://img1.teletype.in/files/c1/56/c1565073-8e06-45c7-9b6f-a4f9abb00356.png" width="1407" />
    <figcaption>Репозиторий на <strong>GitHub</strong></figcaption>
  </figure>
  <figure id="72kf" class="m_column">
    <img src="https://img1.teletype.in/files/0d/8a/0d8a2cef-fada-45e7-a3af-68225b2699f5.png" width="2096" />
    <figcaption>Как видите, файлы из<strong> .gitignore</strong> не экспортировались</figcaption>
  </figure>
  <hr />
  <p id="AJdx"></p>
  <h3 id="gN92" data-align="center">7. Подтягиваем проект из Репозитория(pull)</h3>
  <p id="EkLN">Допустим ваш друг решил модифицировать проект и добавил туда пару новых фич, для дальнейшей разработки вам нужно синхронизировать удаленный(репозиторий) и локальные(на твоем пк) проекты. Для этого есть команда <code>pull</code>, рассмотрим на примере:</p>
  <figure id="fpkW" class="m_column">
    <img src="https://img1.teletype.in/files/c8/20/c820010a-43fb-4a00-a5f9-ee9a4da5bb51.png" width="1638" />
  </figure>
  <p id="MSHf">В директории <code>modules </code>кто-то(я) добавил новый файл со своим кодом, естественно у нас на пк его нет, как подтянуть его к нам?</p>
  <p id="8mk1">Переходим обратно в <strong>PyCharm </strong>и тыкаем синюю стрелку:</p>
  <figure id="DLB4" class="m_column">
    <img src="https://img3.teletype.in/files/66/c6/66c6e9ce-cc99-41cc-add0-2ac2d87dc914.png" width="934" />
  </figure>
  <p id="CjKe">Ждем, ждем.. <strong>Готово!</strong> Можете проверять,<code> test_file.py</code> теперь и у вас на пк</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="E3pR">Подтягивание изменений(<code>pull</code>) - обязательное ежедневное начальное действие перед началом работы с проектом, если вы работаете не один, вдруг за ночь ваш коллега что-то добавил/изменил?</p>
  </section>
  <hr />
  <p id="Pmqs"></p>
  <h3 id="VnBN" data-align="center">Промежуточные итоги</h3>
  <p id="9jZi">Итак, во-первых, в течение всего урока я ни разу не открыл терминал, все делается при помощи встроенного интерфейса <strong>PyCharm</strong>, а во-вторых, <strong>базы, которая дана выше хватит для выполнения большинства повседневных задач! </strong></p>
  <p id="NgLy"><strong>Быстренько повторим алгоритм:</strong><br />1) Создаем проект, включаем VCS<br />2) Создаем .gitignore<br />3) Добавляем папки в отслеживание<br />4) Коммитим<br />5) Пушим в репозиторий<br />6) Подтягиваем изменения, если условно за ночь кто-то изменил репозиторий</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="IQHg">На этом можно было бы завершить первую главу гайда, но мы еще не рассказали про ветки, полноценную совместную разработку, клонирование и тд - <strong>Welcome to Advanced! </strong></p>
  </section>
  <hr />
  <p id="6Zy1"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="D1e5" data-align="center">ADVANCED LVL</h2>
  </section>
  <p id="7Sml"><strong>Advanced lvl </strong>- это для тех, кто планирует работать в команде, разрабатывать проект, задействуя ветки, или для тех, кто просто хочет копнуть в работу с git чуть глубже. <strong>Мы рассмотрим:</strong></p>
  <ul id="CqlM">
    <li id="kV6J">Клонирование проекта</li>
    <li id="wDeU">Установку виртуального окружения</li>
    <li id="QDt5">Установку зависимостей</li>
    <li id="3sXW">Создание новых веток</li>
    <li id="8OD7">Слияние веток и pull request</li>
  </ul>
  <p id="jfle"><em>И все по порядку, так, если бы вы пришли в компанию и начинали работать над совместным проектом с нуля.</em></p>
  <hr />
  <p id="061d"></p>
  <h3 id="bRVr" data-align="center">1. Клонируем проект</h3>
  <p id="iyJk"><strong>Клонирование </strong>- это по сути <em>&quot;подтягивание&quot;</em> чужого проекта к себе на ПК для его параллельной доработки. Например если у вашего друга есть <strong>Telegram</strong> бот с открытым кодом в репозитории <strong>GitHub </strong>и он просит вас допилить его, добавив новые фичи, - вы должны сначала склонировать его проект к себе, только потом начать работать. Сразу к примеру:</p>
  <figure id="vHIs" class="m_column">
    <img src="https://img2.teletype.in/files/94/c1/94c13259-ad0e-4a07-b046-feca877d103a.png" width="1653" />
  </figure>
  <p id="iotD">На картинке я взял только что созданный репозиторий Глеба, чтобы добавить туда пару новых модулей, жмем <code>Code -&gt; Local -&gt; HTTPS -&gt;</code> копируем ссылку</p>
  <p id="CUUm">Идем в <strong>PyCharm</strong>, закрываем текущий проект, во вкладке с проектами выбираем <code>Get from VCS</code> и вставляем ссылку, <strong>проект склонирован!</strong></p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="n7Oz"><strong>Но это еще не все! </strong>Если проект использует какие-то сторонние библиотеки, у вас код не запустится, ведь либы находились в папке <strong>venv</strong>, которую в <strong>GitHub </strong>не экспортируют. Обязательно ищем файл <strong>README.md</strong> и изучаем содержимое, только потом переходим к следующему пункту. </p>
  </section>
  <hr />
  <p id="xE8Y" data-align="center"></p>
  <h3 id="hpSZ" data-align="center">2. Установка виртуального окружения</h3>
  <p id="QWFu">Как неоднократно упоминалось выше, при клонировании/импорте проекта, виртуальное окружение не создается, <strong>IDE</strong>, конечно, может нам предложить создать его, но чаще всего приходится делать все ручками, <strong>давайте сделаем!</strong></p>
  <p id="jHBW">Идем в настройки:</p>
  <figure id="8n1q" class="m_column">
    <img src="https://img2.teletype.in/files/d5/14/d5146f97-837e-40c0-adf0-d8427aab48c2.png" width="521" />
  </figure>
  <p id="0gmD"><code>Project: name -&gt; Python Interpreter:</code></p>
  <figure id="daPo" class="m_column">
    <img src="https://img3.teletype.in/files/27/de/27de8ba2-cf3b-4800-b83b-262f7a2f551f.png" width="1454" />
  </figure>
  <p id="mNbk">Добавляем локальный интерпретатор:</p>
  <figure id="FLEc" class="m_column">
    <img src="https://img4.teletype.in/files/f7/bc/f7bc8d3c-fae5-469c-9014-07e97fa5b319.png" width="1591" />
  </figure>
  <p id="8YgG">Новое виртуальное окружение:</p>
  <figure id="BU6D" class="m_column">
    <img src="https://img1.teletype.in/files/0a/7f/0a7f3ebf-404a-4a10-b81b-aca68e2c0608.png" width="1267" />
  </figure>
  <p id="pMAE">Готово! Остается установить в папку venv необходимые зависимости из папки <code>requirements.txt</code> если таковая имеется</p>
  <hr />
  <p id="dH3Q"></p>
  <h3 id="yG0L" data-align="center">3. Установка зависимостей(<code>requirements.txt</code>)</h3>
  <p id="Vu6A">Если клонированный проект использует какие-то сторонние библиотеки, например <strong>web3</strong>, <strong>aiogram </strong>и тд, вы обязательно о них узнаете, когда найдете файл <code>requirements.txt</code>, его необходимо &quot;установить&quot;:</p>
  <p id="VqVv">Тут все просто, IDE сама предложит нам установить зависимости, не противимся и жмем <code>install requirements</code>: </p>
  <figure id="vlBm" class="m_column">
    <img src="https://img4.teletype.in/files/bd/dc/bddc6c0e-0bc9-4b6d-a0de-c269eb61e331.png" width="1575" />
  </figure>
  <p id="w2MD">Ждем несколько секунд.. <strong>Готово!</strong> Можно работать с проектом. </p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="mByX"><strong>Note: </strong>снизу есть небольшой прогрессбар, на котором обычно отображаются все сетевые процессы, например установка библиотек, push в репозиторий и тд</p>
    <figure id="AIbQ" class="m_original">
      <img src="https://img1.teletype.in/files/41/58/4158012a-f33d-4499-a466-f9d48146226f.png" width="564" />
    </figure>
  </section>
  <hr />
  <p id="pPel"></p>
  <h3 id="JLao" data-align="center">4. Создаем новую ветку</h3>
  <p id="H1Vm">Начиная с этого раздела мы постепенно переходим к работе с ветками. Обычно, если над проектом работает несколько человек, каждый кодер под каждую отдельную задачу создает свою собственную ветку(которая по началу является полной копией основной). Основная ветка чаще всего называется <code>master </code>веткой, туда заливаются(сливаются) изменения только после тщательного ревью остальных кодеров. Сливание основной ветки с отдельной называется <code>merge</code></p>
  <section style="background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="zf3C"><strong>Теоретический пример: </strong>Мы с Глебом работаем над созданием бота в TG, мы делим задачи между собой и в один момент я решил поручить Глебу реализовать авторизацию в боте. </p>
    <p id="8LRK">Глеб идет и создает отдельную ветку, называя ее к примеру: <code>auth</code>. Она изначально является копией мастер ветки. Далее реализовывает функционал, проверяет все, комиттит и пушит в репозиторий.<br /><br />Естественно, прежде чем репозиторий обновится, изменения Глеба должны пройти ревью, иначе любой бы смог вносить любые правки в любые проекты, тем самым просто ломая исходный код. </p>
    <p id="mbis">Если ревью пройдено ветка Глеба и <code>master </code>ветки сливаются(мержатся) в одну, то есть изменения ветки Глеба вносятся в <code>master</code>(основную) ветку</p>
    <p id="BcQT">Еще раз, <code>master </code>ветка - это то, что видит конечный пользователь продукта, поэтому она всячески защищена от шальных изменений. </p>
  </section>
  <p id="Cb3y"> А теперь по порядку,<strong> создадим ветку!</strong></p>
  <figure id="X5dn" class="m_column">
    <img src="https://img3.teletype.in/files/a3/c4/a3c45c2d-8897-4710-ab02-03804b391413.png" width="636" />
  </figure>
  <figure id="n9W0" class="m_column">
    <img src="https://img1.teletype.in/files/48/92/48923f20-5ef6-4112-a8e3-aa5739fb5403.png" width="125" />
  </figure>
  <p id="jeA0">Ветка должна смениться с main(или master) на только что созданную.<strong> Ветка создана!</strong></p>
  <hr />
  <p id="rDkY"></p>
  <h3 id="oRpl" data-align="center">5. Pull-request</h3>
  <p id="ix32">Итак, после создания ветки я добавил новый модуль или же внес изменения в код, которые хочу залить в основную ветку:</p>
  <figure id="npCm" class="m_column">
    <img src="https://img3.teletype.in/files/6a/49/6a49dc33-b2bf-4967-aa60-f310f3092c02.png" width="2154" />
  </figure>
  <p id="YEs9">Для начала, я, конечно же, все проверяю и делаю <strong>коммит</strong>. Если задача в целом реализована - то вы можете сразу же сделать <strong>push</strong>, нажав кнопку <code>commit and push:</code></p>
  <figure id="tWt0" class="m_column">
    <img src="https://img2.teletype.in/files/d4/fc/d4fc1507-8d4f-439c-9e43-97d7d139ac3c.png" width="1128" />
  </figure>
  <p id="b4Yf">На странице GitHub отобразится специальное окно, говорящее вам о том, что вам нужно создать <strong>pull request </strong>-это запрос к другим участникам проекта с просьбой посмотреть ваш код, проверить на работоспособность и правильность, вам могут выносить замечания, которые вы должны будете исправлять, а также могут сразу принять ваш реквест, тогда ваша ветка автоматически сольется с основной</p>
  <figure id="dgdK" class="m_column">
    <img src="https://img2.teletype.in/files/5d/13/5d1361e5-acc6-49c7-89d2-bf22461772b6.png" width="1826" />
  </figure>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Yf0M"><strong>Note:</strong> в ряде случаев, для мерджа необходимы &quot;одобрения&quot; нескольких членов команды, в виде лайков. Если набралось определенное кол-во, например 2, ваш код автоматом сливается</p>
  </section>
  <p id="tsg3"><strong>Создаем pull request!</strong></p>
  <figure id="wmE0" class="m_column">
    <img src="https://img2.teletype.in/files/df/d0/dfd0b961-5cc2-4efc-98e2-24a35e8983d5.png" width="1498" />
  </figure>
  <p id="bzhQ">Примерно так это выглядит, когда Глеб зайдет и проверит мой код(это его проект), мои изменения автоматически отобразятся в репозитории. </p>
  <p id="xZyp">Как видите тут есть вкладки с <strong>коммитами</strong>, подобие <strong>show diff</strong> и многое другое.</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="3zFp">Итак, изменения приняты, master ветка обновлена, что дальше? </p>
  </section>
  <hr />
  <p id="xh4s" data-align="center"></p>
  <h3 id="04gm" data-align="center">6. Удаление ветки и переход в master branch</h3>
  <p id="QFLH">Вероятнее всего, после мержа веток ваша ветка будет удалена, но удалена удаленно, то есть у вас на ПК она останется. <strong>Что делаем?</strong></p>
  <p id="atfD">Для начала нам нужно перейти на <code>master</code> ветку:</p>
  <figure id="lpla" class="m_column">
    <img src="https://img2.teletype.in/files/98/18/98183b58-dbce-4781-9f0a-7539fd0355b0.png" width="898" />
  </figure>
  <p id="5l5P">Но это лишь старый вариант ветки, ведь она была изменена, подтягиваем изменения(<code>pull</code>):</p>
  <figure id="sLzN" class="m_column">
    <img src="https://img4.teletype.in/files/70/bc/70bc60b4-b970-419a-b729-e402221a158a.png" width="1531" />
  </figure>
  <p id="2pOF">Ветки в репозитории и у нас синхронизированы, пришло время удалить прошлую ветку за ненадобностью: </p>
  <figure id="iTHc" class="m_column">
    <img src="https://img3.teletype.in/files/a6/12/a6128398-49fd-4c30-a3af-f3fe07c24bd1.png" width="863" />
  </figure>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="26Av"><strong>VSЁ! </strong>И так по кругу! Пришел новый таск, создали новую ветку, реализовали функционал, закоммитили, вызвали <code>pull requiest</code>, залили изменения в <code>master </code>ветку..</p>
  </section>
  <hr />
  <p id="m15B"></p>
  <h3 id="3Jkq" data-align="center">Промежуточные итоги</h3>
  <p id="lVzn">Итак, в рамках<strong> Advanced LVL </strong>вы должны были научиться работать в команде используя <strong>Git </strong>и <strong>Pycharm </strong>не написав ни единой строчки кода в терминале! Теперь вы можете разрабатывать единый проект вместе с вашим товарищем, удобно делить задачи и не мешать друг другу! </p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="eYjY">На этом <strong>я(Заядлый)</strong> с вами прощаюсь, передаю перо <strong>Глебу</strong>, чтобы он рассказал вам о том, как работать с <strong>Git </strong>через терминал(не дай бог), ситуации бывают разные, например слабое железо для <strong>PyCharm</strong>.. </p>
  </section>
  <hr />
  <p id="GhhP"></p>
  <p id="oXGE"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="xd0e">ГЛАВА 2: Git &amp; GitHub через Терминал / (by глеб)</h2>
  </section>
  <section style="background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="GqVX">Всем привет, в этой главе я(Глеб) познакомлю вас с командами git и научу создавать ваш первый репозиторий именно через терминал!</p>
    <p id="TY4Y"><strong>Почему важно уметь работать с Git в терминале?</strong></p>
    <ul id="TlwK">
      <li id="wkxu">В первую очередь - это практика, которая является самым важным базисом в программировании.</li>
      <li id="nTUB">Банальный базовый инструмент, которым должен владеть каждый пользователь.</li>
      <li id="KKGJ">Возможности командной строки - выполнение любых изменений, проверка и устранение любых неисправностей, тестирование кода, проверка логов системы и безопасности и многое другое.</li>
      <li id="0nNX">Четкая последовательность действий. Используя командную строку вы всегда получаете однозначный ответ, отслеживаете порядок действий и управляете абсолютно всеми командами.</li>
      <li id="fcfP">Минимальные затраты системных ресурсов для работы по сравнению с IDE(вдруг у вас PyCharm не тянет)</li>
    </ul>
    <p id="cF6Z"><strong>Что вам нужно для начала:</strong></p>
    <ol id="MFwn">
      <li id="gLo4">Установленный Git</li>
      <li id="Wcdv">Аккаунт на GitHub</li>
      <li id="aQ1p">Командная строка </li>
    </ol>
  </section>
  <hr />
  <p id="mVrS"></p>
  <h3 id="yIce" data-align="center">1. Первоначальная настройка Git</h3>
  <blockquote id="3cKC">Note: Некоторые команды у меня могут отличаться от ваших, если вы работаете не на Windows, гуглите</blockquote>
  <p id="PXpK"></p>
  <ul id="SV91">
    <li id="QEGl">Открываем Terminal и проверяем установленный Git и его версию с помощью команды <code>git -v</code></li>
  </ul>
  <figure id="gio1" class="m_column">
    <img src="https://img3.teletype.in/files/6d/e3/6de35bf4-94b2-435d-9532-d4ae84262282.png" width="227" />
    <figcaption>                                                         самая актуальная версия на момент написания статьи</figcaption>
  </figure>
  <ul id="so7J">
    <li id="xZlN"> Настраиваем имя и привязываем ваш Git к аккаунту на GitHub:</li>
  </ul>
  <p id="Iflr">          <code>git config --global user.name &quot;ваше имя&quot;</code></p>
  <p id="qGma">          <code>git config --global user.email ваша почта аккаунта GitHub</code></p>
  <blockquote id="Jrpn" data-align="center">                  Опция <code>--global</code> значит, что имя и почта будут использоваться для всех ваших действий в Git.</blockquote>
  <p id="6jyq">Список самых основных команд для удобной работы с терминалом <a href="https://htmlacademy.ru/blog/soft/windows-command-line" target="_blank">здесь</a>, а мы приступаем к созданию первого Git репозитория. </p>
  <hr />
  <p id="lzkU"></p>
  <h3 id="mWFn" data-align="center">2. Инициализация нового репозитория</h3>
  <ul id="OZmw">
    <li id="N26Q">Для начала нам необходимо создать папку, где будут хранится все наши проекты. Сделать это можно с помощью команды <code>mkdir название папки</code></li>
    <li id="MfhX">Переходим в только что созданную папку с помощью <code>cd название папки</code></li>
    <li id="7CLX">Прописываем команду <code>git init</code></li>
  </ul>
  <figure id="8Qil" class="m_column">
    <img src="https://img3.teletype.in/files/2e/17/2e17b34f-e241-479e-a408-cdb0c4bd7a96.png" width="549" />
    <figcaption><strong>                                          В командной строке вы должны увидеть результат создания репозитория</strong></figcaption>
  </figure>
  <blockquote id="spVa">Проверить новую папку можно с помощью <code>cd .git</code></blockquote>
  <p id="qoL4">Вот так в пару простых шагов мы создали папку для наших будущих проектов и  первый пустой репозиторий, но перед переходом к наполнению репозитория и разбора функционала, я хочу остановится и рассказать про: <em>области Git</em> и <em>статусы отслеживаемых файлов</em>. </p>
  <hr />
  <p id="hoRr"></p>
  <h3 id="6duo" data-align="center">3. Области Git</h3>
  <p id="JxJd"><strong>Области Git</strong> - это разделы, в которых гит отслеживает файлы, назначение которых, важно понимать для работы в терминале.</p>
  <figure id="BJWm" class="m_column">
    <img src="https://img3.teletype.in/files/61/68/616848d2-03b9-4bc2-bfbb-866ec09f2731.png" width="660" />
    <figcaption>                                                 демонстарция процессов перехода отслеживания объектов</figcaption>
  </figure>
  <ol id="uEV1">
    <li id="KuGr"><strong>Working directory</strong> - файловая система вашего компьютера.</li>
    <li id="MTBB"><strong>Staging area</strong>(индекс) - область подготовленных файлов, хранит содержание следующего коммита. </li>
  </ol>
  <p id="uJbL">    3. <strong>Repository </strong>- хранит все версии файлов вашего проекта и ваши коммиты.</p>
  <hr />
  <p id="ljRm"></p>
  <h3 id="UitW" data-align="center">4. Статусы отслеживания файлов</h3>
  <p id="sNHG">При работе в терминале и в частности для написания коммитов, нам необходимо понимать в каком статусе находится файл. Чтобы увидеть состояние файлов, напишите в консоли <code>git status</code></p>
  <figure id="qkyh" class="m_original">
    <img src="https://img3.teletype.in/files/2f/1e/2f1e8152-3264-44fe-8c04-feb36a1123c5.png" width="529" />
    <figcaption>                                                                     Файлы и коммиты мы еще не добавляли</figcaption>
  </figure>
  <ul id="4Pw0">
    <li id="Qcjl"><strong>untracked </strong>- новые файлы в рабочей директории, нет в области staging area и repository.</li>
    <li id="M6MI"><strong>staged </strong>- файлы, которые подготовлены для сохранения изменений и находятся staging area.</li>
    <li id="8wnj"><strong>unmodified </strong>- файлы синхронизованы между working directory и repository, файл имеет самую актуальную версию во всех разделах.</li>
    <li id="PVuG"><strong>modified </strong>- файлы, находящиеся в рабочей директории, где находится более новая версия файла по сравнению с хранящейся в репозитории или в индексе.</li>
  </ul>
  <p id="ORYi">Чтобы посмотреть сами изменения, а не изменённые файлы, можно использовать следующие команды:</p>
  <ul id="bMtN">
    <li id="ZZml"><code>git diff</code> - сравнение рабочей директории с индексом.</li>
    <li id="NqKR"><code>git diff --staged</code>- сравнение области индекса с репозиторием.</li>
  </ul>
  <hr />
  <p id="6TaK"></p>
  <h3 id="OxxP" data-align="center">5. .gitignore</h3>
  <blockquote id="GJ1e">Напомню, что файлы &quot;.gitignore&quot; используются для игнорирования личных файлов разработчика, они не попадают на удаленный репозиторий.</blockquote>
  <p id="KNIc">Игнорируемые элементы отслеживаются в специальном файле <code>.gitignore</code>, который регистрируется в корневом каталоге репозитория. В <strong>Git</strong> нет специальной команды для указания игнорируемых файлов: вместо этого необходимо вручную отредактировать файл <code>.gitignore</code>, чтобы указать в нем новые файлы, которые должны быть проигнорированы. Файлы <code>.gitignore</code> содержат шаблоны, которые сопоставляются с именами файлов в репозитории для определения необходимости игнорировать эти файлы. Для того, чтобы легче воспринять этот материал, я советую зайти на данный <a href="https://www.atlassian.com/ru/git/tutorials/saving-changes/gitignore" target="_blank">сайт</a> и просмотреть все шаблоны<br /><br />Для игнорирования закомиченного файла, для которого ранее был сделан коммит, необходимо удалить этот файл из репозитория, а затем добавить для него правило в <code>.gitignore</code> . Используйте команду <code>git rm</code> с параметром <code>--cached</code>, чтобы удалить этот файл из репозитория, но оставить его в рабочем каталоге как игнорируемый файл.</p>
  <figure id="ZgtR" class="m_column">
    <img src="https://img1.teletype.in/files/c0/14/c014d626-3fa0-4591-bced-cd4cd2dea294.png" width="568" />
  </figure>
  <hr />
  <p id="cKIV"></p>
  <h3 id="c4MQ" data-align="center">6. Создание файлов и папок в проекте</h3>
  <p id="jnfp">Теперь вы получили необходимые базовые знания о статусе файлов и областях в Git, и мы можем продвинуться дальше и научиться работать с самим проектом. </p>
  <p id="r9M9">Перейдём к созданию проекта для большей наглядности работы коммитов, перемещением между версиями проекта и проверки статусов файла. Для этого опять вернемся в терминал и напишем пару команд.</p>
  <ul id="KVnW">
    <li id="A0J7">Переходим в терминал и заходим в ранее созданную папку под проекты, где хранится наш созданный репозиторий.</li>
    <li id="uVPc">Для создания файла в терминале введите: <code>echo &quot;текст&quot; &gt; название файла.txt </code></li>
  </ul>
  <figure id="MbSk" class="m_column">
    <img src="https://img3.teletype.in/files/6c/1c/6c1cc13c-ea72-4b9a-b2a7-6f7e5175b5b9.png" width="462" />
    <figcaption>                                                            Создали файл  и проверили его наличие в папке </figcaption>
  </figure>
  <figure id="GxPZ" class="m_column">
    <img src="https://img1.teletype.in/files/0d/9b/0d9b70fb-680b-4f30-a360-eaf0ecb95343.png" width="383" />
    <figcaption>                                                         Текст файла можно прочитать с помощью команды<code> type</code></figcaption>
  </figure>
  <ul id="9X9C">
    <li id="nw7R">Теперь создадим папку и пару дополнительных файлов в ней для наблюдения их состояний. Для создания файлов используем команду <code>echo &quot;текст&quot; &gt; название файла.txt</code>, а для создания папки используем <code>mkdir название папки</code></li>
  </ul>
  <figure id="hqtQ" class="m_column">
    <img src="https://img2.teletype.in/files/da/d9/dad95730-5d95-483d-a92b-30d96c5f1e80.png" width="623" />
    <figcaption>                                            Создал папку и в ней создал 3 новых текстовых документа</figcaption>
  </figure>
  <figure id="zRmU" class="m_column">
    <img src="https://img2.teletype.in/files/1d/8e/1d8e7a0b-b7d2-4a40-8008-b41c99ac1b07.png" width="431" />
    <figcaption>                                В итоге мы получили 1 папку с 3 файламми и 1 файл, который лежит в корне проекта</figcaption>
  </figure>
  <figure id="53D0" class="m_column">
    <img src="https://img2.teletype.in/files/d8/f1/d8f1d9ef-6df8-4ae2-9eca-84ef9636d0fe.png" width="835" />
    <figcaption>                                                                                    Вид в проводнике</figcaption>
  </figure>
  <ul id="yByW">
    <li id="UwFv">Теперь мы можем проверить статус наших файла с помощью команды <code>git status</code></li>
  </ul>
  <figure id="tMK5" class="m_column">
    <img src="https://img2.teletype.in/files/df/32/df32cc30-b31f-4aa8-be9a-e6ce87959113.png" width="637" />
    <figcaption>                                                                     Папка и файл имеют статус &quot;untracked&quot;</figcaption>
  </figure>
  <p id="7Lvl">Таким образом мы наполнили наш локальный репозиторий и можем приступать к коммитам.</p>
  <hr />
  <p id="VcJf"></p>
  <h3 id="owRd" data-align="center">7. Создание первого коммита</h3>
  <p id="3qTW">Для написания первого коммита необходимо подготовить файлы и перенести их в индекс.</p>
  <ul id="fzNN">
    <li id="tLRn">Добавим файлы <strong>Codimcrypty.txt</strong> и<strong> Admins.txt</strong> в индекс с помощью команды <code>git add</code></li>
  </ul>
  <figure id="GM0i" class="m_column">
    <img src="https://img4.teletype.in/files/7d/aa/7daaf2a0-10d0-4f4a-bb80-9497e3b08982.png" width="589" />
    <figcaption>                                                                       подготовленные файлы для  commit</figcaption>
  </figure>
  <ul id="IIzO">
    <li id="L06R">Напишем наш первый коммит для этих файлов с помощью команды <code>git commit -m &quot;текст&quot; </code></li>
  </ul>
  <figure id="JhPA" class="m_column">
    <img src="https://img4.teletype.in/files/3c/dd/3cdd1572-6e61-465e-ae8b-71cacc4d5610.png" width="490" />
    <figcaption>                                                        Изменения 2 файлов и добавление 2 новых строк</figcaption>
  </figure>
  <p id="vad0">Каждый коммит содержит уникальную контрольную сумму -<em> идентификатор/хеш</em>, который <strong>Git</strong> использует, чтобы ссылаться на коммит. Чтобы отслеживать историю, <strong>Git </strong>хранит указатель <strong>HEAD</strong>, который указывает на первый коммит, увидеть это можно с помощью команды <code>git log</code></p>
  <figure id="AoaN" class="m_column">
    <img src="https://img4.teletype.in/files/38/01/38013e12-a924-4cce-91a3-f3ea0cceafb4.png" width="561" />
    <figcaption>                                                                 Показывает хеш, дату, автора и сам коммит</figcaption>
  </figure>
  <blockquote id="RPCp">Команда <code>git log</code> используется для просмотра истории коммитов, начиная с самого свежего и уходя к истокам проекта.</blockquote>
  <p id="l1DU"><strong>Git </strong>распределяет все объекты по папкам и подпапкам исходя из <em>хеша</em> и найти эту папку можно по первым двум символам хеша. Для этого необходимо перейти в скрытую папку <strong>.git</strong> и <strong>objects</strong> и далее выбрать нужную вам папку.</p>
  <figure id="DVkQ" class="m_column">
    <img src="https://img3.teletype.in/files/e3/68/e3683430-a9b0-4b0b-afa4-c20908627379.png" width="641" />
    <figcaption>                                                                            в моем случае это папка 6b</figcaption>
  </figure>
  <p id="pgJZ">На данном этапе мы уже: создали и наполнили репозиторий, создали структуру, отработали на практики все пройденные теоретические знания и написали наш первый коммит. Теперь мы можем приступать к работе с изменениями проекта и написанием второго коммита.</p>
  <hr />
  <p id="jTds"></p>
  <h3 id="zWBW" data-align="center">8. Написание второго коммита</h3>
  <p id="xaPl">Создадим новую папку, добавим туда файл, добавим их в индекс и напишем второй коммит для практической наглядности перемещения между версиями проекта.</p>
  <figure id="xwrJ" class="m_column">
    <img src="https://img1.teletype.in/files/81/ea/81eae8f2-1366-4004-9ef5-975d451f2f30.png" width="453" />
    <figcaption>                                                                                 новая папка KurimKrypty</figcaption>
  </figure>
  <figure id="kbzD" class="m_column">
    <img src="https://img1.teletype.in/files/c1/70/c17078fe-ca46-4bf1-8040-ec52a11326d1.png" width="475" />
    <figcaption>                                                      Дали второй коммит новому файлу в новой папке</figcaption>
  </figure>
  <hr />
  <p id="tIGz"></p>
  <h3 id="1IWS" data-align="center">9. Перемещение между версиями</h3>
  <p id="1NIN">Чтобы переместиться между версиями проекта нам прежде всего необходимо перемести <em>указатель HEAD</em> на первый коммит.</p>
  <ul id="iVHr">
    <li id="o8bQ">Для этого скопируем часть хеша нашего первого коммита и пропишем команду <code>git checkout часть хеша</code></li>
  </ul>
  <figure id="FIYC" class="m_column">
    <img src="https://img2.teletype.in/files/54/59/5459b673-5295-41ad-b6ce-6475c98739c3.png" width="615" />
    <figcaption>                                                              как видим HEAD успешно переместился </figcaption>
  </figure>
  <ul id="4NwA">
    <li id="IWqm">Введем команду <code>dir</code> для просмотра всех объектов папки и можем заметить отсутствие недавно созданной папки KurimKrypty. Это произошло из-за возврата на 1 версию нашего проекта и Git изменил содержимое рабочей директории.</li>
  </ul>
  <figure id="SlIR" class="m_column">
    <img src="https://img3.teletype.in/files/2d/ad/2dadf7b9-c41e-45f9-a05c-a0b887f7f51f.png" width="456" />
    <figcaption>                                                          HEAD ссылается на коммит а не  мастер ветку</figcaption>
  </figure>
  <blockquote id="0iL8">Для возврата на master ветку используем команду <code>git checkout master</code></blockquote>
  <p id="mTc0">Мы закончили часть с обучением создания репозитория и коммитов файлов, теперь можем переходить к следующей невероятно важной теме.</p>
  <hr />
  <p id="sixw"></p>
  <h3 id="pB3j" data-align="center">10. Ветки в Git и работа с ними</h3>
  <blockquote id="Cfdb"><strong>Ветка</strong> - ссылка на коммит</blockquote>
  <p id="SlZq">Ветвление - это возможность работать над разными версиями проекта. Вместо одного списка с упорядоченными коммитами история будет расходиться в определённых точках. Каждая ветвь содержит указатель HEAD на последний коммит, что позволяет без лишних затрат создать много веток. Ветка по умолчанию называется <em>master/main.</em></p>
  <p id="BALu">Итак, есть общий указатель <strong>HEAD</strong> и HEAD для каждой ветки. Переключение между ветками предполагает только перемещение <strong>HEAD</strong> в HEAD соответствующей ветки.</p>
  <figure id="eYFU" class="m_column">
    <img src="https://img2.teletype.in/files/d5/b5/d5b55546-6d52-45d9-b82a-d7ebddcaed49.png" width="660" />
  </figure>
  <h3 id="eZ5W">Команды для работы с ветками</h3>
  <ul id="UQoK">
    <li id="UM8T"><code>git branch имя ветки</code> - создаёт новую ветку с HEAD, указывающим на <strong>HEAD</strong>. Если не передать аргумент <code>&lt;имя ветки&gt;</code>, то команда выведет список всех локальных веток.</li>
    <li id="Aok9"><code>git checkout имя ветки</code> - переключается на эту ветку. Можно передать опцию <code>-b</code>, чтобы создать новую ветку перед переключением.</li>
    <li id="TZAq"><code>git branch -d имя ветки</code> - удаляет ветку.</li>
    <li id="yGgk"><code>git branch</code> - отображает список всех ветвей в локальном репозитории.</li>
    <li id="0ZNG"><code>git branch -m новое имя ветки</code> - переименовывает текущую ветку.</li>
  </ul>
  <figure id="dwCV" class="m_column">
    <img src="https://img1.teletype.in/files/07/5f/075f6522-3e78-4749-9054-74a89d958a13.png" width="376" />
    <figcaption>                                                                 Cоздал новую ветку и переключился на нее</figcaption>
  </figure>
  <hr />
  <p id="c6lT"></p>
  <h3 id="DFTr" data-align="center">11. Удаленные репозитории</h3>
  <p id="KRj2">Чтобы иметь возможность совместной работы над каким-либо проектом, необходимо знать как управлять удалёнными репозиториями. Удалённые репозитории - репозитории, хранящиеся на сервере. Я использую Github, как самую распространённую и удобную платформу и все мои будущие проекты будут публиковаться именно там.</p>
  <p id="zi6u">При использовании команды <code>git remote url репозитория</code> мы добавляем удаленный репозиторий, который находится по указанному адресу и которому присваивается имя origin.</p>
  <blockquote id="htfp">Origin - имя удаленного репозитория по-умолчанию.</blockquote>
  <p id="6SjX">Наиболее употребляемые команды:</p>
  <ul id="BJnj">
    <li id="QU07"><code>git remote add имя url</code> - добавляет удалённый репозиторий с заданным именем.</li>
    <li id="UQuk"><code>git remote remove имя </code>- удаляет удалённый репозиторий с заданным именем.</li>
    <li id="eKdY"><code>git remote rename старое имя новое имя</code> - переименовывает удалённый репозиторий.</li>
    <li id="5vmd"><code>git remote set-url имя url</code> - присваивает репозиторию с именем новый адрес;</li>
    <li id="frvJ"><code>git remote show имя</code>- показывает информацию о репозитории.</li>
  </ul>
  <p id="JPok">Таким образом несколько людей могут запрашивать изменения с сервера, делать изменения в локальных копиях и затем отправлять их на удалённый сервер, что позволяет взаимодействовать друг с другом в пределах одного репозитория.</p>
  <hr />
  <p id="eniY"></p>
  <h3 id="JA9m" data-align="center">12. Связь локального репозитория с удаленным </h3>
  <p id="0u5W">Теперь когда у нас есть свой локальный репозиторий и мы разобрались с удаленными репозиториями мы можем их связать и залить готовый репозиторий на свой GitHub.</p>
  <ul id="iszh">
    <li id="uM9O">Переходим в наш ранее созданный аккаунт GitHub и переходим в раздел создания нового репозитория.<br /></li>
  </ul>
  <figure id="fJmx" class="m_column">
    <img src="https://img3.teletype.in/files/a3/43/a343e8ad-3b41-433f-b0ec-4e44be39cdfd.png" width="1593" />
  </figure>
  <ul id="UQaB">
    <li id="e5ha"> Создаем новый пустой репозиторий, выбираем название проекта и настраиваем под себя</li>
  </ul>
  <figure id="Gu6n" class="m_column" data-caption-align="center">
    <img src="https://img1.teletype.in/files/80/cc/80cc0aef-b1c7-4ae4-807e-17917ab68571.png" width="950" />
    <figcaption>                 Я ничего не менял</figcaption>
  </figure>
  <ul id="1ebJ">
    <li id="LB7W">Пролистываем создавшийся репозиторий вниз до указаний о пуше через терминал</li>
  </ul>
  <figure id="QBsj" class="m_column" data-caption-align="center">
    <img src="https://img2.teletype.in/files/9f/0b/9f0b77a4-9137-4999-b289-1b8b448cc64a.png" width="1298" />
    <figcaption> Нам нужны эти 3 строки</figcaption>
  </figure>
  <blockquote id="agW2"><code>git remote add origin</code> - добавляет удаленный репозиторий.<br /><code>git branch -M main</code> - рекомендация от GitHub по названию главной ветки.<br /><code>git push -u origin main</code> - загрузить изменения с локального на удаленный.</blockquote>
  <figure id="EwC9" class="m_column" data-caption-align="center">
    <img src="https://img4.teletype.in/files/35/84/358401f9-29c5-4580-bc20-4137ce3997b2.png" width="764" />
    <figcaption>Результат выполнения в терминале</figcaption>
  </figure>
  <figure id="rZeM" class="m_column" data-caption-align="center">
    <img src="https://img4.teletype.in/files/7f/01/7f01133e-b026-4037-b030-2002f66ff0d0.png" width="1230" />
    <figcaption>Результат на GitHub</figcaption>
  </figure>
  <hr />
  <p id="ALJX"></p>
  <h3 id="aj7e" data-align="center">Промежуточные итоги</h3>
  <p id="KbHR">С гитом я знаком еще с универа, и на 1 курсе нас заставляли работать именно в терминале, ведь надо было подогнать всех под один стандарт. При самостоятельном изучении у вас всегда есть выбор где и как вы хотите работать, но терминал может стать для вас отправной точкой оттачивания практических навыков выполнения команд.</p>
  <hr />
  <p id="2Dh2"></p>
  <h3 id="fdlh" data-align="center">Справочник по git командам</h3>
  <blockquote id="PGeV">Тут собраны самые основные и наиболее часто используемые git команды в алфавитном порядке</blockquote>
  <ol id="COAM">
    <li id="lro2"><code>git add</code> - добавляет файлы в индекс git.</li>
    <li id="urpl"><code>git archive</code> - создает архив из ветки.</li>
    <li id="hYUz"><code>git bisect</code> - бинарный поиск коммита, который привел к ошибке.</li>
    <li id="SrT3"><code>git branch</code> - работа с ветками: просмотр, создание, удаление.</li>
    <li id="PbG0"><code>git bundle</code> - позволяет упаковать в бинарный файл то, что было бы отправлено в репозиторий с помощью git push. </li>
    <li id="NDWx"><code>git checkout</code> - переключает нас на разные ветки репозитория и восстанавливает файлы в рабочей ветке (приводит содержимое в соответствие с удаленным репозиторием). Также позволяет создать новую ветку. </li>
    <li id="5FCA"><code>git cherry-pick</code> - из нескольких коммитов собирает один и применяет его в текущей ветке.</li>
    <li id="GTVz"><code>git clean</code> - удаляет файлы, которые не отслеживаются в репозитории.</li>
    <li id="X3TI"><code>git clone</code> - команда клонирует репозиторий в новую директорию.</li>
    <li id="wFLL"><code>git config</code> - команда позволяет работать с настройками репозитория, читать их или задавать новые значения опциям.</li>
    <li id="Novm"><code>git commit</code> - добавляет описание к файлам.</li>
    <li id="Qcwe"><code>git diff</code> - сравнение содержимого (фиксами, деревьями и так далее).</li>
    <li id="7dBP"><code>git fetch</code> - скачивание объектов и ссылок из другого репозитория. Обратите внимание, что данная команда скачивает только информацию об изменениях, но не сами файлы.</li>
    <li id="XxKL"><code>git gc</code> - чистка репозитория от устаревших и временных данных.</li>
    <li id="27rm"><code>git gui</code> - портативный графический интерфейс к Git.</li>
    <li id="Kxmq"><code>git init</code> - команда используется для инициализации проекта, как репозитория git.</li>
    <li id="ZVTC"><code>git log</code> - показывает журналы коммитов.</li>
    <li id="ycBN"><code>git merge</code> - объединяет ветки.</li>
    <li id="XHkS"><code>git mv</code> - перемещает или переименовывает файл.</li>
    <li id="zLEI"><code>git notes</code> - создать примечание для объекта.</li>
    <li id="MRgK"><code>git pull</code> - скачиваем файлы из другого репозитория.</li>
    <li id="Fk0L"><code>git push</code> - отправляет файлы на сервер. </li>
    <li id="KxsG"><code>git rebase</code> - слияние веток с заменой всех коммитов на один единственный. В итоге мы получаем ветку, которая, как будто, только что была создана заново.</li>
    <li id="Bf5z"><code>git reset</code> - сбрасывает состояние изменений для текущей ветки. Позволяет без объединений заменить файлы при выполнении git pull<a href="https://www.dmosk.ru/miniinstruktions.php?mini=git#commands-pull" target="_blank">.</a></li>
    <li id="RoYD"><code>git restore</code> - восстановление файлов рабочего дерева. А именно, приводит содержимое в соответствие с удаленным репозиторием.</li>
    <li id="eGg6"><code>git remote add</code><strong> - </strong>команда используется для добавления или подключения к удаленному репозиторию.</li>
    <li id="uQLG"><code>git remote -v</code> - команда используется для просмотра подключенных удаленных репозиториев.</li>
    <li id="vddB"><code>git rm</code> - удаляет файлы из ветки и индекса.</li>
    <li id="6LLN"><code>git shortlog</code> - выполняет группировку всех коммитов по автору.</li>
    <li id="3Gjc"><code>git show</code> - показывает объект в удобочитаемом виде.</li>
    <li id="iNdQ"><code>git status</code> - команда используется для просмотра статуса файлов в вашем локальном репозитории.</li>
    <li id="W2xt"><code>git switch</code> - позволяет переключаться между ветками.</li>
    <li id="gDng"><code>git tag</code> - работа с тегами.</li>
    <li id="eJxz"><code>git worktree</code> - управление несколькими рабочими ветками.</li>
  </ol>
  <hr />
  <p id="8orT"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="aJBL" data-align="center">ADVANCED LVL</h2>
  </section>
  <p id="4EJK">В моей части, advanced level представляет из себя знания, которые упростят вам работу с гитом и его функциями, но не являются первостепенными для создания первого проекта. Читайте, набирайтесь опыта и задавайте вопросы в L1 чате.</p>
  <hr />
  <p id="at1T"></p>
  <h3 id="QWYk" data-align="center">1. Слияние веток</h3>
  <p id="0yH6">Данная вещь необходима для работы в команде и позволяет разработчикам совместить свои рабочие ветки в одну, после отладки функционала разных частей кода.</p>
  <p id="Dr5h">Слиние, включает в себя создание нового коммита, который основан на общем коммите - предке двух ветвей и указывает на оба HEAD в качестве предыдущих коммитов.</p>
  <figure id="7ScQ" class="m_column">
    <img src="https://img1.teletype.in/files/c2/53/c2532b9a-935a-4b50-bfad-5d30e98c38ad.png" width="660" />
  </figure>
  <blockquote id="paZ9">Feature branch(тематическая ветка) - ветка из которой мы переносим готовый</blockquote>
  <blockquote id="kFfy">Receving branch(основная ветка) - ветка в которую мы сливаем изменения </blockquote>
  <p id="1dYI">Для слияния мы переходим на основную ветку и используем команду <code>git merge &lt;тематическая ветка&gt;</code>.</p>
  <hr />
  <p id="GxeF"></p>
  <h3 id="j6mp" data-align="center">2. Перемещение</h3>
  <p id="9O6T">Вместо слияния двух ветвей, перемещение заново воспроизводит коммиты тематической ветки в виде набора новых коммитов базовой ветки, что выливается в более чистую историю коммитов.</p>
  <figure id="1UHD" class="m_column">
    <img src="https://img1.teletype.in/files/87/62/87621d9f-59dd-4deb-9d85-b3a4520ed7e8.png" width="660" />
  </figure>
  <p id="86qh">Для перемещения используется команда <code>git rebase &lt;основная ветка&gt; &lt;тематическая ветка&gt;</code>, которая воспроизводит изменения тематической ветки на основной; HEAD тематической ветки указывает на последний воспроизведённый коммит.</p>
  <p id="mnxm"><strong>Проблема перемещения</strong></p>
  <p id="Ktwb">После слияния <code>log</code> с историей может выглядеть довольно беспорядочно, а  перемещение позволяет переписать историю в нормальной, последовательной форме. Но перемещение — не всегда выход от запутанных логов: перемещённые коммиты отличаются от оригинальных, хотя и имеют одного и того же автора, сообщение и изменения.</p>
  <p id="JUjz">Вот пример:</p>
  <ul id="hyXl">
    <li id="rPkW">В своей ветке вы создаёте несколько коммитов и сливаете их в мастер ветку.</li>
    <li id="LgCp">Кто-то ещё решает поработать на основе ваших коммитов.</li>
    <li id="Wgri">Вы решаете переместить ваши коммиты и отправить их на сервер.</li>
    <li id="WGsg">Когда кто-то попытается слить свою работу на основе ваших изначальных коммитов, в итоге мы получим две параллельные ветки с одним автором, сообщениями и изменениями, но разными коммитами.</li>
  </ul>
  <p id="Nn3z">Перемещайте изменения только на вашей приватной локальной ветке - не перемещайте коммиты, от которых зависит ещё кто-то.</p>
  <hr />
  <p id="DdLE"></p>
  <h3 id="87pk" data-align="center">3. Работа с pull request </h3>
  <p id="7An6">Запросы pull — это механизм, с помощью которого разработчик уведомляет участников команды о том, что он подготовил некий функционал.</p>
  <figure id="w7fw" class="m_column" data-caption-align="center">
    <img src="https://img1.teletype.in/files/c6/97/c6978634-f69c-41c6-99d2-d220cbacd9f6.png" width="1587" />
    <figcaption>Пример пул реквеста от Жени в мой проект</figcaption>
  </figure>
  <figure id="6UYP" class="m_column" data-caption-align="center">
    <img src="https://img4.teletype.in/files/37/17/37172743-e1d2-47c0-a78b-3fb2e90274db.png" width="1152" />
    <figcaption>Пример пул реквеста от Жени в мой проект</figcaption>
  </figure>
  <p id="80yY">Любой пул реквест мы можем одобрить или отклонить, если у него есть проблемы в коде, коммите и т.д. Если вы и дальше работаете в той же ветке, а пулреквест ещё не принят, все ваши изменения автоматически добавятся в пулреквест, созданный из этой ветки после команды <code>git push origin название текущей ветки</code>.</p>
  <p id="Q7QA">Про создание пул реквеста а GitHub и как это выглядит со стороны, вы уже увидели у Жени, а я перейду к структуре пулл реквеста.</p>
  <h3 id="sGp7">Структура запроса pull</h3>
  <p id="wJjT">Создавая пул реквест, вы предлагаете разработчику забрать вашу ветку из вашего репозитория в его репозиторий. Поэтому для создания пул реквеста необходимо указать 4 параметра: исходный репозиторий, исходную ветку, репозиторий назначения и ветку назначения.</p>
  <figure id="qvQ4" class="m_column">
    <img src="https://img4.teletype.in/files/77/ad/77ad49c3-2766-4e0e-ac03-5742f3a8da6b.png" width="780" />
  </figure>
  <hr />
  <p id="tGbO"></p>
  <h3 id="vNXj" data-align="center">Промежуточные итоги</h3>
  <p id="IKus">Подводя итоги части &quot;Advanced&quot;, я бы хотел посоветовать вам при работе с терминалом как можно чаще создавать свои проекты, ведь только тогда вы сможете быстро выполнять все команды, лучше поймете структуру и работу гита и узнаете для себя кое-что новое. </p>
  <p id="seay">Я, надеюcь, вы узнали для себя кое-что новое из этой главы и научились работать с Git через консоль. Выражаю огромную благодарность за прочтение этой статьи и желаю вам успехов в разработке!</p>
  <hr />
  <p id="UM2Y"></p>
  <p id="xNkP"></p>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h2 id="Z4RT" data-align="center">ЗАКЛЮЧЕНИЕ </h2>
  </section>
  <p id="m0ZB">В целом, для работы с <strong>Git </strong>совсем не зазорно использовать терминал, но только представьте, что человек платит за лицензию <strong>PyCharm </strong>или любой другой крутой <strong>IDE </strong>и по итогу все, чем он пользуется - это зеленая кнопка <strong><em>run</em></strong>, чтобы не утруждать себя запуском приложения из консоли:) Это глупо, и не разумно, остановитесь и выделите хотя бы немного времени на то, чтобы разобраться со средой, в которой работаете. </p>
  <p id="doiP">В остальном же, Благодарю тебя, Дорогой читатель за прочтение материала, который мы готовили ровно три дня без учета нашего же изучения Git.</p>
  <p id="53mS"><strong>Цель этой статьи:</strong> помочь каждому, кто давно хотел работать с Git, начать, и замотивировать тех, кто до этого считал системы контроля версий - ненужной тратой времени. </p>
  <p id="VTU5"><em>— Я считаю, что цель вы выполнили.<strong> Спасибоу! </strong></em></p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="hyUN"><em><strong>Обещанные 10 тикетов в {Layer 1}: <a href="https://t.me/+6qxiOTYaOEA4NTcy" target="_blank">https://t.me/+6qxiOTYaOEA4NTcy</a></strong></em></p>
  </section>

]]></content:encoded></item></channel></rss>