<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.ss14.workbench.network/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ser11y</id>
	<title>Starshine Wiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ss14.workbench.network/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ser11y"/>
	<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/view/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Ser11y"/>
	<updated>2026-04-23T03:46:58Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1074</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1074"/>
		<updated>2023-09-27T21:36:01Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: /* Словарь: Внутренние операции Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
В тексте будет часто упоминаться GitLab - аналог GitHub, которым также пользуется Workbench Team. Принципиальной разницы нет, все шаги возможны и на GitHub, но лично мне удобнее работать с GitLab.&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
Для работы с Git для SS14 Вам понадобятся:&lt;br /&gt;
* [https://git-scm.com/downloads Git]&lt;br /&gt;
** Если Вы хотите использовать Git только в консоли, поставьте галочку при установке:&lt;br /&gt;
[[Файл:GitBash.png|мини|центр]]&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.7+]&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Linux, то, скорее всего, будете использовать Git через терминал или выбранную Вами IDE, и, возможно, он у Вас уже установлен.&lt;br /&gt;
&lt;br /&gt;
Некоторые IDE имеют в себе интеграцию Git, но этом руководстве будет информация &#039;&#039;&#039;только&#039;&#039;&#039; об использовании &#039;&#039;приложений&#039;&#039; [[Git для разработчика SS14#Git_Bash|Git Bash]] и [[Git для разработчика SS14#Fork|Fork]].&lt;br /&gt;
&lt;br /&gt;
=== Fork ===&lt;br /&gt;
[https://git-fork.com/ Fork] — быстрый и удобный Git-клиент, позволяющий делать всё, что можно в консоли, но удобнее.&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
Репозиторий - это просто база кода. Репозитории содержат branch&#039;и, а эти branch&#039;и содержат различные commit&#039;ы. Возможно, Вы слышали об этих двух понятиях - подробнее о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Удаленный репозиторий - это просто репозиторий на GitLab. Локальный репозиторий - это тот, который находится на Вашем компьютере.&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
Сперва давайте создадим собственный Fork удаленного репозитория Space Station 14. Для этого, конечно же, потребуется учетная запись GitLab. Forking означает, что Вы копируете всю историю и изменения репозитория в свой собственный удаленный репозиторий, чтобы иметь возможность свободно работать с кодом.&lt;br /&gt;
&lt;br /&gt;
Ваш удаленный репозиторий не будет автоматически обновляться изменениями из оригинального репозитория SS14 - Вам придется делать это самостоятельно, о чем будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Перейдите в наш репозиторий Space Station 14([https://github.com/Workbench-Team/space-station-14 GitHub], [https://git.arumoon.ru/Workbench-Team/space-station-14 GitLab]) и нажмите здесь:&lt;br /&gt;
[[Файл:ForksButton.png|мини|центр]]&lt;br /&gt;
Затем Вас спросят как назвать Fork - просто назовите его как угодно! Но если Вы хотите просто помочь в разработке, я бы выбрал space-station-14.&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
Теперь нам нужно загрузить наш удаленный репозиторий на компьютер (клонировать), чтобы мы могли внести в него некоторые изменения. Технически, Вы можете изменять репозиторий удалённо (на GitLab есть неплохие инструменты), но наличие его на Вашем компьютере означает, что Вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также легко работаете с Git.&lt;br /&gt;
&lt;br /&gt;
Для каждого шага будут приведены скриншоты и инструкции для Git Bash и Fork для Windows.&lt;br /&gt;
===== GitBash: =====&lt;br /&gt;
Перейдите в то место на Вашем компьютере, где Вы хотите разместить локальный репозиторий, и:&lt;br /&gt;
[[Файл:GitBashHere.png|мини|центр]]&lt;br /&gt;
Выберите какой репозиторий клонировать:&lt;br /&gt;
[[Файл:GitBashCloneCommand.png|мини|центр]]&lt;br /&gt;
Проделайте команду &amp;lt;code&amp;gt;git remote add upstream&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
===== Fork: =====&lt;br /&gt;
Нажмите &amp;lt;code&amp;gt;Ctrl + N&amp;lt;/code&amp;gt; в программе, или File =&amp;gt; Clone..., а затем введите адрес репозитория с припиской &amp;lt;code&amp;gt;.git&amp;lt;/code&amp;gt; в конце.&lt;br /&gt;
[[Файл:ForkCloneRepositoryButton.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
Добавьте удалённый репозиторий, нажав следующую кнопку:&lt;br /&gt;
[[Файл:ForkAddRemoteButton.png|центр]]&lt;br /&gt;
Введите &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14.git&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
[[Файл:ForkCreateBranchMenuText.png|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Обратите на это внимание! Если этого не сделать, то при попытке сборки игры вы получите множество странных ошибок о недоступности тех или иных модулей.&lt;br /&gt;
&lt;br /&gt;
В Space Station 14 есть много подмодулей - в первую очередь, движок RobustToolbox. Подмодули - это просто репозитории внутри репозитория, и их нужно обновлять вручную. А нужно ли?&lt;br /&gt;
&lt;br /&gt;
У нас есть автоматическая программа обновления подмодулей, так что Вам не нужно постоянно выполнять &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt; (команда для ручного обновления подмодулей).&lt;br /&gt;
&lt;br /&gt;
Запустите &amp;lt;code&amp;gt;RUN_THIS.py&amp;lt;/code&amp;gt; внутри репозитория, который Вы скачали, с помощью Python. Желательно, из терминала (&amp;lt;code&amp;gt;python RUN_THIS.py&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;python3 RUN_THIS.py&amp;lt;/code&amp;gt;). Это должно занять несколько секунд, так что если все мгновенно прекратится, то, вероятно, Вы не используете [https://www.python.org/downloads/ Python 3.7+] или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Windows и при попытке выполнить приведенную выше команду Вас перенаправляет в Microsoft Store или Вы получаете сообщение в терминале о том, что Python не установлен, необходимо отключить shortcut Microsoft, который может вызывать эту проблему. Это можно сделать, найдя в поиске Windows команду &amp;lt;code&amp;gt;Manage App Execution Aliases&amp;lt;/code&amp;gt;, а затем отключив две точки привязки Python.&lt;br /&gt;
&lt;br /&gt;
Если Вы все же хотите модифицировать движок напрямую или обновлять подмодуль вручную (автоматическое обновление иногда доставляет неудобства), создайте файл &amp;lt;code&amp;gt;DISABLE_SUBMODULE_AUTOUPDATE&amp;lt;/code&amp;gt; в каталоге &amp;lt;code&amp;gt;BuildChecker/.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам, Вам понадобится вручную обновить RobustToolbox, Вы можете использовать &amp;lt;code&amp;gt;cd RobustToolbox; git checkout v0.4.87&amp;lt;/code&amp;gt; (замените &amp;lt;code&amp;gt;v0.4.87&amp;lt;/code&amp;gt; на последнюю версию RobustToolbox), затем Вы можете использовать &amp;lt;code&amp;gt;cd..\&amp;lt;/code&amp;gt;, чтобы вернуться в репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
Branch&#039;и очень и очень важны. По сути, они представляют собой лист изменений в коде (commit&#039;ов). По умолчанию используется branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При работе с кодом Вы всегда находитесь в branch&#039;е, и Вы можете легко менять branch, в котором работаете.&lt;br /&gt;
&lt;br /&gt;
Как правило, branch&#039;и называются по имени того, над чем Вы собираетесь в них работать, но на самом деле не имеет значения, как они называются.&lt;br /&gt;
&lt;br /&gt;
Branch&#039;ей можно создавать сколько угодно. Когда Вы создаете branch, он ответвляется от текущего branch&#039;а и становится самостоятельным объектом, в который можно добавлять commit&#039;ы.&lt;br /&gt;
[[Файл:BranchDiagram.png|мини|центр|Каждый маленький узел - это отдельный commit, а каждый цвет - отдельный branch.]]&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
Технически, конечно, можно просто делать всю работу в одном branch&#039;е и отправлять Merge Request&#039;ы оттуда. Но создание различных branch&#039;ей позволяет легко понять, где Вы находитесь, сколько изменений внесли, и дает возможность работать над несколькими особенностями(новым содержимым) одновременно.&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
Создавать branch&#039;и довольно просто. Давайте создадим новый branch под названием &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashNewBranchCommand.png|мини|центр]]&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;git checkout&amp;lt;/code&amp;gt; здесь означает &amp;quot;проверь этот branch, и создай его, если он не существует&amp;quot;.&lt;br /&gt;
===== Fork =====&lt;br /&gt;
Ctrl + Shift + B или кнопка сверху откроет меню создания branch&#039;а:&lt;br /&gt;
[[Файл:ForkCreateBranchButton.png|мини|центр|Кнопка создания branch&#039;а]]&lt;br /&gt;
[[Файл:ForkCreateBranchMenu.png|мини|центр|Меню создания branch&#039;а]]&lt;br /&gt;
Создайте branch с именем funny-feature.&lt;br /&gt;
&lt;br /&gt;
Переключаться между branch&#039;ами довольно просто: это называется проверкой branch&#039;а. При этом локальные файлы и папки будут изменены в соответствии с веткой, поэтому Git будет кричать на Вас, если у Вас есть локальные изменения, а Вы пытаетесь выполнить проверку.&lt;br /&gt;
&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckoutBranchCommand.png|мини|центр]]&lt;br /&gt;
===== Fork =====&lt;br /&gt;
Два раза нажмите на имя branch&#039;а слева.&lt;br /&gt;
[[Файл:ForkCheckoutBranchButton.png|центр]]&lt;br /&gt;
&lt;br /&gt;
Ну а затем внесите любые локальные изменения! Это не имеет значения. Создайте новый файл, удалите всё, измените одну строку в файле и т.д. Это не повлияет на Ваш главный branch, потому что теперь это территория &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;!&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
Branche&#039;и важны, поскольку их можно объединять. Так происходит интеграция функций в основную ветку. Merge означает &amp;quot;взять особые commit&#039;ы из этого branch&#039;а и применить их к другому branch&#039;у&amp;quot;. Вы можете объединить любые два branch&#039;а.&lt;br /&gt;
&lt;br /&gt;
Иногда это происходит не совсем удачно, поскольку обе ветки изменяют одну и ту же часть файла противоречивыми способами, и в этом случае возникает конфликт слияния - подробнее об этом в приложениях.&lt;br /&gt;
&lt;br /&gt;
GitLab Merge Request - это, по сути, &amp;quot;запрос на объединение&amp;quot;: Вы говорите, что хотите объединить commit&#039;ы своего branch&#039;а с другим branch&#039;ом, обычно главным. Подробнее об этом позже.&lt;br /&gt;
&lt;br /&gt;
Merge Request&#039;ы очень хорошо отображают всю эту информацию:&lt;br /&gt;
[[Файл:MergeRequestExampleImage.png|мини|центр]]&lt;br /&gt;
[[Файл:MergeRequestExampleCommitsImage.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
Commit&#039;ы - это просто упакованные изменения в коде. Как разработчик, Вы выбираете, какие изменения войдут в commit и когда их вносить в branch. Commiting - это создание commit&#039;а, который, по сути, является точкой сохранения, к которой можно вернуться в любое время.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы имеют автора, временную метку, сообщение и некоторые изменения кода, прикрепленные к ним. Они также имеют очень длинный &amp;quot;commit hash&amp;quot; - уникальный идентификатор, используемый для ссылки на различные коммиты.&lt;br /&gt;
&lt;br /&gt;
Благодаря commit&#039;ам строится история - Вы можете просмотреть историю каждого коммита, сделанного в репозитории SS14 с самого начала, что очень здорово.&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
Один важный момент: прежде чем отправлять изменения в commit, необходимо добавить их в область staging&#039;а. Это означает, что Вы указываете, какие файлы хотите добавить в commit. Это полезно, поскольку Вы почти никогда не захотите commit&#039;ить изменения подмодулей, так что Вы просто не добавляете их в область staging&#039;а.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы всегда сопровождаются сообщением, которое представляет собой краткое, содержательное описание того, что было сделано в данном commit&#039;е. Или Вы можете быть &amp;quot;Чадом&amp;quot;(страна) и называть каждый коммит &amp;quot;меняет всякое&amp;quot; - на Ваше усмотрение.&lt;br /&gt;
&lt;br /&gt;
Если Вы хотите посмотреть, что Вы изменили в данный момент, а что находится в области staging&#039;а, то это довольно просто:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckStatusCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
===== Fork =====&lt;br /&gt;
Откройте меню локальных изменений, нажав на кнопку сверху слева:&lt;br /&gt;
[[Файл:ForkCheckStatusCommand.png|центр]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда Вы убедились, что все эти изменения выглядят хорошо, мы добавим их в область staging&#039;а и сделаем commit с ними:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashStashAndCommitCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
===== Fork =====&lt;br /&gt;
Добавляйте и убирайте изменения(выделите их) с помощью двух кнопок.&lt;br /&gt;
[[Файл:ForkStashAndCommitMenu.png|мини|центр]]&lt;br /&gt;
Напишите название и описание commit&#039;а, а затем подтвердите отправку:&lt;br /&gt;
[[Файл:ForkCommitMenu.png|центр]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда изменения были добавлены в commit и отправлены в branch, они навсегда (вроде как) остаются в истории branch&#039;а. Теперь мы можем сделать многое: объединить(merge) нашу &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; с нашим локальным мастер-branch&#039;ем (если захотим, по какой-то причине), загрузить (push) наш branch &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; в наш удалённый репозиторий, или полностью удалить ветку. Мы выберем push и сделаем Merge Request.&lt;br /&gt;
&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
Merge Request означает, что Вы хотите, чтобы кодовая база объединила Ваши изменения в одного из Ваших branch&#039;ей в один из их branch&#039;ей. Прежде чем мы сможем это сделать, наш удаленный репозиторий GitLab (upstream) должен знать о красивых branch&#039;ах и commit&#039;ах, которые мы создали локально, поэтому мы push&#039;им эти изменения на удаленный репозиторий.&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
Имейте в виду, что при использовании этих команд Git, скорее всего, запросит Ваши учетные данные GitLab, чтобы убедиться в том, что Вы имеете право выполнять push на этот удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
При отправке изменений мы указываем удалённый репозиторий, в который мы их отправляем, и локальный branch, из которого мы их отправляем. Все достаточно просто.&lt;br /&gt;
&lt;br /&gt;
Push&#039;им наш branch в удалённый репозиторий (upstream):&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPushCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
===== Fork =====&lt;br /&gt;
[[Файл:ForkPushCommandButton.png|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
Весёлая часть. Отправляемся на GitLab и создаём наш Merge Request:&lt;br /&gt;
[[Файл:GitLabFunnyFeatureMergeRequestButton.png|мини|центр]]&lt;br /&gt;
Добавьте описание, красивое название, несколько скриншотов, и, надеюсь, оно будет merge&#039;нуто.&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
Возможно, прошло уже много времени, неделя или две, с момента Вашего последнего Merge Request&#039;а, и Вы хотите сделать еще один. Прежде чем что-либо делать, необходимо загрузить (pull) изменения кода из основного репозитория SS14 в свой локальный репозиторий. В противном случае Вы получите устаревший код, а Ваши локальные изменения могут не соответствовать тому, как игра будет работать на самом деле - Вы даже можете получить конфликты слияния при попытке MR.&lt;br /&gt;
&lt;br /&gt;
Существует два способа обновления репозитория. Оба способа предполагают, что Вы правильно настроили доступ к удалённому репозиторию - если это не так, вернитесь к предыдущему пункту руководства.&lt;br /&gt;
&lt;br /&gt;
Первый способ, fetch+merge, дает больше возможностей для контроля, но может быть запутанным. Второй метод, pull, прост и удобен, но не дает большого контроля. Однако, как правило, pull - это все, что вам нужно.&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
Pulling означает получение (fetching) новых веток и commit&#039;ов из удаленного репозитория, а затем их слияние с branch&#039;ем. Pulling часто проще, поскольку Git имеет хорошую систему автоматического определения того, из какого удаленного репозитория Вы хотите получить изменения (но она не всегда работает корректно).&lt;br /&gt;
&lt;br /&gt;
Мы будем pull&#039;ить с нашего удалённого репозитория &amp;lt;code&amp;gt;upstream&amp;lt;/code&amp;gt; и попросим его объединиться с нашим локальным branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
Сначала, Вам надо сделать checkout Вашего branch&#039;а. Об этом мы рассказывали ранее. Затем:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPullUpstreamCommand.png|мини|центр]]&lt;br /&gt;
Делайте это регулярно и всегда до начала работы над новым branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
===== Fork =====&lt;br /&gt;
[[Файл:ForkPullUpstreamCommandButton.png|центр]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
Вы более или менее изучили рабочий процесс разработки функций для SS14 с точки зрения Git, но вот некоторые вещи, которые я хотел бы вбить Вам в голову:&lt;br /&gt;
&lt;br /&gt;
* При создании новой функциональности всегда создавайте новый branch от главного, прежде чем commit&#039;ить что-либо. Если Вы случайно за-commit&#039;ите изменения физики в branch с велосипедным клаксоном, Вам не поздоровится, но это поправимо.&lt;br /&gt;
* Никогда, никогда не фиксируйте RobustToolbox или подмодули типа Lidgren.Network, если Вы не знаете, что делаете. В локальном репозитории верхнего уровня эти подмодули считаются &amp;quot;файлами&amp;quot;, поэтому их легко случайно отправить на staging и сделать commit с ними. Не делайте этого. О том, как исправить свои ошибки, если это произошло, см. ниже.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
В качестве справочного материала здесь приведен небольшой глоссарий понятий и терминов Git, объясняющий их более подробно и в одном месте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Branches&#039;&#039;&#039; - это автономные версии кодовой базы, в которые можно добавлять коммиты. По умолчанию используется ветка master, но их можно создавать сколько угодно.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Репозитории&#039;&#039;&#039; - это папки, в которых с помощью Git можно вносить изменения и отслеживать их. Локальные репозитории - это репозитории, которые находятся у Вас на компьютере, а удаленные репозитории - это репозитории, расположенные на таких сайтах, как GitLab Репозитории состоят из множества веток.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Remotes&#039;&#039;&#039; - это названия и ссылки на удаленные репозитории, которые может использовать Ваш локальный репозиторий.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Подмодули&#039;&#039;&#039; - это репозитории, которые находятся внутри другого репозитория.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Forks&#039;&#039;&#039; - это репозитории, основанные на другом репозитории. Если Вы собираетесь сделать Merge Request для SS14, Вам необходимо сначала сделать Fork.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The working tree&#039;&#039;&#039; - это все файлы, папки и т.п., находящиеся в репозитории.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Staging&#039;&#039;&#039; означает добавление (с помощью git add) изменений в &#039;staging area&#039;, где с ними могут быть выполнены некоторые действия.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Commits&#039;&#039;&#039; - это изменения рабочего дерева репозитория в определенный момент времени. По сути, это точка сохранения. Commit - это просто список файлов, которые были изменены с момента последнего коммита, а изменения, которые были commit&#039;нуты, - это изменения, которые Вы отправили в staging area.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Checking out&#039;&#039;&#039; - это переключение на другой branch, чтобы работать с ним или просматривать его изменения локально.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Merging&#039;&#039;&#039; - это интеграция изменений из одного branch&#039;а в другой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Конфликты merge&#039;а&#039;&#039;&#039; возникают, когда интеграция изменений из одного branch&#039;а в другой не может быть выполнена автоматически, поскольку они оба изменяют одну и ту же область в файле, или их изменения взаимоисключают друг друга каким-либо другим способом.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fetching&#039;&#039;&#039; означает получение branch&#039;ей и commit&#039;ов удаленного репозитория, но на самом деле... еще ничего с ними не делая. Они будут просто обновлены, если вы захотите проверить или объединить их позже.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pulling&#039;&#039;&#039; - это акт интеграции изменений из branch&#039;а удаленного репозитория в Ваш локальный branch.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Merge Requests&#039;&#039;&#039; - это действие, позволяющее запросить слияние Вашего локального branch&#039;а и всех его изменений с branch&#039;а другого репозитория.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pushing&#039;&#039;&#039; - это действие по интеграции локальных изменений в удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
Некоторые вещи я не рассмотрел, но они почти неизбежно понадобятся Вам в какой-то момент. Я расскажу обо всем этом исключительно как о командах git в Git Bash, но в других программах разобраться несложно (те же ключевые слова, просто ищите их). &lt;br /&gt;
&lt;br /&gt;
Одно замечание, поскольку оно часто встречается здесь: HEAD - это модное название commit&#039;а, на котором Вы сейчас находитесь.&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
Вредный маленький maintainer сказал вам &amp;quot;разрешить конфликты&amp;quot;, иначе ваш MR &amp;quot;не будет merge&#039;нут&amp;quot;. Вот ведь сволочь! К счастью, это не так уж сложно.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно обновить главный локальный branch. Как это сделать, см. выше.&lt;br /&gt;
&lt;br /&gt;
Когда Вы выполните команду &amp;lt;code&amp;gt;git merge master [локальный branch]&amp;lt;/code&amp;gt;, она либо сделает это без ошибок (&amp;quot;ура&amp;quot;), либо сообщит Вам, что необходимо разрешить конфликты (ужас).&lt;br /&gt;
&lt;br /&gt;
Для разрешения конфликтов вручную достаточно зайти в конфликтующие файлы, удалить всю ерунду типа &amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;HEAD&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;===== &amp;lt;&amp;lt;&amp;lt;&amp;lt;master&amp;lt;/code&amp;gt; (просто указывает, откуда произошли изменения), а затем отредактировать файл так, чтобы он правильно объединял оба набора изменений. Иногда это легко, иногда трудно. Если это сложно, то Вы, вероятно, знаете, что делаете. После этого просто выполните команду &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
У Atlassian есть [https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts очень хорошее руководство] по этому вопросу.&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
&amp;lt;code&amp;gt;git log --oneline&amp;lt;/code&amp;gt; - это Ваш друг. Он показывает короткие hashe&#039;и commit&#039;ов (уникальные идентификаторы), их сообщения, а также их branch&#039;и и tag&#039;и.&lt;br /&gt;
&lt;br /&gt;
В Fork эта функция встроена в UI:&lt;br /&gt;
[[Файл:ForkCommitHistory.png|мини|центр]]&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
Возможно, Вы случайно внесли ненужные изменения, и Вам не хочется возиться с созданием совершенно новой ветки или еще чего-нибудь, но Вы еще не сделали commit с ними.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это означает &amp;quot;изменить working tree на текущий commit, до внесения любых локальных изменений. Вы не сможете восстановить локальные изменения, если сделаете это, так что будьте осторожны.&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;br /&gt;
Вот черт, Ваша эротика про ксеноморфа попала в commit или Вы случайно commit&#039;нули подмодуль! Что теперь? Есть решения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git revert HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это создаст новый commit, отменяющий текущий commit, и затем commit&#039;нет его. Хе-хе, commit.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1073</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1073"/>
		<updated>2023-09-27T21:34:38Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Добавлена информация для Fork&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
В тексте будет часто упоминаться GitLab - аналог GitHub, которым также пользуется Workbench Team. Принципиальной разницы нет, все шаги возможны и на GitHub, но лично мне удобнее работать с GitLab.&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
Для работы с Git для SS14 Вам понадобятся:&lt;br /&gt;
* [https://git-scm.com/downloads Git]&lt;br /&gt;
** Если Вы хотите использовать Git только в консоли, поставьте галочку при установке:&lt;br /&gt;
[[Файл:GitBash.png|мини|центр]]&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.7+]&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Linux, то, скорее всего, будете использовать Git через терминал или выбранную Вами IDE, и, возможно, он у Вас уже установлен.&lt;br /&gt;
&lt;br /&gt;
Некоторые IDE имеют в себе интеграцию Git, но этом руководстве будет информация &#039;&#039;&#039;только&#039;&#039;&#039; об использовании &#039;&#039;приложений&#039;&#039; [[Git для разработчика SS14#Git_Bash|Git Bash]] и [[Git для разработчика SS14#Fork|Fork]].&lt;br /&gt;
&lt;br /&gt;
=== Fork ===&lt;br /&gt;
[https://git-fork.com/ Fork] — быстрый и удобный Git-клиент, позволяющий делать всё, что можно в консоли, но удобнее.&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
Репозиторий - это просто база кода. Репозитории содержат branch&#039;и, а эти branch&#039;и содержат различные commit&#039;ы. Возможно, Вы слышали об этих двух понятиях - подробнее о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Удаленный репозиторий - это просто репозиторий на GitLab. Локальный репозиторий - это тот, который находится на Вашем компьютере.&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
Сперва давайте создадим собственный Fork удаленного репозитория Space Station 14. Для этого, конечно же, потребуется учетная запись GitLab. Forking означает, что Вы копируете всю историю и изменения репозитория в свой собственный удаленный репозиторий, чтобы иметь возможность свободно работать с кодом.&lt;br /&gt;
&lt;br /&gt;
Ваш удаленный репозиторий не будет автоматически обновляться изменениями из оригинального репозитория SS14 - Вам придется делать это самостоятельно, о чем будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Перейдите в наш репозиторий Space Station 14([https://github.com/Workbench-Team/space-station-14 GitHub], [https://git.arumoon.ru/Workbench-Team/space-station-14 GitLab]) и нажмите здесь:&lt;br /&gt;
[[Файл:ForksButton.png|мини|центр]]&lt;br /&gt;
Затем Вас спросят как назвать Fork - просто назовите его как угодно! Но если Вы хотите просто помочь в разработке, я бы выбрал space-station-14.&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
Теперь нам нужно загрузить наш удаленный репозиторий на компьютер (клонировать), чтобы мы могли внести в него некоторые изменения. Технически, Вы можете изменять репозиторий удалённо (на GitLab есть неплохие инструменты), но наличие его на Вашем компьютере означает, что Вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также легко работаете с Git.&lt;br /&gt;
&lt;br /&gt;
Для каждого шага будут приведены скриншоты и инструкции для Git Bash и Fork для Windows.&lt;br /&gt;
===== GitBash: =====&lt;br /&gt;
Перейдите в то место на Вашем компьютере, где Вы хотите разместить локальный репозиторий, и:&lt;br /&gt;
[[Файл:GitBashHere.png|мини|центр]]&lt;br /&gt;
Выберите какой репозиторий клонировать:&lt;br /&gt;
[[Файл:GitBashCloneCommand.png|мини|центр]]&lt;br /&gt;
Проделайте команду &amp;lt;code&amp;gt;git remote add upstream&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
===== Fork: =====&lt;br /&gt;
Нажмите &amp;lt;code&amp;gt;Ctrl + N&amp;lt;/code&amp;gt; в программе, или File =&amp;gt; Clone..., а затем введите адрес репозитория с припиской &amp;lt;code&amp;gt;.git&amp;lt;/code&amp;gt; в конце.&lt;br /&gt;
[[Файл:ForkCloneRepositoryButton.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
Добавьте удалённый репозиторий, нажав следующую кнопку:&lt;br /&gt;
[[Файл:ForkAddRemoteButton.png|центр]]&lt;br /&gt;
Введите &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14.git&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
[[Файл:ForkCreateBranchMenuText.png|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Обратите на это внимание! Если этого не сделать, то при попытке сборки игры вы получите множество странных ошибок о недоступности тех или иных модулей.&lt;br /&gt;
&lt;br /&gt;
В Space Station 14 есть много подмодулей - в первую очередь, движок RobustToolbox. Подмодули - это просто репозитории внутри репозитория, и их нужно обновлять вручную. А нужно ли?&lt;br /&gt;
&lt;br /&gt;
У нас есть автоматическая программа обновления подмодулей, так что Вам не нужно постоянно выполнять &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt; (команда для ручного обновления подмодулей).&lt;br /&gt;
&lt;br /&gt;
Запустите &amp;lt;code&amp;gt;RUN_THIS.py&amp;lt;/code&amp;gt; внутри репозитория, который Вы скачали, с помощью Python. Желательно, из терминала (&amp;lt;code&amp;gt;python RUN_THIS.py&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;python3 RUN_THIS.py&amp;lt;/code&amp;gt;). Это должно занять несколько секунд, так что если все мгновенно прекратится, то, вероятно, Вы не используете [https://www.python.org/downloads/ Python 3.7+] или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Windows и при попытке выполнить приведенную выше команду Вас перенаправляет в Microsoft Store или Вы получаете сообщение в терминале о том, что Python не установлен, необходимо отключить shortcut Microsoft, который может вызывать эту проблему. Это можно сделать, найдя в поиске Windows команду &amp;lt;code&amp;gt;Manage App Execution Aliases&amp;lt;/code&amp;gt;, а затем отключив две точки привязки Python.&lt;br /&gt;
&lt;br /&gt;
Если Вы все же хотите модифицировать движок напрямую или обновлять подмодуль вручную (автоматическое обновление иногда доставляет неудобства), создайте файл &amp;lt;code&amp;gt;DISABLE_SUBMODULE_AUTOUPDATE&amp;lt;/code&amp;gt; в каталоге &amp;lt;code&amp;gt;BuildChecker/.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам, Вам понадобится вручную обновить RobustToolbox, Вы можете использовать &amp;lt;code&amp;gt;cd RobustToolbox; git checkout v0.4.87&amp;lt;/code&amp;gt; (замените &amp;lt;code&amp;gt;v0.4.87&amp;lt;/code&amp;gt; на последнюю версию RobustToolbox), затем Вы можете использовать &amp;lt;code&amp;gt;cd..\&amp;lt;/code&amp;gt;, чтобы вернуться в репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
Branch&#039;и очень и очень важны. По сути, они представляют собой лист изменений в коде (commit&#039;ов). По умолчанию используется branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При работе с кодом Вы всегда находитесь в branch&#039;е, и Вы можете легко менять branch, в котором работаете.&lt;br /&gt;
&lt;br /&gt;
Как правило, branch&#039;и называются по имени того, над чем Вы собираетесь в них работать, но на самом деле не имеет значения, как они называются.&lt;br /&gt;
&lt;br /&gt;
Branch&#039;ей можно создавать сколько угодно. Когда Вы создаете branch, он ответвляется от текущего branch&#039;а и становится самостоятельным объектом, в который можно добавлять commit&#039;ы.&lt;br /&gt;
[[Файл:BranchDiagram.png|мини|центр|Каждый маленький узел - это отдельный commit, а каждый цвет - отдельный branch.]]&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
Технически, конечно, можно просто делать всю работу в одном branch&#039;е и отправлять Merge Request&#039;ы оттуда. Но создание различных branch&#039;ей позволяет легко понять, где Вы находитесь, сколько изменений внесли, и дает возможность работать над несколькими особенностями(новым содержимым) одновременно.&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
Создавать branch&#039;и довольно просто. Давайте создадим новый branch под названием &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashNewBranchCommand.png|мини|центр]]&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;git checkout&amp;lt;/code&amp;gt; здесь означает &amp;quot;проверь этот branch, и создай его, если он не существует&amp;quot;.&lt;br /&gt;
===== Fork =====&lt;br /&gt;
Ctrl + Shift + B или кнопка сверху откроет меню создания branch&#039;а:&lt;br /&gt;
[[Файл:ForkCreateBranchButton.png|мини|центр|Кнопка создания branch&#039;а]]&lt;br /&gt;
[[Файл:ForkCreateBranchMenu.png|мини|центр|Меню создания branch&#039;а]]&lt;br /&gt;
Создайте branch с именем funny-feature.&lt;br /&gt;
&lt;br /&gt;
Переключаться между branch&#039;ами довольно просто: это называется проверкой branch&#039;а. При этом локальные файлы и папки будут изменены в соответствии с веткой, поэтому Git будет кричать на Вас, если у Вас есть локальные изменения, а Вы пытаетесь выполнить проверку.&lt;br /&gt;
&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckoutBranchCommand.png|мини|центр]]&lt;br /&gt;
===== Fork =====&lt;br /&gt;
Два раза нажмите на имя branch&#039;а слева.&lt;br /&gt;
[[Файл:ForkCheckoutBranchButton.png|центр]]&lt;br /&gt;
&lt;br /&gt;
Ну а затем внесите любые локальные изменения! Это не имеет значения. Создайте новый файл, удалите всё, измените одну строку в файле и т.д. Это не повлияет на Ваш главный branch, потому что теперь это территория &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;!&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
Branche&#039;и важны, поскольку их можно объединять. Так происходит интеграция функций в основную ветку. Merge означает &amp;quot;взять особые commit&#039;ы из этого branch&#039;а и применить их к другому branch&#039;у&amp;quot;. Вы можете объединить любые два branch&#039;а.&lt;br /&gt;
&lt;br /&gt;
Иногда это происходит не совсем удачно, поскольку обе ветки изменяют одну и ту же часть файла противоречивыми способами, и в этом случае возникает конфликт слияния - подробнее об этом в приложениях.&lt;br /&gt;
&lt;br /&gt;
GitLab Merge Request - это, по сути, &amp;quot;запрос на объединение&amp;quot;: Вы говорите, что хотите объединить commit&#039;ы своего branch&#039;а с другим branch&#039;ом, обычно главным. Подробнее об этом позже.&lt;br /&gt;
&lt;br /&gt;
Merge Request&#039;ы очень хорошо отображают всю эту информацию:&lt;br /&gt;
[[Файл:MergeRequestExampleImage.png|мини|центр]]&lt;br /&gt;
[[Файл:MergeRequestExampleCommitsImage.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
Commit&#039;ы - это просто упакованные изменения в коде. Как разработчик, Вы выбираете, какие изменения войдут в commit и когда их вносить в branch. Commiting - это создание commit&#039;а, который, по сути, является точкой сохранения, к которой можно вернуться в любое время.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы имеют автора, временную метку, сообщение и некоторые изменения кода, прикрепленные к ним. Они также имеют очень длинный &amp;quot;commit hash&amp;quot; - уникальный идентификатор, используемый для ссылки на различные коммиты.&lt;br /&gt;
&lt;br /&gt;
Благодаря commit&#039;ам строится история - Вы можете просмотреть историю каждого коммита, сделанного в репозитории SS14 с самого начала, что очень здорово.&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
Один важный момент: прежде чем отправлять изменения в commit, необходимо добавить их в область staging&#039;а. Это означает, что Вы указываете, какие файлы хотите добавить в commit. Это полезно, поскольку Вы почти никогда не захотите commit&#039;ить изменения подмодулей, так что Вы просто не добавляете их в область staging&#039;а.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы всегда сопровождаются сообщением, которое представляет собой краткое, содержательное описание того, что было сделано в данном commit&#039;е. Или Вы можете быть &amp;quot;Чадом&amp;quot;(страна) и называть каждый коммит &amp;quot;меняет всякое&amp;quot; - на Ваше усмотрение.&lt;br /&gt;
&lt;br /&gt;
Если Вы хотите посмотреть, что Вы изменили в данный момент, а что находится в области staging&#039;а, то это довольно просто:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckStatusCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
===== Fork =====&lt;br /&gt;
Откройте меню локальных изменений, нажав на кнопку сверху слева:&lt;br /&gt;
[[Файл:ForkCheckStatusCommand.png|центр]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда Вы убедились, что все эти изменения выглядят хорошо, мы добавим их в область staging&#039;а и сделаем commit с ними:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashStashAndCommitCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
===== Fork =====&lt;br /&gt;
Добавляйте и убирайте изменения(выделите их) с помощью двух кнопок.&lt;br /&gt;
[[Файл:ForkStashAndCommitMenu.png|мини|центр]]&lt;br /&gt;
Напишите название и описание commit&#039;а, а затем подтвердите отправку:&lt;br /&gt;
[[Файл:ForkCommitMenu.png|центр]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда изменения были добавлены в commit и отправлены в branch, они навсегда (вроде как) остаются в истории branch&#039;а. Теперь мы можем сделать многое: объединить(merge) нашу &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; с нашим локальным мастер-branch&#039;ем (если захотим, по какой-то причине), загрузить (push) наш branch &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; в наш удалённый репозиторий, или полностью удалить ветку. Мы выберем push и сделаем Merge Request.&lt;br /&gt;
&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
Merge Request означает, что Вы хотите, чтобы кодовая база объединила Ваши изменения в одного из Ваших branch&#039;ей в один из их branch&#039;ей. Прежде чем мы сможем это сделать, наш удаленный репозиторий GitLab (upstream) должен знать о красивых branch&#039;ах и commit&#039;ах, которые мы создали локально, поэтому мы push&#039;им эти изменения на удаленный репозиторий.&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
Имейте в виду, что при использовании этих команд Git, скорее всего, запросит Ваши учетные данные GitLab, чтобы убедиться в том, что Вы имеете право выполнять push на этот удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
При отправке изменений мы указываем удалённый репозиторий, в который мы их отправляем, и локальный branch, из которого мы их отправляем. Все достаточно просто.&lt;br /&gt;
&lt;br /&gt;
Push&#039;им наш branch в удалённый репозиторий (upstream):&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPushCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
===== Fork =====&lt;br /&gt;
[[Файл:ForkPushCommandButton.png|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
Весёлая часть. Отправляемся на GitLab и создаём наш Merge Request:&lt;br /&gt;
[[Файл:GitLabFunnyFeatureMergeRequestButton.png|мини|центр]]&lt;br /&gt;
Добавьте описание, красивое название, несколько скриншотов, и, надеюсь, оно будет merge&#039;нуто.&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
Возможно, прошло уже много времени, неделя или две, с момента Вашего последнего Merge Request&#039;а, и Вы хотите сделать еще один. Прежде чем что-либо делать, необходимо загрузить (pull) изменения кода из основного репозитория SS14 в свой локальный репозиторий. В противном случае Вы получите устаревший код, а Ваши локальные изменения могут не соответствовать тому, как игра будет работать на самом деле - Вы даже можете получить конфликты слияния при попытке MR.&lt;br /&gt;
&lt;br /&gt;
Существует два способа обновления репозитория. Оба способа предполагают, что Вы правильно настроили доступ к удалённому репозиторию - если это не так, вернитесь к предыдущему пункту руководства.&lt;br /&gt;
&lt;br /&gt;
Первый способ, fetch+merge, дает больше возможностей для контроля, но может быть запутанным. Второй метод, pull, прост и удобен, но не дает большого контроля. Однако, как правило, pull - это все, что вам нужно.&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
Pulling означает получение (fetching) новых веток и commit&#039;ов из удаленного репозитория, а затем их слияние с branch&#039;ем. Pulling часто проще, поскольку Git имеет хорошую систему автоматического определения того, из какого удаленного репозитория Вы хотите получить изменения (но она не всегда работает корректно).&lt;br /&gt;
&lt;br /&gt;
Мы будем pull&#039;ить с нашего удалённого репозитория &amp;lt;code&amp;gt;upstream&amp;lt;/code&amp;gt; и попросим его объединиться с нашим локальным branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
Сначала, Вам надо сделать checkout Вашего branch&#039;а. Об этом мы рассказывали ранее. Затем:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPullUpstreamCommand.png|мини|центр]]&lt;br /&gt;
Делайте это регулярно и всегда до начала работы над новым branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
===== Fork =====&lt;br /&gt;
[[Файл:ForkPullUpstreamCommandButton.png|центр]]&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
Вы более или менее изучили рабочий процесс разработки функций для SS14 с точки зрения Git, но вот некоторые вещи, которые я хотел бы вбить Вам в голову:&lt;br /&gt;
&lt;br /&gt;
* При создании новой функциональности всегда создавайте новый branch от главного, прежде чем commit&#039;ить что-либо. Если Вы случайно за-commit&#039;ите изменения физики в branch с велосипедным клаксоном, Вам не поздоровится, но это поправимо.&lt;br /&gt;
* Никогда, никогда не фиксируйте RobustToolbox или подмодули типа Lidgren.Network, если Вы не знаете, что делаете. В локальном репозитории верхнего уровня эти подмодули считаются &amp;quot;файлами&amp;quot;, поэтому их легко случайно отправить на staging и сделать commit с ними. Не делайте этого. О том, как исправить свои ошибки, если это произошло, см. ниже.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
В качестве справочного материала здесь приведен небольшой глоссарий понятий и терминов Git, объясняющий их более подробно и в одном месте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Branches&#039;&#039;&#039; - это автономные версии кодовой базы, в которые можно добавлять коммиты. По умолчанию используется ветка master, но их можно создавать сколько угодно.&lt;br /&gt;
&#039;&#039;&#039;Репозитории&#039;&#039;&#039; - это папки, в которых с помощью Git можно вносить изменения и отслеживать их. Локальные репозитории - это репозитории, которые находятся у Вас на компьютере, а удаленные репозитории - это репозитории, расположенные на таких сайтах, как GitLab Репозитории состоят из множества веток.&lt;br /&gt;
&#039;&#039;&#039;Remotes&#039;&#039;&#039; - это названия и ссылки на удаленные репозитории, которые может использовать Ваш локальный репозиторий.&lt;br /&gt;
&#039;&#039;&#039;Подмодули&#039;&#039;&#039; - это репозитории, которые находятся внутри другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Forks&#039;&#039;&#039; - это репозитории, основанные на другом репозитории. Если Вы собираетесь сделать Merge Request для SS14, Вам необходимо сначала сделать Fork.&lt;br /&gt;
&#039;&#039;&#039;The working tree&#039;&#039;&#039; - это все файлы, папки и т.п., находящиеся в репозитории.&lt;br /&gt;
&#039;&#039;&#039;Staging&#039;&#039;&#039; означает добавление (с помощью git add) изменений в &#039;staging area&#039;, где с ними могут быть выполнены некоторые действия&lt;br /&gt;
&#039;&#039;&#039;Commits&#039;&#039;&#039; - это изменения рабочего дерева репозитория в определенный момент времени. По сути, это точка сохранения. Commit - это просто список файлов, которые были изменены с момента последнего коммита, а изменения, которые были commit&#039;нуты, - это изменения, которые Вы отправили в staging area.&lt;br /&gt;
&#039;&#039;&#039;Checking out&#039;&#039;&#039; - это переключение на другой branch, чтобы работать с ним или просматривать его изменения локально.&lt;br /&gt;
&#039;&#039;&#039;Merging&#039;&#039;&#039; - это интеграция изменений из одного branch&#039;а в другой.&lt;br /&gt;
Конфликты merge&#039;а&amp;quot; возникают, когда интеграция изменений из одного branch&#039;а в другой не может быть выполнена автоматически, поскольку они оба изменяют одну и ту же область в файле, или их изменения взаимоисключают друг друга каким-либо другим способом.&lt;br /&gt;
&#039;&#039;&#039;Fetching&#039;&#039;&#039; означает получение branch&#039;ей и commit&#039;ов удаленного репозитория, но на самом деле... еще ничего с ними не делая. Они будут просто обновлены, если вы захотите проверить или объединить их позже.&lt;br /&gt;
&#039;&#039;&#039;Pulling&#039;&#039;&#039; - это акт интеграции изменений из branch&#039;а удаленного репозитория в Ваш локальный branch.&lt;br /&gt;
Merge Requests&amp;quot; - это действие, позволяющее запросить слияние Вашего локального branch&#039;а и всех его изменений с branch&#039;а другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Pushing&#039;&#039;&#039; - это действие по интеграции локальных изменений в удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
Некоторые вещи я не рассмотрел, но они почти неизбежно понадобятся Вам в какой-то момент. Я расскажу обо всем этом исключительно как о командах git в Git Bash, но в других программах разобраться несложно (те же ключевые слова, просто ищите их). &lt;br /&gt;
&lt;br /&gt;
Одно замечание, поскольку оно часто встречается здесь: HEAD - это модное название commit&#039;а, на котором Вы сейчас находитесь.&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
Вредный маленький maintainer сказал вам &amp;quot;разрешить конфликты&amp;quot;, иначе ваш MR &amp;quot;не будет merge&#039;нут&amp;quot;. Вот ведь сволочь! К счастью, это не так уж сложно.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно обновить главный локальный branch. Как это сделать, см. выше.&lt;br /&gt;
&lt;br /&gt;
Когда Вы выполните команду &amp;lt;code&amp;gt;git merge master [локальный branch]&amp;lt;/code&amp;gt;, она либо сделает это без ошибок (&amp;quot;ура&amp;quot;), либо сообщит Вам, что необходимо разрешить конфликты (ужас).&lt;br /&gt;
&lt;br /&gt;
Для разрешения конфликтов вручную достаточно зайти в конфликтующие файлы, удалить всю ерунду типа &amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;HEAD&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;===== &amp;lt;&amp;lt;&amp;lt;&amp;lt;master&amp;lt;/code&amp;gt; (просто указывает, откуда произошли изменения), а затем отредактировать файл так, чтобы он правильно объединял оба набора изменений. Иногда это легко, иногда трудно. Если это сложно, то Вы, вероятно, знаете, что делаете. После этого просто выполните команду &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
У Atlassian есть [https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts очень хорошее руководство] по этому вопросу.&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
&amp;lt;code&amp;gt;git log --oneline&amp;lt;/code&amp;gt; - это Ваш друг. Он показывает короткие hashe&#039;и commit&#039;ов (уникальные идентификаторы), их сообщения, а также их branch&#039;и и tag&#039;и.&lt;br /&gt;
&lt;br /&gt;
В Fork эта функция встроена в UI:&lt;br /&gt;
[[Файл:ForkCommitHistory.png|мини|центр]]&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
Возможно, Вы случайно внесли ненужные изменения, и Вам не хочется возиться с созданием совершенно новой ветки или еще чего-нибудь, но Вы еще не сделали commit с ними.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это означает &amp;quot;изменить working tree на текущий commit, до внесения любых локальных изменений. Вы не сможете восстановить локальные изменения, если сделаете это, так что будьте осторожны.&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;br /&gt;
Вот черт, Ваша эротика про ксеноморфа попала в commit или Вы случайно commit&#039;нули подмодуль! Что теперь? Есть решения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git revert HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это создаст новый commit, отменяющий текущий commit, и затем commit&#039;нет его. Хе-хе, commit.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCreateBranchMenuText.png&amp;diff=1072</id>
		<title>Файл:ForkCreateBranchMenuText.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCreateBranchMenuText.png&amp;diff=1072"/>
		<updated>2023-09-27T21:31:14Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkCreateBranchMenu&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkAddRemoteButton.png&amp;diff=1071</id>
		<title>Файл:ForkAddRemoteButton.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkAddRemoteButton.png&amp;diff=1071"/>
		<updated>2023-09-27T21:29:04Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkAddRemoteButton&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCommitHistory.png&amp;diff=1070</id>
		<title>Файл:ForkCommitHistory.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCommitHistory.png&amp;diff=1070"/>
		<updated>2023-09-27T21:25:35Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkCommitHistory&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkPullUpstreamCommandButton.png&amp;diff=1069</id>
		<title>Файл:ForkPullUpstreamCommandButton.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkPullUpstreamCommandButton.png&amp;diff=1069"/>
		<updated>2023-09-27T21:24:05Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkPullUpstreamCommandButton&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkPushCommandButton.png&amp;diff=1068</id>
		<title>Файл:ForkPushCommandButton.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkPushCommandButton.png&amp;diff=1068"/>
		<updated>2023-09-27T21:22:58Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkPushCommandButton&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCommitMenu.png&amp;diff=1067</id>
		<title>Файл:ForkCommitMenu.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCommitMenu.png&amp;diff=1067"/>
		<updated>2023-09-27T21:20:46Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkCommitMenu&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkStashAndCommitMenu.png&amp;diff=1066</id>
		<title>Файл:ForkStashAndCommitMenu.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkStashAndCommitMenu.png&amp;diff=1066"/>
		<updated>2023-09-27T21:17:51Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkStashAndCommitMenu&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCheckStatusCommand.png&amp;diff=1065</id>
		<title>Файл:ForkCheckStatusCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCheckStatusCommand.png&amp;diff=1065"/>
		<updated>2023-09-27T21:13:18Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkCheckStatusCommand&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCheckoutBranchButton.png&amp;diff=1064</id>
		<title>Файл:ForkCheckoutBranchButton.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCheckoutBranchButton.png&amp;diff=1064"/>
		<updated>2023-09-27T21:10:37Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkCheckoutBranchButton&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCreateBranchMenu.png&amp;diff=1063</id>
		<title>Файл:ForkCreateBranchMenu.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCreateBranchMenu.png&amp;diff=1063"/>
		<updated>2023-09-27T21:06:17Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkCreateBranchMenu&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCreateBranchButton.png&amp;diff=1062</id>
		<title>Файл:ForkCreateBranchButton.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCreateBranchButton.png&amp;diff=1062"/>
		<updated>2023-09-27T21:05:26Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkCreateBranchButton&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCloneRepositoryButton.png&amp;diff=1061</id>
		<title>Файл:ForkCloneRepositoryButton.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForkCloneRepositoryButton.png&amp;diff=1061"/>
		<updated>2023-09-27T21:03:22Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ForkCloneRepositoryButton&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1060</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1060"/>
		<updated>2023-09-27T20:56:16Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: /* Что такое branch? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
В тексте будет часто упоминаться GitLab - аналог GitHub, которым также пользуется Workbench Team. Принципиальной разницы нет, все шаги возможны и на GitHub, но лично мне удобнее работать с GitLab.&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
Для работы с Git для SS14 Вам понадобятся:&lt;br /&gt;
* [https://git-scm.com/downloads Git]&lt;br /&gt;
** Если Вы хотите использовать Git только в консоли, поставьте галочку при установке:&lt;br /&gt;
[[Файл:GitBash.png|мини|центр]]&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.7+]&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Linux, то, скорее всего, будете использовать Git через терминал или выбранную Вами IDE, и, возможно, он у Вас уже установлен.&lt;br /&gt;
&lt;br /&gt;
Некоторые IDE имеют в себе интеграцию Git, но этом руководстве будет информация &#039;&#039;&#039;только&#039;&#039;&#039; об использовании &#039;&#039;приложений&#039;&#039; [[Git для разработчика SS14#Git_Bash|Git Bash]] и [[Git для разработчика SS14#Fork|Fork]].&lt;br /&gt;
&lt;br /&gt;
=== Fork ===&lt;br /&gt;
[https://git-fork.com/ Fork] — быстрый и удобный Git-клиент, позволяющий делать всё, что можно в консоли, но удобнее.&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
Репозиторий - это просто база кода. Репозитории содержат branch&#039;и, а эти branch&#039;и содержат различные commit&#039;ы. Возможно, Вы слышали об этих двух понятиях - подробнее о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Удаленный репозиторий - это просто репозиторий на GitLab. Локальный репозиторий - это тот, который находится на Вашем компьютере.&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
Сперва давайте создадим собственный Fork удаленного репозитория Space Station 14. Для этого, конечно же, потребуется учетная запись GitLab. Forking означает, что Вы копируете всю историю и изменения репозитория в свой собственный удаленный репозиторий, чтобы иметь возможность свободно работать с кодом.&lt;br /&gt;
&lt;br /&gt;
Ваш удаленный репозиторий не будет автоматически обновляться изменениями из оригинального репозитория SS14 - Вам придется делать это самостоятельно, о чем будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Перейдите в наш репозиторий Space Station 14([https://github.com/Workbench-Team/space-station-14 GitHub], [https://git.arumoon.ru/Workbench-Team/space-station-14 GitLab]) и нажмите здесь:&lt;br /&gt;
[[Файл:ForksButton.png|мини|центр]]&lt;br /&gt;
Затем Вас спросят как назвать Fork - просто назовите его как угодно! Но если Вы хотите просто помочь в разработке, я бы выбрал space-station-14.&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
Теперь нам нужно загрузить наш удаленный репозиторий на компьютер (клонировать), чтобы мы могли внести в него некоторые изменения. Технически, Вы можете изменять репозиторий удалённо (на GitLab есть неплохие инструменты), но наличие его на Вашем компьютере означает, что Вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также легко работаете с Git.&lt;br /&gt;
&lt;br /&gt;
Для каждого шага будут приведены скриншоты и инструкции для Git Bash и Fork для Windows.&lt;br /&gt;
===== GitBash: =====&lt;br /&gt;
Перейдите в то место на Вашем компьютере, где Вы хотите разместить локальный репозиторий, и:&lt;br /&gt;
[[Файл:GitBashHere.png|мини|центр]]&lt;br /&gt;
Выберите какой репозиторий клонировать:&lt;br /&gt;
[[Файл:GitBashCloneCommand.png|мини|центр]]&lt;br /&gt;
Проделайте команду &amp;lt;code&amp;gt;git remote add upstream&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Обратите на это внимание! Если этого не сделать, то при попытке сборки игры вы получите множество странных ошибок о недоступности тех или иных модулей.&lt;br /&gt;
&lt;br /&gt;
В Space Station 14 есть много подмодулей - в первую очередь, движок RobustToolbox. Подмодули - это просто репозитории внутри репозитория, и их нужно обновлять вручную. А нужно ли?&lt;br /&gt;
&lt;br /&gt;
У нас есть автоматическая программа обновления подмодулей, так что Вам не нужно постоянно выполнять &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt; (команда для ручного обновления подмодулей).&lt;br /&gt;
&lt;br /&gt;
Запустите &amp;lt;code&amp;gt;RUN_THIS.py&amp;lt;/code&amp;gt; внутри репозитория, который Вы скачали, с помощью Python. Желательно, из терминала (&amp;lt;code&amp;gt;python RUN_THIS.py&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;python3 RUN_THIS.py&amp;lt;/code&amp;gt;). Это должно занять несколько секунд, так что если все мгновенно прекратится, то, вероятно, Вы не используете [https://www.python.org/downloads/ Python 3.7+] или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Windows и при попытке выполнить приведенную выше команду Вас перенаправляет в Microsoft Store или Вы получаете сообщение в терминале о том, что Python не установлен, необходимо отключить shortcut Microsoft, который может вызывать эту проблему. Это можно сделать, найдя в поиске Windows команду &amp;lt;code&amp;gt;Manage App Execution Aliases&amp;lt;/code&amp;gt;, а затем отключив две точки привязки Python.&lt;br /&gt;
&lt;br /&gt;
Если Вы все же хотите модифицировать движок напрямую или обновлять подмодуль вручную (автоматическое обновление иногда доставляет неудобства), создайте файл &amp;lt;code&amp;gt;DISABLE_SUBMODULE_AUTOUPDATE&amp;lt;/code&amp;gt; в каталоге &amp;lt;code&amp;gt;BuildChecker/.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам, Вам понадобится вручную обновить RobustToolbox, Вы можете использовать &amp;lt;code&amp;gt;cd RobustToolbox; git checkout v0.4.87&amp;lt;/code&amp;gt; (замените &amp;lt;code&amp;gt;v0.4.87&amp;lt;/code&amp;gt; на последнюю версию RobustToolbox), затем Вы можете использовать &amp;lt;code&amp;gt;cd..\&amp;lt;/code&amp;gt;, чтобы вернуться в репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
Branch&#039;и очень и очень важны. По сути, они представляют собой лист изменений в коде (commit&#039;ов). По умолчанию используется branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При работе с кодом Вы всегда находитесь в branch&#039;е, и Вы можете легко менять branch, в котором работаете.&lt;br /&gt;
&lt;br /&gt;
Как правило, branch&#039;и называются по имени того, над чем Вы собираетесь в них работать, но на самом деле не имеет значения, как они называются.&lt;br /&gt;
&lt;br /&gt;
Branch&#039;ей можно создавать сколько угодно. Когда Вы создаете branch, он ответвляется от текущего branch&#039;а и становится самостоятельным объектом, в который можно добавлять commit&#039;ы.&lt;br /&gt;
[[Файл:BranchDiagram.png|мини|центр|Каждый маленький узел - это отдельный commit, а каждый цвет - отдельный branch.]]&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
Технически, конечно, можно просто делать всю работу в одном branch&#039;е и отправлять Merge Request&#039;ы оттуда. Но создание различных branch&#039;ей позволяет легко понять, где Вы находитесь, сколько изменений внесли, и дает возможность работать над несколькими особенностями(новым содержимым) одновременно.&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
Создавать branch&#039;и довольно просто. Давайте создадим новый branch под названием &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashNewBranchCommand.png|мини|центр]]&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;git checkout&amp;lt;/code&amp;gt; здесь означает &amp;quot;проверь этот branch, и создай его, если он не существует&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Переключаться между branch&#039;ами довольно просто: это называется проверкой branch&#039;а. При этом локальные файлы и папки будут изменены в соответствии с веткой, поэтому Git будет кричать на Вас, если у Вас есть локальные изменения, а Вы пытаетесь выполнить проверку.&lt;br /&gt;
&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckoutBranchCommand.png|мини|центр]]&lt;br /&gt;
Ну а затем внесите любые локальные изменения! Это не имеет значения. Создайте новый файл, удалите всё, измените одну строку в файле и т.д. Это не повлияет на Ваш главный branch, потому что теперь это территория &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;!&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
Branche&#039;и важны, поскольку их можно объединять. Так происходит интеграция функций в основную ветку. Merge означает &amp;quot;взять особые commit&#039;ы из этого branch&#039;а и применить их к другому branch&#039;у&amp;quot;. Вы можете объединить любые два branch&#039;а.&lt;br /&gt;
&lt;br /&gt;
Иногда это происходит не совсем удачно, поскольку обе ветки изменяют одну и ту же часть файла противоречивыми способами, и в этом случае возникает конфликт слияния - подробнее об этом в приложениях.&lt;br /&gt;
&lt;br /&gt;
GitLab Merge Request - это, по сути, &amp;quot;запрос на объединение&amp;quot;: Вы говорите, что хотите объединить commit&#039;ы своего branch&#039;а с другим branch&#039;ом, обычно главным. Подробнее об этом позже.&lt;br /&gt;
&lt;br /&gt;
Merge Request&#039;ы очень хорошо отображают всю эту информацию:&lt;br /&gt;
[[Файл:MergeRequestExampleImage.png|мини|центр]]&lt;br /&gt;
[[Файл:MergeRequestExampleCommitsImage.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
Commit&#039;ы - это просто упакованные изменения в коде. Как разработчик, Вы выбираете, какие изменения войдут в commit и когда их вносить в branch. Commiting - это создание commit&#039;а, который, по сути, является точкой сохранения, к которой можно вернуться в любое время.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы имеют автора, временную метку, сообщение и некоторые изменения кода, прикрепленные к ним. Они также имеют очень длинный &amp;quot;commit hash&amp;quot; - уникальный идентификатор, используемый для ссылки на различные коммиты.&lt;br /&gt;
&lt;br /&gt;
Благодаря commit&#039;ам строится история - Вы можете просмотреть историю каждого коммита, сделанного в репозитории SS14 с самого начала, что очень здорово.&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
Один важный момент: прежде чем отправлять изменения в commit, необходимо добавить их в область staging&#039;а. Это означает, что Вы указываете, какие файлы хотите добавить в commit. Это полезно, поскольку Вы почти никогда не захотите commit&#039;ить изменения подмодулей, так что Вы просто не добавляете их в область staging&#039;а.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы всегда сопровождаются сообщением, которое представляет собой краткое, содержательное описание того, что было сделано в данном commit&#039;е. Или Вы можете быть &amp;quot;Чадом&amp;quot;(страна) и называть каждый коммит &amp;quot;меняет всякое&amp;quot; - на Ваше усмотрение.&lt;br /&gt;
&lt;br /&gt;
Если Вы хотите посмотреть, что Вы изменили в данный момент, а что находится в области staging&#039;а, то это довольно просто:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckStatusCommand.png|мини|центр]]&lt;br /&gt;
Теперь, когда Вы убедились, что все эти изменения выглядят хорошо, мы добавим их в область staging&#039;а и сделаем commit с ними:&lt;br /&gt;
[[Файл:GitBashStashAndCommitCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда изменения были добавлены в commit и отправлены в branch, они навсегда (вроде как) остаются в истории branch&#039;а. Теперь мы можем сделать многое: объединить(merge) нашу &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; с нашим локальным мастер-branch&#039;ем (если захотим, по какой-то причине), загрузить (push) наш branch &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; в наш удалённый репозиторий, или полностью удалить ветку. Мы выберем push и сделаем Merge Request.&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
Merge Request означает, что Вы хотите, чтобы кодовая база объединила Ваши изменения в одного из Ваших branch&#039;ей в один из их branch&#039;ей. Прежде чем мы сможем это сделать, наш удаленный репозиторий GitLab (origin) должен знать о красивых branch&#039;ах и commit&#039;ах, которые мы создали локально, поэтому мы push&#039;им эти изменения на удаленный репозиторий.&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
Имейте в виду, что при использовании этих команд Git, скорее всего, запросит Ваши учетные данные GitLab, чтобы убедиться в том, что Вы имеете право выполнять push на этот удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
При отправке изменений мы указываем удалённый репозиторий, в который мы их отправляем, и локальный branch, из которого мы их отправляем. Все достаточно просто.&lt;br /&gt;
&lt;br /&gt;
Push&#039;им наш branch в удалённый репозиторий (origin):&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPushCommand.png|мини|центр]]&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
Весёлая часть. Отправляемся на GitLab и создаём наш Merge Request:&lt;br /&gt;
[[Файл:GitLabFunnyFeatureMergeRequestButton.png|мини|центр]]&lt;br /&gt;
Добавьте описание, красивое название, несколько скриншотов, и, надеюсь, оно будет merge&#039;нуто.&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
Возможно, прошло уже много времени, неделя или две, с момента Вашего последнего Merge Request&#039;а, и Вы хотите сделать еще один. Прежде чем что-либо делать, необходимо загрузить (pull) изменения кода из основного репозитория SS14 в свой локальный репозиторий. В противном случае Вы получите устаревший код, а Ваши локальные изменения могут не соответствовать тому, как игра будет работать на самом деле - Вы даже можете получить конфликты слияния при попытке MR.&lt;br /&gt;
&lt;br /&gt;
Существует два способа обновления репозитория. Оба способа предполагают, что Вы правильно настроили доступ к удалённому репозиторию - если это не так, вернитесь к предыдущему пункту руководства.&lt;br /&gt;
&lt;br /&gt;
Первый способ, fetch+merge, дает больше возможностей для контроля, но может быть запутанным. Второй метод, pull, прост и удобен, но не дает большого контроля. Однако, как правило, pull - это все, что вам нужно.&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
Pulling означает получение (fetching) новых веток и commit&#039;ов из удаленного репозитория, а затем их слияние с branch&#039;ем. Pulling часто проще, поскольку Git имеет хорошую систему автоматического определения того, из какого удаленного репозитория Вы хотите получить изменения (но она не всегда работает корректно).&lt;br /&gt;
&lt;br /&gt;
Мы будем pull&#039;ить с нашего удалённого репозитория &amp;lt;code&amp;gt;upstream&amp;lt;/code&amp;gt; и попросим его объединиться с нашим локальным branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
Сначала, Вам надо сделать checkout Вашего branch&#039;а. Об этом мы рассказывали ранее. Затем:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPullUpstreamCommand.png|мини|центр]]&lt;br /&gt;
Делайте это регулярно и всегда до начала работы над новым branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
Вы более или менее изучили рабочий процесс разработки функций для SS14 с точки зрения Git, но вот некоторые вещи, которые я хотел бы вбить Вам в голову:&lt;br /&gt;
&lt;br /&gt;
* При создании новой функциональности всегда создавайте новый branch от главного, прежде чем commit&#039;ить что-либо. Если Вы случайно за-commit&#039;ите изменения физики в branch с велосипедным клаксоном, Вам не поздоровится, но это поправимо.&lt;br /&gt;
* Никогда, никогда не фиксируйте RobustToolbox или подмодули типа Lidgren.Network, если Вы не знаете, что делаете. В локальном репозитории верхнего уровня эти подмодули считаются &amp;quot;файлами&amp;quot;, поэтому их легко случайно отправить на staging и сделать commit с ними. Не делайте этого. О том, как исправить свои ошибки, если это произошло, см. ниже.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
В качестве справочного материала здесь приведен небольшой глоссарий понятий и терминов Git, объясняющий их более подробно и в одном месте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Branches&#039;&#039;&#039; - это автономные версии кодовой базы, в которые можно добавлять коммиты. По умолчанию используется ветка master, но их можно создавать сколько угодно.&lt;br /&gt;
&#039;&#039;&#039;Репозитории&#039;&#039;&#039; - это папки, в которых с помощью Git можно вносить изменения и отслеживать их. Локальные репозитории - это репозитории, которые находятся у Вас на компьютере, а удаленные репозитории - это репозитории, расположенные на таких сайтах, как GitLab Репозитории состоят из множества веток.&lt;br /&gt;
&#039;&#039;&#039;Remotes&#039;&#039;&#039; - это названия и ссылки на удаленные репозитории, которые может использовать Ваш локальный репозиторий.&lt;br /&gt;
&#039;&#039;&#039;Подмодули&#039;&#039;&#039; - это репозитории, которые находятся внутри другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Forks&#039;&#039;&#039; - это репозитории, основанные на другом репозитории. Если Вы собираетесь сделать Merge Request для SS14, Вам необходимо сначала сделать Fork.&lt;br /&gt;
&#039;&#039;&#039;The working tree&#039;&#039;&#039; - это все файлы, папки и т.п., находящиеся в репозитории.&lt;br /&gt;
&#039;&#039;&#039;Staging&#039;&#039;&#039; означает добавление (с помощью git add) изменений в &#039;staging area&#039;, где с ними могут быть выполнены некоторые действия&lt;br /&gt;
&#039;&#039;&#039;Commits&#039;&#039;&#039; - это изменения рабочего дерева репозитория в определенный момент времени. По сути, это точка сохранения. Commit - это просто список файлов, которые были изменены с момента последнего коммита, а изменения, которые были commit&#039;нуты, - это изменения, которые Вы отправили в staging area.&lt;br /&gt;
&#039;&#039;&#039;Checking out&#039;&#039;&#039; - это переключение на другой branch, чтобы работать с ним или просматривать его изменения локально.&lt;br /&gt;
&#039;&#039;&#039;Merging&#039;&#039;&#039; - это интеграция изменений из одного branch&#039;а в другой.&lt;br /&gt;
Конфликты merge&#039;а&amp;quot; возникают, когда интеграция изменений из одного branch&#039;а в другой не может быть выполнена автоматически, поскольку они оба изменяют одну и ту же область в файле, или их изменения взаимоисключают друг друга каким-либо другим способом.&lt;br /&gt;
&#039;&#039;&#039;Fetching&#039;&#039;&#039; означает получение branch&#039;ей и commit&#039;ов удаленного репозитория, но на самом деле... еще ничего с ними не делая. Они будут просто обновлены, если вы захотите проверить или объединить их позже.&lt;br /&gt;
&#039;&#039;&#039;Pulling&#039;&#039;&#039; - это акт интеграции изменений из branch&#039;а удаленного репозитория в Ваш локальный branch.&lt;br /&gt;
Merge Requests&amp;quot; - это действие, позволяющее запросить слияние Вашего локального branch&#039;а и всех его изменений с branch&#039;а другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Pushing&#039;&#039;&#039; - это действие по интеграции локальных изменений в удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
Некоторые вещи я не рассмотрел, но они почти неизбежно понадобятся Вам в какой-то момент. Я расскажу обо всем этом исключительно как о командах git в Git Bash, но в других программах разобраться несложно (те же ключевые слова, просто ищите их). &lt;br /&gt;
&lt;br /&gt;
Одно замечание, поскольку оно часто встречается здесь: HEAD - это модное название commit&#039;а, на котором Вы сейчас находитесь.&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
Вредный маленький maintainer сказал вам &amp;quot;разрешить конфликты&amp;quot;, иначе ваш MR &amp;quot;не будет merge&#039;нут&amp;quot;. Вот ведь сволочь! К счастью, это не так уж сложно.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно обновить главный локальный branch. Как это сделать, см. выше.&lt;br /&gt;
&lt;br /&gt;
Когда Вы выполните команду &amp;lt;code&amp;gt;git merge master [локальный branch]&amp;lt;/code&amp;gt;, она либо сделает это без ошибок (&amp;quot;ура&amp;quot;), либо сообщит Вам, что необходимо разрешить конфликты (ужас).&lt;br /&gt;
&lt;br /&gt;
Для разрешения конфликтов вручную достаточно зайти в конфликтующие файлы, удалить всю ерунду типа &amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;HEAD&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;===== &amp;lt;&amp;lt;&amp;lt;&amp;lt;master&amp;lt;/code&amp;gt; (просто указывает, откуда произошли изменения), а затем отредактировать файл так, чтобы он правильно объединял оба набора изменений. Иногда это легко, иногда трудно. Если это сложно, то Вы, вероятно, знаете, что делаете. После этого просто выполните команду &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
У Atlassian есть [https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts очень хорошее руководство] по этому вопросу.&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
&amp;lt;code&amp;gt;git log --oneline&amp;lt;/code&amp;gt; - это Ваш друг. Он показывает короткие hashe&#039;и commit&#039;ов (уникальные идентификаторы), их сообщения, а также их branch&#039;и и tag&#039;и.&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
Возможно, Вы случайно внесли ненужные изменения, и Вам не хочется возиться с созданием совершенно новой ветки или еще чего-нибудь, но Вы еще не сделали commit с ними.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это означает &amp;quot;изменить working tree на текущий commit, до внесения любых локальных изменений. Вы не сможете восстановить локальные изменения, если сделаете это, так что будьте осторожны.&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;br /&gt;
Вот черт, Ваша эротика про ксеноморфа попала в commit или Вы случайно commit&#039;нули подмодуль! Что теперь? Есть решения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git revert HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это создаст новый commit, отменяющий текущий commit, и затем commit&#039;нет его. Хе-хе, commit.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1059</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1059"/>
		<updated>2023-09-27T20:56:01Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: /* Что такое branch? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
В тексте будет часто упоминаться GitLab - аналог GitHub, которым также пользуется Workbench Team. Принципиальной разницы нет, все шаги возможны и на GitHub, но лично мне удобнее работать с GitLab.&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
Для работы с Git для SS14 Вам понадобятся:&lt;br /&gt;
* [https://git-scm.com/downloads Git]&lt;br /&gt;
** Если Вы хотите использовать Git только в консоли, поставьте галочку при установке:&lt;br /&gt;
[[Файл:GitBash.png|мини|центр]]&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.7+]&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Linux, то, скорее всего, будете использовать Git через терминал или выбранную Вами IDE, и, возможно, он у Вас уже установлен.&lt;br /&gt;
&lt;br /&gt;
Некоторые IDE имеют в себе интеграцию Git, но этом руководстве будет информация &#039;&#039;&#039;только&#039;&#039;&#039; об использовании &#039;&#039;приложений&#039;&#039; [[Git для разработчика SS14#Git_Bash|Git Bash]] и [[Git для разработчика SS14#Fork|Fork]].&lt;br /&gt;
&lt;br /&gt;
=== Fork ===&lt;br /&gt;
[https://git-fork.com/ Fork] — быстрый и удобный Git-клиент, позволяющий делать всё, что можно в консоли, но удобнее.&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
Репозиторий - это просто база кода. Репозитории содержат branch&#039;и, а эти branch&#039;и содержат различные commit&#039;ы. Возможно, Вы слышали об этих двух понятиях - подробнее о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Удаленный репозиторий - это просто репозиторий на GitLab. Локальный репозиторий - это тот, который находится на Вашем компьютере.&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
Сперва давайте создадим собственный Fork удаленного репозитория Space Station 14. Для этого, конечно же, потребуется учетная запись GitLab. Forking означает, что Вы копируете всю историю и изменения репозитория в свой собственный удаленный репозиторий, чтобы иметь возможность свободно работать с кодом.&lt;br /&gt;
&lt;br /&gt;
Ваш удаленный репозиторий не будет автоматически обновляться изменениями из оригинального репозитория SS14 - Вам придется делать это самостоятельно, о чем будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Перейдите в наш репозиторий Space Station 14([https://github.com/Workbench-Team/space-station-14 GitHub], [https://git.arumoon.ru/Workbench-Team/space-station-14 GitLab]) и нажмите здесь:&lt;br /&gt;
[[Файл:ForksButton.png|мини|центр]]&lt;br /&gt;
Затем Вас спросят как назвать Fork - просто назовите его как угодно! Но если Вы хотите просто помочь в разработке, я бы выбрал space-station-14.&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
Теперь нам нужно загрузить наш удаленный репозиторий на компьютер (клонировать), чтобы мы могли внести в него некоторые изменения. Технически, Вы можете изменять репозиторий удалённо (на GitLab есть неплохие инструменты), но наличие его на Вашем компьютере означает, что Вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также легко работаете с Git.&lt;br /&gt;
&lt;br /&gt;
Для каждого шага будут приведены скриншоты и инструкции для Git Bash и Fork для Windows.&lt;br /&gt;
===== GitBash: =====&lt;br /&gt;
Перейдите в то место на Вашем компьютере, где Вы хотите разместить локальный репозиторий, и:&lt;br /&gt;
[[Файл:GitBashHere.png|мини|центр]]&lt;br /&gt;
Выберите какой репозиторий клонировать:&lt;br /&gt;
[[Файл:GitBashCloneCommand.png|мини|центр]]&lt;br /&gt;
Проделайте команду &amp;lt;code&amp;gt;git remote add upstream&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Обратите на это внимание! Если этого не сделать, то при попытке сборки игры вы получите множество странных ошибок о недоступности тех или иных модулей.&lt;br /&gt;
&lt;br /&gt;
В Space Station 14 есть много подмодулей - в первую очередь, движок RobustToolbox. Подмодули - это просто репозитории внутри репозитория, и их нужно обновлять вручную. А нужно ли?&lt;br /&gt;
&lt;br /&gt;
У нас есть автоматическая программа обновления подмодулей, так что Вам не нужно постоянно выполнять &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt; (команда для ручного обновления подмодулей).&lt;br /&gt;
&lt;br /&gt;
Запустите &amp;lt;code&amp;gt;RUN_THIS.py&amp;lt;/code&amp;gt; внутри репозитория, который Вы скачали, с помощью Python. Желательно, из терминала (&amp;lt;code&amp;gt;python RUN_THIS.py&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;python3 RUN_THIS.py&amp;lt;/code&amp;gt;). Это должно занять несколько секунд, так что если все мгновенно прекратится, то, вероятно, Вы не используете [https://www.python.org/downloads/ Python 3.7+] или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Windows и при попытке выполнить приведенную выше команду Вас перенаправляет в Microsoft Store или Вы получаете сообщение в терминале о том, что Python не установлен, необходимо отключить shortcut Microsoft, который может вызывать эту проблему. Это можно сделать, найдя в поиске Windows команду &amp;lt;code&amp;gt;Manage App Execution Aliases&amp;lt;/code&amp;gt;, а затем отключив две точки привязки Python.&lt;br /&gt;
&lt;br /&gt;
Если Вы все же хотите модифицировать движок напрямую или обновлять подмодуль вручную (автоматическое обновление иногда доставляет неудобства), создайте файл &amp;lt;code&amp;gt;DISABLE_SUBMODULE_AUTOUPDATE&amp;lt;/code&amp;gt; в каталоге &amp;lt;code&amp;gt;BuildChecker/.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам, Вам понадобится вручную обновить RobustToolbox, Вы можете использовать &amp;lt;code&amp;gt;cd RobustToolbox; git checkout v0.4.87&amp;lt;/code&amp;gt; (замените &amp;lt;code&amp;gt;v0.4.87&amp;lt;/code&amp;gt; на последнюю версию RobustToolbox), затем Вы можете использовать &amp;lt;code&amp;gt;cd..\&amp;lt;/code&amp;gt;, чтобы вернуться в репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
Branch&#039;и очень и очень важны. По сути, они представляют собой лист изменений в коде (commit&#039;ов). По умолчанию используется branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При работе с кодом Вы всегда находитесь в branch&#039;е, и Вы можете легко менять branch, в котором работаете.&lt;br /&gt;
&lt;br /&gt;
Как правило, branch&#039;и называются по имени того, над чем Вы собираетесь в них работать, но на самом деле не имеет значения, как они называются.&lt;br /&gt;
&lt;br /&gt;
Branch&#039;ей можно создавать сколько угодно. Когда Вы создаете branch, он ответвляется от текущего branch&#039;а и становится самостоятельным объектом, в который можно добавлять commit&#039;ы.&lt;br /&gt;
[[Файл:BranchDiagram.png|центр|Каждый маленький узел - это отдельный commit, а каждый цвет - отдельный branch.]]&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
Технически, конечно, можно просто делать всю работу в одном branch&#039;е и отправлять Merge Request&#039;ы оттуда. Но создание различных branch&#039;ей позволяет легко понять, где Вы находитесь, сколько изменений внесли, и дает возможность работать над несколькими особенностями(новым содержимым) одновременно.&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
Создавать branch&#039;и довольно просто. Давайте создадим новый branch под названием &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashNewBranchCommand.png|мини|центр]]&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;git checkout&amp;lt;/code&amp;gt; здесь означает &amp;quot;проверь этот branch, и создай его, если он не существует&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Переключаться между branch&#039;ами довольно просто: это называется проверкой branch&#039;а. При этом локальные файлы и папки будут изменены в соответствии с веткой, поэтому Git будет кричать на Вас, если у Вас есть локальные изменения, а Вы пытаетесь выполнить проверку.&lt;br /&gt;
&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckoutBranchCommand.png|мини|центр]]&lt;br /&gt;
Ну а затем внесите любые локальные изменения! Это не имеет значения. Создайте новый файл, удалите всё, измените одну строку в файле и т.д. Это не повлияет на Ваш главный branch, потому что теперь это территория &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;!&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
Branche&#039;и важны, поскольку их можно объединять. Так происходит интеграция функций в основную ветку. Merge означает &amp;quot;взять особые commit&#039;ы из этого branch&#039;а и применить их к другому branch&#039;у&amp;quot;. Вы можете объединить любые два branch&#039;а.&lt;br /&gt;
&lt;br /&gt;
Иногда это происходит не совсем удачно, поскольку обе ветки изменяют одну и ту же часть файла противоречивыми способами, и в этом случае возникает конфликт слияния - подробнее об этом в приложениях.&lt;br /&gt;
&lt;br /&gt;
GitLab Merge Request - это, по сути, &amp;quot;запрос на объединение&amp;quot;: Вы говорите, что хотите объединить commit&#039;ы своего branch&#039;а с другим branch&#039;ом, обычно главным. Подробнее об этом позже.&lt;br /&gt;
&lt;br /&gt;
Merge Request&#039;ы очень хорошо отображают всю эту информацию:&lt;br /&gt;
[[Файл:MergeRequestExampleImage.png|мини|центр]]&lt;br /&gt;
[[Файл:MergeRequestExampleCommitsImage.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
Commit&#039;ы - это просто упакованные изменения в коде. Как разработчик, Вы выбираете, какие изменения войдут в commit и когда их вносить в branch. Commiting - это создание commit&#039;а, который, по сути, является точкой сохранения, к которой можно вернуться в любое время.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы имеют автора, временную метку, сообщение и некоторые изменения кода, прикрепленные к ним. Они также имеют очень длинный &amp;quot;commit hash&amp;quot; - уникальный идентификатор, используемый для ссылки на различные коммиты.&lt;br /&gt;
&lt;br /&gt;
Благодаря commit&#039;ам строится история - Вы можете просмотреть историю каждого коммита, сделанного в репозитории SS14 с самого начала, что очень здорово.&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
Один важный момент: прежде чем отправлять изменения в commit, необходимо добавить их в область staging&#039;а. Это означает, что Вы указываете, какие файлы хотите добавить в commit. Это полезно, поскольку Вы почти никогда не захотите commit&#039;ить изменения подмодулей, так что Вы просто не добавляете их в область staging&#039;а.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы всегда сопровождаются сообщением, которое представляет собой краткое, содержательное описание того, что было сделано в данном commit&#039;е. Или Вы можете быть &amp;quot;Чадом&amp;quot;(страна) и называть каждый коммит &amp;quot;меняет всякое&amp;quot; - на Ваше усмотрение.&lt;br /&gt;
&lt;br /&gt;
Если Вы хотите посмотреть, что Вы изменили в данный момент, а что находится в области staging&#039;а, то это довольно просто:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckStatusCommand.png|мини|центр]]&lt;br /&gt;
Теперь, когда Вы убедились, что все эти изменения выглядят хорошо, мы добавим их в область staging&#039;а и сделаем commit с ними:&lt;br /&gt;
[[Файл:GitBashStashAndCommitCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда изменения были добавлены в commit и отправлены в branch, они навсегда (вроде как) остаются в истории branch&#039;а. Теперь мы можем сделать многое: объединить(merge) нашу &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; с нашим локальным мастер-branch&#039;ем (если захотим, по какой-то причине), загрузить (push) наш branch &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; в наш удалённый репозиторий, или полностью удалить ветку. Мы выберем push и сделаем Merge Request.&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
Merge Request означает, что Вы хотите, чтобы кодовая база объединила Ваши изменения в одного из Ваших branch&#039;ей в один из их branch&#039;ей. Прежде чем мы сможем это сделать, наш удаленный репозиторий GitLab (origin) должен знать о красивых branch&#039;ах и commit&#039;ах, которые мы создали локально, поэтому мы push&#039;им эти изменения на удаленный репозиторий.&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
Имейте в виду, что при использовании этих команд Git, скорее всего, запросит Ваши учетные данные GitLab, чтобы убедиться в том, что Вы имеете право выполнять push на этот удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
При отправке изменений мы указываем удалённый репозиторий, в который мы их отправляем, и локальный branch, из которого мы их отправляем. Все достаточно просто.&lt;br /&gt;
&lt;br /&gt;
Push&#039;им наш branch в удалённый репозиторий (origin):&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPushCommand.png|мини|центр]]&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
Весёлая часть. Отправляемся на GitLab и создаём наш Merge Request:&lt;br /&gt;
[[Файл:GitLabFunnyFeatureMergeRequestButton.png|мини|центр]]&lt;br /&gt;
Добавьте описание, красивое название, несколько скриншотов, и, надеюсь, оно будет merge&#039;нуто.&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
Возможно, прошло уже много времени, неделя или две, с момента Вашего последнего Merge Request&#039;а, и Вы хотите сделать еще один. Прежде чем что-либо делать, необходимо загрузить (pull) изменения кода из основного репозитория SS14 в свой локальный репозиторий. В противном случае Вы получите устаревший код, а Ваши локальные изменения могут не соответствовать тому, как игра будет работать на самом деле - Вы даже можете получить конфликты слияния при попытке MR.&lt;br /&gt;
&lt;br /&gt;
Существует два способа обновления репозитория. Оба способа предполагают, что Вы правильно настроили доступ к удалённому репозиторию - если это не так, вернитесь к предыдущему пункту руководства.&lt;br /&gt;
&lt;br /&gt;
Первый способ, fetch+merge, дает больше возможностей для контроля, но может быть запутанным. Второй метод, pull, прост и удобен, но не дает большого контроля. Однако, как правило, pull - это все, что вам нужно.&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
Pulling означает получение (fetching) новых веток и commit&#039;ов из удаленного репозитория, а затем их слияние с branch&#039;ем. Pulling часто проще, поскольку Git имеет хорошую систему автоматического определения того, из какого удаленного репозитория Вы хотите получить изменения (но она не всегда работает корректно).&lt;br /&gt;
&lt;br /&gt;
Мы будем pull&#039;ить с нашего удалённого репозитория &amp;lt;code&amp;gt;upstream&amp;lt;/code&amp;gt; и попросим его объединиться с нашим локальным branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
Сначала, Вам надо сделать checkout Вашего branch&#039;а. Об этом мы рассказывали ранее. Затем:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPullUpstreamCommand.png|мини|центр]]&lt;br /&gt;
Делайте это регулярно и всегда до начала работы над новым branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
Вы более или менее изучили рабочий процесс разработки функций для SS14 с точки зрения Git, но вот некоторые вещи, которые я хотел бы вбить Вам в голову:&lt;br /&gt;
&lt;br /&gt;
* При создании новой функциональности всегда создавайте новый branch от главного, прежде чем commit&#039;ить что-либо. Если Вы случайно за-commit&#039;ите изменения физики в branch с велосипедным клаксоном, Вам не поздоровится, но это поправимо.&lt;br /&gt;
* Никогда, никогда не фиксируйте RobustToolbox или подмодули типа Lidgren.Network, если Вы не знаете, что делаете. В локальном репозитории верхнего уровня эти подмодули считаются &amp;quot;файлами&amp;quot;, поэтому их легко случайно отправить на staging и сделать commit с ними. Не делайте этого. О том, как исправить свои ошибки, если это произошло, см. ниже.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
В качестве справочного материала здесь приведен небольшой глоссарий понятий и терминов Git, объясняющий их более подробно и в одном месте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Branches&#039;&#039;&#039; - это автономные версии кодовой базы, в которые можно добавлять коммиты. По умолчанию используется ветка master, но их можно создавать сколько угодно.&lt;br /&gt;
&#039;&#039;&#039;Репозитории&#039;&#039;&#039; - это папки, в которых с помощью Git можно вносить изменения и отслеживать их. Локальные репозитории - это репозитории, которые находятся у Вас на компьютере, а удаленные репозитории - это репозитории, расположенные на таких сайтах, как GitLab Репозитории состоят из множества веток.&lt;br /&gt;
&#039;&#039;&#039;Remotes&#039;&#039;&#039; - это названия и ссылки на удаленные репозитории, которые может использовать Ваш локальный репозиторий.&lt;br /&gt;
&#039;&#039;&#039;Подмодули&#039;&#039;&#039; - это репозитории, которые находятся внутри другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Forks&#039;&#039;&#039; - это репозитории, основанные на другом репозитории. Если Вы собираетесь сделать Merge Request для SS14, Вам необходимо сначала сделать Fork.&lt;br /&gt;
&#039;&#039;&#039;The working tree&#039;&#039;&#039; - это все файлы, папки и т.п., находящиеся в репозитории.&lt;br /&gt;
&#039;&#039;&#039;Staging&#039;&#039;&#039; означает добавление (с помощью git add) изменений в &#039;staging area&#039;, где с ними могут быть выполнены некоторые действия&lt;br /&gt;
&#039;&#039;&#039;Commits&#039;&#039;&#039; - это изменения рабочего дерева репозитория в определенный момент времени. По сути, это точка сохранения. Commit - это просто список файлов, которые были изменены с момента последнего коммита, а изменения, которые были commit&#039;нуты, - это изменения, которые Вы отправили в staging area.&lt;br /&gt;
&#039;&#039;&#039;Checking out&#039;&#039;&#039; - это переключение на другой branch, чтобы работать с ним или просматривать его изменения локально.&lt;br /&gt;
&#039;&#039;&#039;Merging&#039;&#039;&#039; - это интеграция изменений из одного branch&#039;а в другой.&lt;br /&gt;
Конфликты merge&#039;а&amp;quot; возникают, когда интеграция изменений из одного branch&#039;а в другой не может быть выполнена автоматически, поскольку они оба изменяют одну и ту же область в файле, или их изменения взаимоисключают друг друга каким-либо другим способом.&lt;br /&gt;
&#039;&#039;&#039;Fetching&#039;&#039;&#039; означает получение branch&#039;ей и commit&#039;ов удаленного репозитория, но на самом деле... еще ничего с ними не делая. Они будут просто обновлены, если вы захотите проверить или объединить их позже.&lt;br /&gt;
&#039;&#039;&#039;Pulling&#039;&#039;&#039; - это акт интеграции изменений из branch&#039;а удаленного репозитория в Ваш локальный branch.&lt;br /&gt;
Merge Requests&amp;quot; - это действие, позволяющее запросить слияние Вашего локального branch&#039;а и всех его изменений с branch&#039;а другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Pushing&#039;&#039;&#039; - это действие по интеграции локальных изменений в удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
Некоторые вещи я не рассмотрел, но они почти неизбежно понадобятся Вам в какой-то момент. Я расскажу обо всем этом исключительно как о командах git в Git Bash, но в других программах разобраться несложно (те же ключевые слова, просто ищите их). &lt;br /&gt;
&lt;br /&gt;
Одно замечание, поскольку оно часто встречается здесь: HEAD - это модное название commit&#039;а, на котором Вы сейчас находитесь.&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
Вредный маленький maintainer сказал вам &amp;quot;разрешить конфликты&amp;quot;, иначе ваш MR &amp;quot;не будет merge&#039;нут&amp;quot;. Вот ведь сволочь! К счастью, это не так уж сложно.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно обновить главный локальный branch. Как это сделать, см. выше.&lt;br /&gt;
&lt;br /&gt;
Когда Вы выполните команду &amp;lt;code&amp;gt;git merge master [локальный branch]&amp;lt;/code&amp;gt;, она либо сделает это без ошибок (&amp;quot;ура&amp;quot;), либо сообщит Вам, что необходимо разрешить конфликты (ужас).&lt;br /&gt;
&lt;br /&gt;
Для разрешения конфликтов вручную достаточно зайти в конфликтующие файлы, удалить всю ерунду типа &amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;HEAD&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;===== &amp;lt;&amp;lt;&amp;lt;&amp;lt;master&amp;lt;/code&amp;gt; (просто указывает, откуда произошли изменения), а затем отредактировать файл так, чтобы он правильно объединял оба набора изменений. Иногда это легко, иногда трудно. Если это сложно, то Вы, вероятно, знаете, что делаете. После этого просто выполните команду &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
У Atlassian есть [https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts очень хорошее руководство] по этому вопросу.&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
&amp;lt;code&amp;gt;git log --oneline&amp;lt;/code&amp;gt; - это Ваш друг. Он показывает короткие hashe&#039;и commit&#039;ов (уникальные идентификаторы), их сообщения, а также их branch&#039;и и tag&#039;и.&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
Возможно, Вы случайно внесли ненужные изменения, и Вам не хочется возиться с созданием совершенно новой ветки или еще чего-нибудь, но Вы еще не сделали commit с ними.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это означает &amp;quot;изменить working tree на текущий commit, до внесения любых локальных изменений. Вы не сможете восстановить локальные изменения, если сделаете это, так что будьте осторожны.&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;br /&gt;
Вот черт, Ваша эротика про ксеноморфа попала в commit или Вы случайно commit&#039;нули подмодуль! Что теперь? Есть решения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git revert HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это создаст новый commit, отменяющий текущий commit, и затем commit&#039;нет его. Хе-хе, commit.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1058</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1058"/>
		<updated>2023-09-27T20:55:35Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: /* Что такое branch? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
В тексте будет часто упоминаться GitLab - аналог GitHub, которым также пользуется Workbench Team. Принципиальной разницы нет, все шаги возможны и на GitHub, но лично мне удобнее работать с GitLab.&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
Для работы с Git для SS14 Вам понадобятся:&lt;br /&gt;
* [https://git-scm.com/downloads Git]&lt;br /&gt;
** Если Вы хотите использовать Git только в консоли, поставьте галочку при установке:&lt;br /&gt;
[[Файл:GitBash.png|мини|центр]]&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.7+]&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Linux, то, скорее всего, будете использовать Git через терминал или выбранную Вами IDE, и, возможно, он у Вас уже установлен.&lt;br /&gt;
&lt;br /&gt;
Некоторые IDE имеют в себе интеграцию Git, но этом руководстве будет информация &#039;&#039;&#039;только&#039;&#039;&#039; об использовании &#039;&#039;приложений&#039;&#039; [[Git для разработчика SS14#Git_Bash|Git Bash]] и [[Git для разработчика SS14#Fork|Fork]].&lt;br /&gt;
&lt;br /&gt;
=== Fork ===&lt;br /&gt;
[https://git-fork.com/ Fork] — быстрый и удобный Git-клиент, позволяющий делать всё, что можно в консоли, но удобнее.&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
Репозиторий - это просто база кода. Репозитории содержат branch&#039;и, а эти branch&#039;и содержат различные commit&#039;ы. Возможно, Вы слышали об этих двух понятиях - подробнее о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Удаленный репозиторий - это просто репозиторий на GitLab. Локальный репозиторий - это тот, который находится на Вашем компьютере.&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
Сперва давайте создадим собственный Fork удаленного репозитория Space Station 14. Для этого, конечно же, потребуется учетная запись GitLab. Forking означает, что Вы копируете всю историю и изменения репозитория в свой собственный удаленный репозиторий, чтобы иметь возможность свободно работать с кодом.&lt;br /&gt;
&lt;br /&gt;
Ваш удаленный репозиторий не будет автоматически обновляться изменениями из оригинального репозитория SS14 - Вам придется делать это самостоятельно, о чем будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Перейдите в наш репозиторий Space Station 14([https://github.com/Workbench-Team/space-station-14 GitHub], [https://git.arumoon.ru/Workbench-Team/space-station-14 GitLab]) и нажмите здесь:&lt;br /&gt;
[[Файл:ForksButton.png|мини|центр]]&lt;br /&gt;
Затем Вас спросят как назвать Fork - просто назовите его как угодно! Но если Вы хотите просто помочь в разработке, я бы выбрал space-station-14.&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
Теперь нам нужно загрузить наш удаленный репозиторий на компьютер (клонировать), чтобы мы могли внести в него некоторые изменения. Технически, Вы можете изменять репозиторий удалённо (на GitLab есть неплохие инструменты), но наличие его на Вашем компьютере означает, что Вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также легко работаете с Git.&lt;br /&gt;
&lt;br /&gt;
Для каждого шага будут приведены скриншоты и инструкции для Git Bash и Fork для Windows.&lt;br /&gt;
===== GitBash: =====&lt;br /&gt;
Перейдите в то место на Вашем компьютере, где Вы хотите разместить локальный репозиторий, и:&lt;br /&gt;
[[Файл:GitBashHere.png|мини|центр]]&lt;br /&gt;
Выберите какой репозиторий клонировать:&lt;br /&gt;
[[Файл:GitBashCloneCommand.png|мини|центр]]&lt;br /&gt;
Проделайте команду &amp;lt;code&amp;gt;git remote add upstream&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Обратите на это внимание! Если этого не сделать, то при попытке сборки игры вы получите множество странных ошибок о недоступности тех или иных модулей.&lt;br /&gt;
&lt;br /&gt;
В Space Station 14 есть много подмодулей - в первую очередь, движок RobustToolbox. Подмодули - это просто репозитории внутри репозитория, и их нужно обновлять вручную. А нужно ли?&lt;br /&gt;
&lt;br /&gt;
У нас есть автоматическая программа обновления подмодулей, так что Вам не нужно постоянно выполнять &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt; (команда для ручного обновления подмодулей).&lt;br /&gt;
&lt;br /&gt;
Запустите &amp;lt;code&amp;gt;RUN_THIS.py&amp;lt;/code&amp;gt; внутри репозитория, который Вы скачали, с помощью Python. Желательно, из терминала (&amp;lt;code&amp;gt;python RUN_THIS.py&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;python3 RUN_THIS.py&amp;lt;/code&amp;gt;). Это должно занять несколько секунд, так что если все мгновенно прекратится, то, вероятно, Вы не используете [https://www.python.org/downloads/ Python 3.7+] или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Windows и при попытке выполнить приведенную выше команду Вас перенаправляет в Microsoft Store или Вы получаете сообщение в терминале о том, что Python не установлен, необходимо отключить shortcut Microsoft, который может вызывать эту проблему. Это можно сделать, найдя в поиске Windows команду &amp;lt;code&amp;gt;Manage App Execution Aliases&amp;lt;/code&amp;gt;, а затем отключив две точки привязки Python.&lt;br /&gt;
&lt;br /&gt;
Если Вы все же хотите модифицировать движок напрямую или обновлять подмодуль вручную (автоматическое обновление иногда доставляет неудобства), создайте файл &amp;lt;code&amp;gt;DISABLE_SUBMODULE_AUTOUPDATE&amp;lt;/code&amp;gt; в каталоге &amp;lt;code&amp;gt;BuildChecker/.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам, Вам понадобится вручную обновить RobustToolbox, Вы можете использовать &amp;lt;code&amp;gt;cd RobustToolbox; git checkout v0.4.87&amp;lt;/code&amp;gt; (замените &amp;lt;code&amp;gt;v0.4.87&amp;lt;/code&amp;gt; на последнюю версию RobustToolbox), затем Вы можете использовать &amp;lt;code&amp;gt;cd..\&amp;lt;/code&amp;gt;, чтобы вернуться в репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
Branch&#039;и очень и очень важны. По сути, они представляют собой лист изменений в коде (commit&#039;ов). По умолчанию используется branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При работе с кодом Вы всегда находитесь в branch&#039;е, и Вы можете легко менять branch, в котором работаете.&lt;br /&gt;
&lt;br /&gt;
Как правило, branch&#039;и называются по имени того, над чем Вы собираетесь в них работать, но на самом деле не имеет значения, как они называются.&lt;br /&gt;
&lt;br /&gt;
Branch&#039;ей можно создавать сколько угодно. Когда Вы создаете branch, он ответвляется от текущего branch&#039;а и становится самостоятельным объектом, в который можно добавлять commit&#039;ы.&lt;br /&gt;
[[Файл:BranchDiagram.png|мини|центр|Каждый маленький узел - это отдельный commit, а каждый цвет - отдельный branch.]]&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
Технически, конечно, можно просто делать всю работу в одном branch&#039;е и отправлять Merge Request&#039;ы оттуда. Но создание различных branch&#039;ей позволяет легко понять, где Вы находитесь, сколько изменений внесли, и дает возможность работать над несколькими особенностями(новым содержимым) одновременно.&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
Создавать branch&#039;и довольно просто. Давайте создадим новый branch под названием &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashNewBranchCommand.png|мини|центр]]&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;git checkout&amp;lt;/code&amp;gt; здесь означает &amp;quot;проверь этот branch, и создай его, если он не существует&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Переключаться между branch&#039;ами довольно просто: это называется проверкой branch&#039;а. При этом локальные файлы и папки будут изменены в соответствии с веткой, поэтому Git будет кричать на Вас, если у Вас есть локальные изменения, а Вы пытаетесь выполнить проверку.&lt;br /&gt;
&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckoutBranchCommand.png|мини|центр]]&lt;br /&gt;
Ну а затем внесите любые локальные изменения! Это не имеет значения. Создайте новый файл, удалите всё, измените одну строку в файле и т.д. Это не повлияет на Ваш главный branch, потому что теперь это территория &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;!&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
Branche&#039;и важны, поскольку их можно объединять. Так происходит интеграция функций в основную ветку. Merge означает &amp;quot;взять особые commit&#039;ы из этого branch&#039;а и применить их к другому branch&#039;у&amp;quot;. Вы можете объединить любые два branch&#039;а.&lt;br /&gt;
&lt;br /&gt;
Иногда это происходит не совсем удачно, поскольку обе ветки изменяют одну и ту же часть файла противоречивыми способами, и в этом случае возникает конфликт слияния - подробнее об этом в приложениях.&lt;br /&gt;
&lt;br /&gt;
GitLab Merge Request - это, по сути, &amp;quot;запрос на объединение&amp;quot;: Вы говорите, что хотите объединить commit&#039;ы своего branch&#039;а с другим branch&#039;ом, обычно главным. Подробнее об этом позже.&lt;br /&gt;
&lt;br /&gt;
Merge Request&#039;ы очень хорошо отображают всю эту информацию:&lt;br /&gt;
[[Файл:MergeRequestExampleImage.png|мини|центр]]&lt;br /&gt;
[[Файл:MergeRequestExampleCommitsImage.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
Commit&#039;ы - это просто упакованные изменения в коде. Как разработчик, Вы выбираете, какие изменения войдут в commit и когда их вносить в branch. Commiting - это создание commit&#039;а, который, по сути, является точкой сохранения, к которой можно вернуться в любое время.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы имеют автора, временную метку, сообщение и некоторые изменения кода, прикрепленные к ним. Они также имеют очень длинный &amp;quot;commit hash&amp;quot; - уникальный идентификатор, используемый для ссылки на различные коммиты.&lt;br /&gt;
&lt;br /&gt;
Благодаря commit&#039;ам строится история - Вы можете просмотреть историю каждого коммита, сделанного в репозитории SS14 с самого начала, что очень здорово.&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
Один важный момент: прежде чем отправлять изменения в commit, необходимо добавить их в область staging&#039;а. Это означает, что Вы указываете, какие файлы хотите добавить в commit. Это полезно, поскольку Вы почти никогда не захотите commit&#039;ить изменения подмодулей, так что Вы просто не добавляете их в область staging&#039;а.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы всегда сопровождаются сообщением, которое представляет собой краткое, содержательное описание того, что было сделано в данном commit&#039;е. Или Вы можете быть &amp;quot;Чадом&amp;quot;(страна) и называть каждый коммит &amp;quot;меняет всякое&amp;quot; - на Ваше усмотрение.&lt;br /&gt;
&lt;br /&gt;
Если Вы хотите посмотреть, что Вы изменили в данный момент, а что находится в области staging&#039;а, то это довольно просто:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckStatusCommand.png|мини|центр]]&lt;br /&gt;
Теперь, когда Вы убедились, что все эти изменения выглядят хорошо, мы добавим их в область staging&#039;а и сделаем commit с ними:&lt;br /&gt;
[[Файл:GitBashStashAndCommitCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда изменения были добавлены в commit и отправлены в branch, они навсегда (вроде как) остаются в истории branch&#039;а. Теперь мы можем сделать многое: объединить(merge) нашу &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; с нашим локальным мастер-branch&#039;ем (если захотим, по какой-то причине), загрузить (push) наш branch &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; в наш удалённый репозиторий, или полностью удалить ветку. Мы выберем push и сделаем Merge Request.&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
Merge Request означает, что Вы хотите, чтобы кодовая база объединила Ваши изменения в одного из Ваших branch&#039;ей в один из их branch&#039;ей. Прежде чем мы сможем это сделать, наш удаленный репозиторий GitLab (origin) должен знать о красивых branch&#039;ах и commit&#039;ах, которые мы создали локально, поэтому мы push&#039;им эти изменения на удаленный репозиторий.&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
Имейте в виду, что при использовании этих команд Git, скорее всего, запросит Ваши учетные данные GitLab, чтобы убедиться в том, что Вы имеете право выполнять push на этот удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
При отправке изменений мы указываем удалённый репозиторий, в который мы их отправляем, и локальный branch, из которого мы их отправляем. Все достаточно просто.&lt;br /&gt;
&lt;br /&gt;
Push&#039;им наш branch в удалённый репозиторий (origin):&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPushCommand.png|мини|центр]]&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
Весёлая часть. Отправляемся на GitLab и создаём наш Merge Request:&lt;br /&gt;
[[Файл:GitLabFunnyFeatureMergeRequestButton.png|мини|центр]]&lt;br /&gt;
Добавьте описание, красивое название, несколько скриншотов, и, надеюсь, оно будет merge&#039;нуто.&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
Возможно, прошло уже много времени, неделя или две, с момента Вашего последнего Merge Request&#039;а, и Вы хотите сделать еще один. Прежде чем что-либо делать, необходимо загрузить (pull) изменения кода из основного репозитория SS14 в свой локальный репозиторий. В противном случае Вы получите устаревший код, а Ваши локальные изменения могут не соответствовать тому, как игра будет работать на самом деле - Вы даже можете получить конфликты слияния при попытке MR.&lt;br /&gt;
&lt;br /&gt;
Существует два способа обновления репозитория. Оба способа предполагают, что Вы правильно настроили доступ к удалённому репозиторию - если это не так, вернитесь к предыдущему пункту руководства.&lt;br /&gt;
&lt;br /&gt;
Первый способ, fetch+merge, дает больше возможностей для контроля, но может быть запутанным. Второй метод, pull, прост и удобен, но не дает большого контроля. Однако, как правило, pull - это все, что вам нужно.&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
Pulling означает получение (fetching) новых веток и commit&#039;ов из удаленного репозитория, а затем их слияние с branch&#039;ем. Pulling часто проще, поскольку Git имеет хорошую систему автоматического определения того, из какого удаленного репозитория Вы хотите получить изменения (но она не всегда работает корректно).&lt;br /&gt;
&lt;br /&gt;
Мы будем pull&#039;ить с нашего удалённого репозитория &amp;lt;code&amp;gt;upstream&amp;lt;/code&amp;gt; и попросим его объединиться с нашим локальным branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
Сначала, Вам надо сделать checkout Вашего branch&#039;а. Об этом мы рассказывали ранее. Затем:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPullUpstreamCommand.png|мини|центр]]&lt;br /&gt;
Делайте это регулярно и всегда до начала работы над новым branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
Вы более или менее изучили рабочий процесс разработки функций для SS14 с точки зрения Git, но вот некоторые вещи, которые я хотел бы вбить Вам в голову:&lt;br /&gt;
&lt;br /&gt;
* При создании новой функциональности всегда создавайте новый branch от главного, прежде чем commit&#039;ить что-либо. Если Вы случайно за-commit&#039;ите изменения физики в branch с велосипедным клаксоном, Вам не поздоровится, но это поправимо.&lt;br /&gt;
* Никогда, никогда не фиксируйте RobustToolbox или подмодули типа Lidgren.Network, если Вы не знаете, что делаете. В локальном репозитории верхнего уровня эти подмодули считаются &amp;quot;файлами&amp;quot;, поэтому их легко случайно отправить на staging и сделать commit с ними. Не делайте этого. О том, как исправить свои ошибки, если это произошло, см. ниже.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
В качестве справочного материала здесь приведен небольшой глоссарий понятий и терминов Git, объясняющий их более подробно и в одном месте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Branches&#039;&#039;&#039; - это автономные версии кодовой базы, в которые можно добавлять коммиты. По умолчанию используется ветка master, но их можно создавать сколько угодно.&lt;br /&gt;
&#039;&#039;&#039;Репозитории&#039;&#039;&#039; - это папки, в которых с помощью Git можно вносить изменения и отслеживать их. Локальные репозитории - это репозитории, которые находятся у Вас на компьютере, а удаленные репозитории - это репозитории, расположенные на таких сайтах, как GitLab Репозитории состоят из множества веток.&lt;br /&gt;
&#039;&#039;&#039;Remotes&#039;&#039;&#039; - это названия и ссылки на удаленные репозитории, которые может использовать Ваш локальный репозиторий.&lt;br /&gt;
&#039;&#039;&#039;Подмодули&#039;&#039;&#039; - это репозитории, которые находятся внутри другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Forks&#039;&#039;&#039; - это репозитории, основанные на другом репозитории. Если Вы собираетесь сделать Merge Request для SS14, Вам необходимо сначала сделать Fork.&lt;br /&gt;
&#039;&#039;&#039;The working tree&#039;&#039;&#039; - это все файлы, папки и т.п., находящиеся в репозитории.&lt;br /&gt;
&#039;&#039;&#039;Staging&#039;&#039;&#039; означает добавление (с помощью git add) изменений в &#039;staging area&#039;, где с ними могут быть выполнены некоторые действия&lt;br /&gt;
&#039;&#039;&#039;Commits&#039;&#039;&#039; - это изменения рабочего дерева репозитория в определенный момент времени. По сути, это точка сохранения. Commit - это просто список файлов, которые были изменены с момента последнего коммита, а изменения, которые были commit&#039;нуты, - это изменения, которые Вы отправили в staging area.&lt;br /&gt;
&#039;&#039;&#039;Checking out&#039;&#039;&#039; - это переключение на другой branch, чтобы работать с ним или просматривать его изменения локально.&lt;br /&gt;
&#039;&#039;&#039;Merging&#039;&#039;&#039; - это интеграция изменений из одного branch&#039;а в другой.&lt;br /&gt;
Конфликты merge&#039;а&amp;quot; возникают, когда интеграция изменений из одного branch&#039;а в другой не может быть выполнена автоматически, поскольку они оба изменяют одну и ту же область в файле, или их изменения взаимоисключают друг друга каким-либо другим способом.&lt;br /&gt;
&#039;&#039;&#039;Fetching&#039;&#039;&#039; означает получение branch&#039;ей и commit&#039;ов удаленного репозитория, но на самом деле... еще ничего с ними не делая. Они будут просто обновлены, если вы захотите проверить или объединить их позже.&lt;br /&gt;
&#039;&#039;&#039;Pulling&#039;&#039;&#039; - это акт интеграции изменений из branch&#039;а удаленного репозитория в Ваш локальный branch.&lt;br /&gt;
Merge Requests&amp;quot; - это действие, позволяющее запросить слияние Вашего локального branch&#039;а и всех его изменений с branch&#039;а другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Pushing&#039;&#039;&#039; - это действие по интеграции локальных изменений в удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
Некоторые вещи я не рассмотрел, но они почти неизбежно понадобятся Вам в какой-то момент. Я расскажу обо всем этом исключительно как о командах git в Git Bash, но в других программах разобраться несложно (те же ключевые слова, просто ищите их). &lt;br /&gt;
&lt;br /&gt;
Одно замечание, поскольку оно часто встречается здесь: HEAD - это модное название commit&#039;а, на котором Вы сейчас находитесь.&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
Вредный маленький maintainer сказал вам &amp;quot;разрешить конфликты&amp;quot;, иначе ваш MR &amp;quot;не будет merge&#039;нут&amp;quot;. Вот ведь сволочь! К счастью, это не так уж сложно.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно обновить главный локальный branch. Как это сделать, см. выше.&lt;br /&gt;
&lt;br /&gt;
Когда Вы выполните команду &amp;lt;code&amp;gt;git merge master [локальный branch]&amp;lt;/code&amp;gt;, она либо сделает это без ошибок (&amp;quot;ура&amp;quot;), либо сообщит Вам, что необходимо разрешить конфликты (ужас).&lt;br /&gt;
&lt;br /&gt;
Для разрешения конфликтов вручную достаточно зайти в конфликтующие файлы, удалить всю ерунду типа &amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;HEAD&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;===== &amp;lt;&amp;lt;&amp;lt;&amp;lt;master&amp;lt;/code&amp;gt; (просто указывает, откуда произошли изменения), а затем отредактировать файл так, чтобы он правильно объединял оба набора изменений. Иногда это легко, иногда трудно. Если это сложно, то Вы, вероятно, знаете, что делаете. После этого просто выполните команду &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
У Atlassian есть [https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts очень хорошее руководство] по этому вопросу.&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
&amp;lt;code&amp;gt;git log --oneline&amp;lt;/code&amp;gt; - это Ваш друг. Он показывает короткие hashe&#039;и commit&#039;ов (уникальные идентификаторы), их сообщения, а также их branch&#039;и и tag&#039;и.&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
Возможно, Вы случайно внесли ненужные изменения, и Вам не хочется возиться с созданием совершенно новой ветки или еще чего-нибудь, но Вы еще не сделали commit с ними.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это означает &amp;quot;изменить working tree на текущий commit, до внесения любых локальных изменений. Вы не сможете восстановить локальные изменения, если сделаете это, так что будьте осторожны.&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;br /&gt;
Вот черт, Ваша эротика про ксеноморфа попала в commit или Вы случайно commit&#039;нули подмодуль! Что теперь? Есть решения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git revert HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это создаст новый commit, отменяющий текущий commit, и затем commit&#039;нет его. Хе-хе, commit.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1057</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1057"/>
		<updated>2023-09-27T20:53:58Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Дописано руководство, не включая Fork(GUI)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
В тексте будет часто упоминаться GitLab - аналог GitHub, которым также пользуется Workbench Team. Принципиальной разницы нет, все шаги возможны и на GitHub, но лично мне удобнее работать с GitLab.&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
Для работы с Git для SS14 Вам понадобятся:&lt;br /&gt;
* [https://git-scm.com/downloads Git]&lt;br /&gt;
** Если Вы хотите использовать Git только в консоли, поставьте галочку при установке:&lt;br /&gt;
[[Файл:GitBash.png|мини|центр]]&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.7+]&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Linux, то, скорее всего, будете использовать Git через терминал или выбранную Вами IDE, и, возможно, он у Вас уже установлен.&lt;br /&gt;
&lt;br /&gt;
Некоторые IDE имеют в себе интеграцию Git, но этом руководстве будет информация &#039;&#039;&#039;только&#039;&#039;&#039; об использовании &#039;&#039;приложений&#039;&#039; [[Git для разработчика SS14#Git_Bash|Git Bash]] и [[Git для разработчика SS14#Fork|Fork]].&lt;br /&gt;
&lt;br /&gt;
=== Fork ===&lt;br /&gt;
[https://git-fork.com/ Fork] — быстрый и удобный Git-клиент, позволяющий делать всё, что можно в консоли, но удобнее.&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
Репозиторий - это просто база кода. Репозитории содержат branch&#039;и, а эти branch&#039;и содержат различные commit&#039;ы. Возможно, Вы слышали об этих двух понятиях - подробнее о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Удаленный репозиторий - это просто репозиторий на GitLab. Локальный репозиторий - это тот, который находится на Вашем компьютере.&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
Сперва давайте создадим собственный Fork удаленного репозитория Space Station 14. Для этого, конечно же, потребуется учетная запись GitLab. Forking означает, что Вы копируете всю историю и изменения репозитория в свой собственный удаленный репозиторий, чтобы иметь возможность свободно работать с кодом.&lt;br /&gt;
&lt;br /&gt;
Ваш удаленный репозиторий не будет автоматически обновляться изменениями из оригинального репозитория SS14 - Вам придется делать это самостоятельно, о чем будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Перейдите в наш репозиторий Space Station 14([https://github.com/Workbench-Team/space-station-14 GitHub], [https://git.arumoon.ru/Workbench-Team/space-station-14 GitLab]) и нажмите здесь:&lt;br /&gt;
[[Файл:ForksButton.png|мини|центр]]&lt;br /&gt;
Затем Вас спросят как назвать Fork - просто назовите его как угодно! Но если Вы хотите просто помочь в разработке, я бы выбрал space-station-14.&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
Теперь нам нужно загрузить наш удаленный репозиторий на компьютер (клонировать), чтобы мы могли внести в него некоторые изменения. Технически, Вы можете изменять репозиторий удалённо (на GitLab есть неплохие инструменты), но наличие его на Вашем компьютере означает, что Вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также легко работаете с Git.&lt;br /&gt;
&lt;br /&gt;
Для каждого шага будут приведены скриншоты и инструкции для Git Bash и Fork для Windows.&lt;br /&gt;
===== GitBash: =====&lt;br /&gt;
Перейдите в то место на Вашем компьютере, где Вы хотите разместить локальный репозиторий, и:&lt;br /&gt;
[[Файл:GitBashHere.png|мини|центр]]&lt;br /&gt;
Выберите какой репозиторий клонировать:&lt;br /&gt;
[[Файл:GitBashCloneCommand.png|мини|центр]]&lt;br /&gt;
Проделайте команду &amp;lt;code&amp;gt;git remote add upstream&amp;lt;/code&amp;gt; с &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Обратите на это внимание! Если этого не сделать, то при попытке сборки игры вы получите множество странных ошибок о недоступности тех или иных модулей.&lt;br /&gt;
&lt;br /&gt;
В Space Station 14 есть много подмодулей - в первую очередь, движок RobustToolbox. Подмодули - это просто репозитории внутри репозитория, и их нужно обновлять вручную. А нужно ли?&lt;br /&gt;
&lt;br /&gt;
У нас есть автоматическая программа обновления подмодулей, так что Вам не нужно постоянно выполнять &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt; (команда для ручного обновления подмодулей).&lt;br /&gt;
&lt;br /&gt;
Запустите &amp;lt;code&amp;gt;RUN_THIS.py&amp;lt;/code&amp;gt; внутри репозитория, который Вы скачали, с помощью Python. Желательно, из терминала (&amp;lt;code&amp;gt;python RUN_THIS.py&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;python3 RUN_THIS.py&amp;lt;/code&amp;gt;). Это должно занять несколько секунд, так что если все мгновенно прекратится, то, вероятно, Вы не используете [https://www.python.org/downloads/ Python 3.7+] или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Windows и при попытке выполнить приведенную выше команду Вас перенаправляет в Microsoft Store или Вы получаете сообщение в терминале о том, что Python не установлен, необходимо отключить shortcut Microsoft, который может вызывать эту проблему. Это можно сделать, найдя в поиске Windows команду &amp;lt;code&amp;gt;Manage App Execution Aliases&amp;lt;/code&amp;gt;, а затем отключив две точки привязки Python.&lt;br /&gt;
&lt;br /&gt;
Если Вы все же хотите модифицировать движок напрямую или обновлять подмодуль вручную (автоматическое обновление иногда доставляет неудобства), создайте файл &amp;lt;code&amp;gt;DISABLE_SUBMODULE_AUTOUPDATE&amp;lt;/code&amp;gt; в каталоге &amp;lt;code&amp;gt;BuildChecker/.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам, Вам понадобится вручную обновить RobustToolbox, Вы можете использовать &amp;lt;code&amp;gt;cd RobustToolbox; git checkout v0.4.87&amp;lt;/code&amp;gt; (замените &amp;lt;code&amp;gt;v0.4.87&amp;lt;/code&amp;gt; на последнюю версию RobustToolbox), затем Вы можете использовать &amp;lt;code&amp;gt;cd..\&amp;lt;/code&amp;gt;, чтобы вернуться в репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
Branch&#039;и очень и очень важны. По сути, они представляют собой лист изменений в коде (commit&#039;ов). По умолчанию используется branch &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При работе с кодом Вы всегда находитесь в branch&#039;е, и Вы можете легко менять branch, в котором работаете.&lt;br /&gt;
&lt;br /&gt;
Как правило, branch&#039;и называются по имени того, над чем Вы собираетесь в них работать, но на самом деле не имеет значения, как они называются.&lt;br /&gt;
&lt;br /&gt;
Branch&#039;ей можно создавать сколько угодно. Когда Вы создаете branch, он ответвляется от текущего branch&#039;а и становится самостоятельным объектом, в который можно добавлять commit&#039;ы.&lt;br /&gt;
[[Файл:BranchDiagram|мини|центр|Каждый маленький узел - это отдельный commit, а каждый цвет - отдельный branch.]]&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
Технически, конечно, можно просто делать всю работу в одном branch&#039;е и отправлять Merge Request&#039;ы оттуда. Но создание различных branch&#039;ей позволяет легко понять, где Вы находитесь, сколько изменений внесли, и дает возможность работать над несколькими особенностями(новым содержимым) одновременно.&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
Создавать branch&#039;и довольно просто. Давайте создадим новый branch под названием &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashNewBranchCommand.png|мини|центр]]&lt;br /&gt;
Параметр &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; в &amp;lt;code&amp;gt;git checkout&amp;lt;/code&amp;gt; здесь означает &amp;quot;проверь этот branch, и создай его, если он не существует&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Переключаться между branch&#039;ами довольно просто: это называется проверкой branch&#039;а. При этом локальные файлы и папки будут изменены в соответствии с веткой, поэтому Git будет кричать на Вас, если у Вас есть локальные изменения, а Вы пытаетесь выполнить проверку.&lt;br /&gt;
&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckoutBranchCommand.png|мини|центр]]&lt;br /&gt;
Ну а затем внесите любые локальные изменения! Это не имеет значения. Создайте новый файл, удалите всё, измените одну строку в файле и т.д. Это не повлияет на Ваш главный branch, потому что теперь это территория &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt;!&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
Branche&#039;и важны, поскольку их можно объединять. Так происходит интеграция функций в основную ветку. Merge означает &amp;quot;взять особые commit&#039;ы из этого branch&#039;а и применить их к другому branch&#039;у&amp;quot;. Вы можете объединить любые два branch&#039;а.&lt;br /&gt;
&lt;br /&gt;
Иногда это происходит не совсем удачно, поскольку обе ветки изменяют одну и ту же часть файла противоречивыми способами, и в этом случае возникает конфликт слияния - подробнее об этом в приложениях.&lt;br /&gt;
&lt;br /&gt;
GitLab Merge Request - это, по сути, &amp;quot;запрос на объединение&amp;quot;: Вы говорите, что хотите объединить commit&#039;ы своего branch&#039;а с другим branch&#039;ом, обычно главным. Подробнее об этом позже.&lt;br /&gt;
&lt;br /&gt;
Merge Request&#039;ы очень хорошо отображают всю эту информацию:&lt;br /&gt;
[[Файл:MergeRequestExampleImage.png|мини|центр]]&lt;br /&gt;
[[Файл:MergeRequestExampleCommitsImage.png|мини|центр]]&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
Commit&#039;ы - это просто упакованные изменения в коде. Как разработчик, Вы выбираете, какие изменения войдут в commit и когда их вносить в branch. Commiting - это создание commit&#039;а, который, по сути, является точкой сохранения, к которой можно вернуться в любое время.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы имеют автора, временную метку, сообщение и некоторые изменения кода, прикрепленные к ним. Они также имеют очень длинный &amp;quot;commit hash&amp;quot; - уникальный идентификатор, используемый для ссылки на различные коммиты.&lt;br /&gt;
&lt;br /&gt;
Благодаря commit&#039;ам строится история - Вы можете просмотреть историю каждого коммита, сделанного в репозитории SS14 с самого начала, что очень здорово.&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
Один важный момент: прежде чем отправлять изменения в commit, необходимо добавить их в область staging&#039;а. Это означает, что Вы указываете, какие файлы хотите добавить в commit. Это полезно, поскольку Вы почти никогда не захотите commit&#039;ить изменения подмодулей, так что Вы просто не добавляете их в область staging&#039;а.&lt;br /&gt;
&lt;br /&gt;
Commit&#039;ы всегда сопровождаются сообщением, которое представляет собой краткое, содержательное описание того, что было сделано в данном commit&#039;е. Или Вы можете быть &amp;quot;Чадом&amp;quot;(страна) и называть каждый коммит &amp;quot;меняет всякое&amp;quot; - на Ваше усмотрение.&lt;br /&gt;
&lt;br /&gt;
Если Вы хотите посмотреть, что Вы изменили в данный момент, а что находится в области staging&#039;а, то это довольно просто:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashCheckStatusCommand.png|мини|центр]]&lt;br /&gt;
Теперь, когда Вы убедились, что все эти изменения выглядят хорошо, мы добавим их в область staging&#039;а и сделаем commit с ними:&lt;br /&gt;
[[Файл:GitBashStashAndCommitCommand.png|мини|центр]]&lt;br /&gt;
&lt;br /&gt;
Теперь, когда изменения были добавлены в commit и отправлены в branch, они навсегда (вроде как) остаются в истории branch&#039;а. Теперь мы можем сделать многое: объединить(merge) нашу &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; с нашим локальным мастер-branch&#039;ем (если захотим, по какой-то причине), загрузить (push) наш branch &amp;lt;code&amp;gt;funny-feature&amp;lt;/code&amp;gt; в наш удалённый репозиторий, или полностью удалить ветку. Мы выберем push и сделаем Merge Request.&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
Merge Request означает, что Вы хотите, чтобы кодовая база объединила Ваши изменения в одного из Ваших branch&#039;ей в один из их branch&#039;ей. Прежде чем мы сможем это сделать, наш удаленный репозиторий GitLab (origin) должен знать о красивых branch&#039;ах и commit&#039;ах, которые мы создали локально, поэтому мы push&#039;им эти изменения на удаленный репозиторий.&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
Имейте в виду, что при использовании этих команд Git, скорее всего, запросит Ваши учетные данные GitLab, чтобы убедиться в том, что Вы имеете право выполнять push на этот удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
При отправке изменений мы указываем удалённый репозиторий, в который мы их отправляем, и локальный branch, из которого мы их отправляем. Все достаточно просто.&lt;br /&gt;
&lt;br /&gt;
Push&#039;им наш branch в удалённый репозиторий (origin):&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPushCommand.png|мини|центр]]&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
Весёлая часть. Отправляемся на GitLab и создаём наш Merge Request:&lt;br /&gt;
[[Файл:GitLabFunnyFeatureMergeRequestButton.png|мини|центр]]&lt;br /&gt;
Добавьте описание, красивое название, несколько скриншотов, и, надеюсь, оно будет merge&#039;нуто.&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
Возможно, прошло уже много времени, неделя или две, с момента Вашего последнего Merge Request&#039;а, и Вы хотите сделать еще один. Прежде чем что-либо делать, необходимо загрузить (pull) изменения кода из основного репозитория SS14 в свой локальный репозиторий. В противном случае Вы получите устаревший код, а Ваши локальные изменения могут не соответствовать тому, как игра будет работать на самом деле - Вы даже можете получить конфликты слияния при попытке MR.&lt;br /&gt;
&lt;br /&gt;
Существует два способа обновления репозитория. Оба способа предполагают, что Вы правильно настроили доступ к удалённому репозиторию - если это не так, вернитесь к предыдущему пункту руководства.&lt;br /&gt;
&lt;br /&gt;
Первый способ, fetch+merge, дает больше возможностей для контроля, но может быть запутанным. Второй метод, pull, прост и удобен, но не дает большого контроля. Однако, как правило, pull - это все, что вам нужно.&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
Pulling означает получение (fetching) новых веток и commit&#039;ов из удаленного репозитория, а затем их слияние с branch&#039;ем. Pulling часто проще, поскольку Git имеет хорошую систему автоматического определения того, из какого удаленного репозитория Вы хотите получить изменения (но она не всегда работает корректно).&lt;br /&gt;
&lt;br /&gt;
Мы будем pull&#039;ить с нашего удалённого репозитория &amp;lt;code&amp;gt;upstream&amp;lt;/code&amp;gt; и попросим его объединиться с нашим локальным branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
Сначала, Вам надо сделать checkout Вашего branch&#039;а. Об этом мы рассказывали ранее. Затем:&lt;br /&gt;
===== Git Bash =====&lt;br /&gt;
[[Файл:GitBashPullUpstreamCommand.png|мини|центр]]&lt;br /&gt;
Делайте это регулярно и всегда до начала работы над новым branch&#039;ем.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
Вы более или менее изучили рабочий процесс разработки функций для SS14 с точки зрения Git, но вот некоторые вещи, которые я хотел бы вбить Вам в голову:&lt;br /&gt;
&lt;br /&gt;
* При создании новой функциональности всегда создавайте новый branch от главного, прежде чем commit&#039;ить что-либо. Если Вы случайно за-commit&#039;ите изменения физики в branch с велосипедным клаксоном, Вам не поздоровится, но это поправимо.&lt;br /&gt;
* Никогда, никогда не фиксируйте RobustToolbox или подмодули типа Lidgren.Network, если Вы не знаете, что делаете. В локальном репозитории верхнего уровня эти подмодули считаются &amp;quot;файлами&amp;quot;, поэтому их легко случайно отправить на staging и сделать commit с ними. Не делайте этого. О том, как исправить свои ошибки, если это произошло, см. ниже.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
В качестве справочного материала здесь приведен небольшой глоссарий понятий и терминов Git, объясняющий их более подробно и в одном месте.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Branches&#039;&#039;&#039; - это автономные версии кодовой базы, в которые можно добавлять коммиты. По умолчанию используется ветка master, но их можно создавать сколько угодно.&lt;br /&gt;
&#039;&#039;&#039;Репозитории&#039;&#039;&#039; - это папки, в которых с помощью Git можно вносить изменения и отслеживать их. Локальные репозитории - это репозитории, которые находятся у Вас на компьютере, а удаленные репозитории - это репозитории, расположенные на таких сайтах, как GitLab Репозитории состоят из множества веток.&lt;br /&gt;
&#039;&#039;&#039;Remotes&#039;&#039;&#039; - это названия и ссылки на удаленные репозитории, которые может использовать Ваш локальный репозиторий.&lt;br /&gt;
&#039;&#039;&#039;Подмодули&#039;&#039;&#039; - это репозитории, которые находятся внутри другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Forks&#039;&#039;&#039; - это репозитории, основанные на другом репозитории. Если Вы собираетесь сделать Merge Request для SS14, Вам необходимо сначала сделать Fork.&lt;br /&gt;
&#039;&#039;&#039;The working tree&#039;&#039;&#039; - это все файлы, папки и т.п., находящиеся в репозитории.&lt;br /&gt;
&#039;&#039;&#039;Staging&#039;&#039;&#039; означает добавление (с помощью git add) изменений в &#039;staging area&#039;, где с ними могут быть выполнены некоторые действия&lt;br /&gt;
&#039;&#039;&#039;Commits&#039;&#039;&#039; - это изменения рабочего дерева репозитория в определенный момент времени. По сути, это точка сохранения. Commit - это просто список файлов, которые были изменены с момента последнего коммита, а изменения, которые были commit&#039;нуты, - это изменения, которые Вы отправили в staging area.&lt;br /&gt;
&#039;&#039;&#039;Checking out&#039;&#039;&#039; - это переключение на другой branch, чтобы работать с ним или просматривать его изменения локально.&lt;br /&gt;
&#039;&#039;&#039;Merging&#039;&#039;&#039; - это интеграция изменений из одного branch&#039;а в другой.&lt;br /&gt;
Конфликты merge&#039;а&amp;quot; возникают, когда интеграция изменений из одного branch&#039;а в другой не может быть выполнена автоматически, поскольку они оба изменяют одну и ту же область в файле, или их изменения взаимоисключают друг друга каким-либо другим способом.&lt;br /&gt;
&#039;&#039;&#039;Fetching&#039;&#039;&#039; означает получение branch&#039;ей и commit&#039;ов удаленного репозитория, но на самом деле... еще ничего с ними не делая. Они будут просто обновлены, если вы захотите проверить или объединить их позже.&lt;br /&gt;
&#039;&#039;&#039;Pulling&#039;&#039;&#039; - это акт интеграции изменений из branch&#039;а удаленного репозитория в Ваш локальный branch.&lt;br /&gt;
Merge Requests&amp;quot; - это действие, позволяющее запросить слияние Вашего локального branch&#039;а и всех его изменений с branch&#039;а другого репозитория.&lt;br /&gt;
&#039;&#039;&#039;Pushing&#039;&#039;&#039; - это действие по интеграции локальных изменений в удаленный репозиторий.&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
Некоторые вещи я не рассмотрел, но они почти неизбежно понадобятся Вам в какой-то момент. Я расскажу обо всем этом исключительно как о командах git в Git Bash, но в других программах разобраться несложно (те же ключевые слова, просто ищите их). &lt;br /&gt;
&lt;br /&gt;
Одно замечание, поскольку оно часто встречается здесь: HEAD - это модное название commit&#039;а, на котором Вы сейчас находитесь.&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
Вредный маленький maintainer сказал вам &amp;quot;разрешить конфликты&amp;quot;, иначе ваш MR &amp;quot;не будет merge&#039;нут&amp;quot;. Вот ведь сволочь! К счастью, это не так уж сложно.&lt;br /&gt;
&lt;br /&gt;
Сначала нужно обновить главный локальный branch. Как это сделать, см. выше.&lt;br /&gt;
&lt;br /&gt;
Когда Вы выполните команду &amp;lt;code&amp;gt;git merge master [локальный branch]&amp;lt;/code&amp;gt;, она либо сделает это без ошибок (&amp;quot;ура&amp;quot;), либо сообщит Вам, что необходимо разрешить конфликты (ужас).&lt;br /&gt;
&lt;br /&gt;
Для разрешения конфликтов вручную достаточно зайти в конфликтующие файлы, удалить всю ерунду типа &amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;HEAD&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;===== &amp;lt;&amp;lt;&amp;lt;&amp;lt;master&amp;lt;/code&amp;gt; (просто указывает, откуда произошли изменения), а затем отредактировать файл так, чтобы он правильно объединял оба набора изменений. Иногда это легко, иногда трудно. Если это сложно, то Вы, вероятно, знаете, что делаете. После этого просто выполните команду &amp;lt;code&amp;gt;git commit&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
У Atlassian есть [https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts очень хорошее руководство] по этому вопросу.&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
&amp;lt;code&amp;gt;git log --oneline&amp;lt;/code&amp;gt; - это Ваш друг. Он показывает короткие hashe&#039;и commit&#039;ов (уникальные идентификаторы), их сообщения, а также их branch&#039;и и tag&#039;и.&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
Возможно, Вы случайно внесли ненужные изменения, и Вам не хочется возиться с созданием совершенно новой ветки или еще чего-нибудь, но Вы еще не сделали commit с ними.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git reset --hard HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это означает &amp;quot;изменить working tree на текущий commit, до внесения любых локальных изменений. Вы не сможете восстановить локальные изменения, если сделаете это, так что будьте осторожны.&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;br /&gt;
Вот черт, Ваша эротика про ксеноморфа попала в commit или Вы случайно commit&#039;нули подмодуль! Что теперь? Есть решения:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;git revert HEAD&amp;lt;/code&amp;gt;&lt;br /&gt;
Это создаст новый commit, отменяющий текущий commit, и затем commit&#039;нет его. Хе-хе, commit.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:MergeRequestExampleCommitsImage.png&amp;diff=1056</id>
		<title>Файл:MergeRequestExampleCommitsImage.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:MergeRequestExampleCommitsImage.png&amp;diff=1056"/>
		<updated>2023-09-27T20:52:51Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MergeRequestExampleCommitsImage&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:MergeRequestExampleImage.png&amp;diff=1055</id>
		<title>Файл:MergeRequestExampleImage.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:MergeRequestExampleImage.png&amp;diff=1055"/>
		<updated>2023-09-27T20:52:25Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MergeRequestExampleImage&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashPullUpstreamCommand.png&amp;diff=1054</id>
		<title>Файл:GitBashPullUpstreamCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashPullUpstreamCommand.png&amp;diff=1054"/>
		<updated>2023-09-27T20:19:25Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GitBashPullUpstreamCommand&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitLabFunnyFeatureMergeRequestButton.png&amp;diff=1053</id>
		<title>Файл:GitLabFunnyFeatureMergeRequestButton.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitLabFunnyFeatureMergeRequestButton.png&amp;diff=1053"/>
		<updated>2023-09-27T20:04:11Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GitLabFunnyFeatureMergeRequestButton&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashPushCommand.png&amp;diff=1052</id>
		<title>Файл:GitBashPushCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashPushCommand.png&amp;diff=1052"/>
		<updated>2023-09-27T19:56:33Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git Bash Push Command&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashStashAndCommitCommand.png&amp;diff=1051</id>
		<title>Файл:GitBashStashAndCommitCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashStashAndCommitCommand.png&amp;diff=1051"/>
		<updated>2023-09-27T19:46:23Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git Bash Stash And Commit Command&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashCheckStatusCommand.png&amp;diff=1050</id>
		<title>Файл:GitBashCheckStatusCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashCheckStatusCommand.png&amp;diff=1050"/>
		<updated>2023-09-27T19:44:09Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git Bash Check Status Command&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashCheckoutBranchCommand.png&amp;diff=1049</id>
		<title>Файл:GitBashCheckoutBranchCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashCheckoutBranchCommand.png&amp;diff=1049"/>
		<updated>2023-09-27T19:37:32Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git Bash Checkout Branch Command&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashNewBranchCommand.png&amp;diff=1048</id>
		<title>Файл:GitBashNewBranchCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashNewBranchCommand.png&amp;diff=1048"/>
		<updated>2023-09-27T19:32:53Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git Bash New Branch Command&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:BranchDiagram.png&amp;diff=1047</id>
		<title>Файл:BranchDiagram.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:BranchDiagram.png&amp;diff=1047"/>
		<updated>2023-09-27T19:25:34Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Диаграмма.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1046</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1046"/>
		<updated>2023-09-27T15:20:28Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
В тексте будет часто упоминаться GitLab - аналог GitHub, которым также пользуется Workbench Team. Принципиальной разницы нет, все шаги возможны и на GitHub, но лично мне удобнее работать с GitLab.&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
Для работы с Git для SS14 Вам понадобятся:&lt;br /&gt;
* [https://git-scm.com/downloads Git]&lt;br /&gt;
** Если Вы хотите использовать Git только в консоли, поставьте галочку при установке:&lt;br /&gt;
[[Файл:GitBash.png|мини|центр]]&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.7+]&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Linux, то, скорее всего, будете использовать Git через терминал или выбранную Вами IDE, и, возможно, он у Вас уже установлен.&lt;br /&gt;
&lt;br /&gt;
Некоторые IDE имеют в себе интеграцию Git, но этом руководстве будет информация &#039;&#039;&#039;только&#039;&#039;&#039; об использовании &#039;&#039;приложений&#039;&#039; [[Git для разработчика SS14#Git_Bash|Git Bash]] и [[Git для разработчика SS14#Fork|Fork]].&lt;br /&gt;
&lt;br /&gt;
=== Fork ===&lt;br /&gt;
[https://git-fork.com/ Fork] — быстрый и удобный Git-клиент, позволяющий делать всё, что можно в консоли, но удобнее.&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
Репозиторий - это просто база кода. Репозитории содержат branch&#039;и, а эти branch&#039;и содержат различные commit&#039;ы. Возможно, Вы слышали об этих двух понятиях - подробнее о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Удаленный репозиторий - это просто репозиторий на GitLab. Локальный репозиторий - это тот, который находится на Вашем компьютере.&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
Сперва давайте создадим собственный Fork удаленного репозитория Space Station 14. Для этого, конечно же, потребуется учетная запись GitLab. Forking означает, что Вы копируете всю историю и изменения репозитория в свой собственный удаленный репозиторий, чтобы иметь возможность свободно работать с кодом.&lt;br /&gt;
&lt;br /&gt;
Ваш удаленный репозиторий не будет автоматически обновляться изменениями из оригинального репозитория SS14 - Вам придется делать это самостоятельно, о чем будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Перейдите в наш репозиторий Space Station 14([https://github.com/Workbench-Team/space-station-14 GitHub], [https://git.arumoon.ru/Workbench-Team/space-station-14 GitLab]) и нажмите здесь:&lt;br /&gt;
[[Файл:ForksButton.png|мини|центр]]&lt;br /&gt;
Затем Вас спросят как назвать Fork - просто назовите его как угодно! Но если Вы хотите просто помочь в разработке, я бы выбрал space-station-14.&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
Теперь нам нужно загрузить наш удаленный репозиторий на компьютер (клонировать), чтобы мы могли внести в него некоторые изменения. Технически, Вы можете изменять репозиторий удалённо (на GitLab есть неплохие инструменты), но наличие его на Вашем компьютере означает, что Вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также легко работаете с Git.&lt;br /&gt;
&lt;br /&gt;
Для каждого шага будут приведены скриншоты и инструкции для Git Bash и Fork для Windows.&lt;br /&gt;
===== GitBash: =====&lt;br /&gt;
Перейдите в то место на Вашем компьютере, где Вы хотите разместить локальный репозиторий, и:&lt;br /&gt;
[[Файл:GitBashHere.png|мини|центр]]&lt;br /&gt;
Выберите какой репозиторий клонировать:&lt;br /&gt;
[[Файл:GitBashCloneCommand.png|мини|центр]]&lt;br /&gt;
Проделайте такие же команды с &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Обратите на это внимание! Если этого не сделать, то при попытке сборки игры вы получите множество странных ошибок о недоступности тех или иных модулей.&lt;br /&gt;
&lt;br /&gt;
В Space Station 14 есть много подмодулей - в первую очередь, движок RobustToolbox. Подмодули - это просто репозитории внутри репозитория, и их нужно обновлять вручную. А нужно ли?&lt;br /&gt;
&lt;br /&gt;
У нас есть автоматическая программа обновления подмодулей, так что Вам не нужно постоянно выполнять &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt; (команда для ручного обновления подмодулей).&lt;br /&gt;
&lt;br /&gt;
Запустите &amp;lt;code&amp;gt;RUN_THIS.py&amp;lt;/code&amp;gt; внутри репозитория, который Вы скачали, с помощью Python. Желательно, из терминала (&amp;lt;code&amp;gt;python RUN_THIS.py&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;python3 RUN_THIS.py&amp;lt;/code&amp;gt;). Это должно занять несколько секунд, так что если все мгновенно прекратится, то, вероятно, Вы не используете [https://www.python.org/downloads/ Python 3.7+] или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Windows и при попытке выполнить приведенную выше команду Вас перенаправляет в Microsoft Store или Вы получаете сообщение в терминале о том, что Python не установлен, необходимо отключить shortcut Microsoft, который может вызывать эту проблему. Это можно сделать, найдя в поиске Windows команду &amp;lt;code&amp;gt;Manage App Execution Aliases&amp;lt;/code&amp;gt;, а затем отключив две точки привязки Python.&lt;br /&gt;
&lt;br /&gt;
Если Вы все же хотите модифицировать движок напрямую или обновлять подмодуль вручную (автоматическое обновление иногда доставляет неудобства), создайте файл &amp;lt;code&amp;gt;DISABLE_SUBMODULE_AUTOUPDATE&amp;lt;/code&amp;gt; в каталоге &amp;lt;code&amp;gt;BuildChecker/.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам, Вам понадобится вручную обновить RobustToolbox, Вы можете использовать &amp;lt;code&amp;gt;cd RobustToolbox; git checkout v0.4.87&amp;lt;/code&amp;gt; (замените &amp;lt;code&amp;gt;v0.4.87&amp;lt;/code&amp;gt; на последнюю версию RobustToolbox), затем Вы можете использовать &amp;lt;code&amp;gt;cd..\&amp;lt;/code&amp;gt;, чтобы вернуться в репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
=== Метод fetch + merge ===&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
=== Краткий пример рабочего процесса ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1045</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1045"/>
		<updated>2023-09-27T15:15:52Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Перевод до Branching &amp;amp; Commits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
В тексте будет часто упоминаться GitLab - аналог GitHub, которым также пользуется Workbench Team. Принципиальной разницы нет, все шаги возможны и на GitHub, но лично мне удобнее работать с GitLab.&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
Для работы с Git для SS14 Вам понадобятся:&lt;br /&gt;
* [https://git-scm.com/downloads Git]&lt;br /&gt;
** Если Вы хотите использовать Git только в консоли, поставьте галочку при установке:&lt;br /&gt;
[[Файл:GitBash.png|мини|центр]]&lt;br /&gt;
* [https://www.python.org/downloads/ Python 3.7+]&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Linux, то, скорее всего, будете использовать Git через терминал или выбранную Вами IDE, и, возможно, он у Вас уже установлен.&lt;br /&gt;
&lt;br /&gt;
Некоторые IDE имеют в себе интеграцию Git, но этом руководстве будет информация &#039;&#039;&#039;только&#039;&#039;&#039; об использовании &#039;&#039;приложений&#039;&#039; [[Git для разработчика SS14#Git_Bash|Git Bash]] и [[Git для разработчика SS14#Fork|Fork]].&lt;br /&gt;
&lt;br /&gt;
=== Fork ===&lt;br /&gt;
[https://git-fork.com/ Fork] — быстрый и удобный Git-клиент, позволяющий делать всё, что можно в консоли, но удобнее.&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
Репозиторий - это просто база кода. Репозитории содержат branch&#039;и, а эти branch&#039;и содержат различные commit&#039;ы. Возможно, Вы слышали об этих двух понятиях - подробнее о них будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Удаленный репозиторий - это просто репозиторий на GitLab. Локальный репозиторий - это тот, который находится на Вашем компьютере.&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
Сперва давайте создадим собственный Fork удаленного репозитория Space Station 14. Для этого, конечно же, потребуется учетная запись GitLab. Forking означает, что Вы копируете всю историю и изменения репозитория в свой собственный удаленный репозиторий, чтобы иметь возможность свободно работать с кодом.&lt;br /&gt;
&lt;br /&gt;
Ваш удаленный репозиторий не будет автоматически обновляться изменениями из оригинального репозитория SS14 - Вам придется делать это самостоятельно, о чем будет рассказано позже.&lt;br /&gt;
&lt;br /&gt;
Перейдите в наш репозиторий Space Station 14([https://github.com/Workbench-Team/space-station-14 GitHub], [https://git.arumoon.ru/Workbench-Team/space-station-14 GitLab]) и нажмите здесь:&lt;br /&gt;
[[Файл:ForksButton.png|мини|центр]]&lt;br /&gt;
Затем Вас спросят как назвать Fork - просто назовите его как угодно! Но если Вы хотите просто помочь в разработке, я бы выбрал space-station-14.&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
Теперь нам нужно загрузить наш удаленный репозиторий на компьютер (клонировать), чтобы мы могли внести в него некоторые изменения. Технически, Вы можете изменять репозиторий удалённо (на GitLab есть неплохие инструменты), но наличие его на Вашем компьютере означает, что Вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также легко работаете с Git.&lt;br /&gt;
&lt;br /&gt;
Для каждого шага будут приведены скриншоты и инструкции для Git Bash и Fork для Windows.&lt;br /&gt;
===== GitBash: =====&lt;br /&gt;
Перейдите в то место на Вашем компьютере, где Вы хотите разместить локальный репозиторий, и:&lt;br /&gt;
[[Файл:GitBashHere.png|мини|центр]]&lt;br /&gt;
Выберите какой репозиторий клонировать:&lt;br /&gt;
[[Файл:GitBashCloneCommand.png|мини|центр]]&lt;br /&gt;
Проделайте такие же команды с &amp;lt;code&amp;gt;https://git.arumoon.ru/Workbench-Team/space-station-14&amp;lt;/code&amp;gt;, чтобы у Вас была возможность обновлять свои branch&#039;и новыми обновлениями upstream&#039;а.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
Обратите на это внимание! Если этого не сделать, то при попытке сборки игры вы получите множество странных ошибок о недоступности тех или иных модулей.&lt;br /&gt;
&lt;br /&gt;
В Space Station 14 есть много подмодулей - в первую очередь, движок RobustToolbox. Подмодули - это просто репозитории внутри репозитория, и их нужно обновлять вручную. А нужно ли?&lt;br /&gt;
&lt;br /&gt;
У нас есть автоматическая программа обновления подмодулей, так что Вам не нужно постоянно выполнять &amp;lt;code&amp;gt;git submodule update --init --recursive&amp;lt;/code&amp;gt; (команда для ручного обновления подмодулей).&lt;br /&gt;
&lt;br /&gt;
Запустите &amp;lt;code&amp;gt;RUN_THIS.py&amp;lt;/code&amp;gt; внутри репозитория, который Вы скачали, с помощью Python. Желательно, из терминала (&amp;lt;code&amp;gt;python RUN_THIS.py&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;python3 RUN_THIS.py&amp;lt;/code&amp;gt;). Это должно занять несколько секунд, так что если все мгновенно прекратится, то, вероятно, Вы не используете [https://www.python.org/downloads/ Python 3.7+] или что-то в этом роде.&lt;br /&gt;
&lt;br /&gt;
Если Вы работаете в Windows и при попытке выполнить приведенную выше команду Вас перенаправляет в Microsoft Store или Вы получаете сообщение в терминале о том, что Python не установлен, необходимо отключить shortcut Microsoft, который может вызывать эту проблему. Это можно сделать, найдя в поиске Windows команду &amp;lt;code&amp;gt;Manage App Execution Aliases&amp;lt;/code&amp;gt;, а затем отключив две точки привязки Python.&lt;br /&gt;
&lt;br /&gt;
Если Вы все же хотите модифицировать движок напрямую или обновлять подмодуль вручную (автоматическое обновление иногда доставляет неудобства), создайте файл &amp;lt;code&amp;gt;DISABLE_SUBMODULE_AUTOUPDATE&amp;lt;/code&amp;gt; в каталоге &amp;lt;code&amp;gt;BuildChecker/.&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если по каким-либо причинам, Вам понадобится вручную обновить RobustToolbox, Вы можете использовать &amp;lt;code&amp;gt;cd RobustToolbox; git checkout v0.4.87&amp;lt;/code&amp;gt; (замените &amp;lt;code&amp;gt;v0.4.87&amp;lt;/code&amp;gt; на последнюю версию RobustToolbox), затем вы можете использовать &amp;lt;code&amp;gt;cd..\&amp;lt;/code&amp;gt;, чтобы вернуться в репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
=== Метод fetch + merge ===&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
=== Краткий пример рабочего процесса ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashCloneCommand.png&amp;diff=1044</id>
		<title>Файл:GitBashCloneCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashCloneCommand.png&amp;diff=1044"/>
		<updated>2023-09-27T15:13:49Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Ser11y загрузил новую версию Файл:GitBashCloneCommand.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git Bash Clone Command&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashCloneCommand.png&amp;diff=1043</id>
		<title>Файл:GitBashCloneCommand.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashCloneCommand.png&amp;diff=1043"/>
		<updated>2023-09-27T15:08:28Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git Bash Clone Command&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashHere.png&amp;diff=1042</id>
		<title>Файл:GitBashHere.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBashHere.png&amp;diff=1042"/>
		<updated>2023-09-27T14:55:29Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Git Bash Here Button&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForksButton.png&amp;diff=1041</id>
		<title>Файл:ForksButton.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:ForksButton.png&amp;diff=1041"/>
		<updated>2023-09-27T14:46:46Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBash.png&amp;diff=1040</id>
		<title>Файл:GitBash.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:GitBash.png&amp;diff=1040"/>
		<updated>2023-09-27T14:22:09Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1039</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1039"/>
		<updated>2023-09-27T14:11:27Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
Если Вам не ясны какие-либо термины из текста ниже, обратитесь к разделу Словарь: [[Git_для_разработчика_SS14#Словарь:_Внутренние_операции_Git|Словарь: Внутренние операции Git]].&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
=== Fork ===&lt;br /&gt;
=== Git Bash ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
=== Метод fetch + merge ===&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
=== Краткий пример рабочего процесса ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1038</id>
		<title>Git для разработчика SS14</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=Git_%D0%B4%D0%BB%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%B0_SS14&amp;diff=1038"/>
		<updated>2023-09-27T14:09:38Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Добавлены заголовки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Предисловие ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Установка Git ==&lt;br /&gt;
=== Fork ===&lt;br /&gt;
=== Git Bash ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Налаживание репозиториев Git ==&lt;br /&gt;
&lt;br /&gt;
=== Создание Вашего remote репозитория ===&lt;br /&gt;
=== Создание Вашего локального репозитория ===&lt;br /&gt;
=== Подмодули ===&lt;br /&gt;
&lt;br /&gt;
== Branching &amp;amp; Commits (Ветки и коммиты) ==&lt;br /&gt;
&lt;br /&gt;
=== Что такое branch? ===&lt;br /&gt;
==== Зачем это нужно? ====&lt;br /&gt;
==== Создание и работа с branch&#039;ами ====&lt;br /&gt;
==== Совмещение branch&#039;ей ====&lt;br /&gt;
&lt;br /&gt;
=== Что такое commit? ===&lt;br /&gt;
==== Отправка commit&#039;ов в branch&#039;и ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pushing и создание Merge Request&#039;ов ==&lt;br /&gt;
=== Проталкивание commit&#039;ов ===&lt;br /&gt;
=== Создание Merge Request&#039;ов ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Обновление репозитория ==&lt;br /&gt;
=== Метод fetch + merge ===&lt;br /&gt;
=== Метод pull ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Приложения ==&lt;br /&gt;
=== Что следует помнить ===&lt;br /&gt;
=== Краткий пример рабочего процесса ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Словарь: Внутренние операции Git ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Примечание: Полезные советы и рекомендации ==&lt;br /&gt;
=== Разрешение конфликтов при merge ===&lt;br /&gt;
=== Проверка истории ===&lt;br /&gt;
=== Очистка локальных изменений ===&lt;br /&gt;
=== Откат сделанного Вами commit&#039;а ===&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=966</id>
		<title>Управление</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=966"/>
		<updated>2023-05-11T14:31:29Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Ну, эм, вот:&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Управление ==&lt;br /&gt;
Вот клавиши, которые могут пригодиться Вам в игре. Остальные, как и эти, Вы можете найти в настройках.&lt;br /&gt;
{| class=&amp;quot;wikitable sortable mw-collapsible&amp;quot;&lt;br /&gt;
|+Основные клавиши&lt;br /&gt;
!Клавиша&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|ЛКМ&lt;br /&gt;
|Базовое взаимодействие. Используется для атаки, поднятия предмета с пола, использования чего-либо в руке(надо нажать на этот предмет) или активации чего-либо.&lt;br /&gt;
|-&lt;br /&gt;
|Alt+ЛКМ&lt;br /&gt;
|Альтернативное взаимодействие, например, достать ID-Карту из КПК или закрыть ящик на электронный замок.&lt;br /&gt;
|-&lt;br /&gt;
|ПКМ&lt;br /&gt;
|Открывает контекстное меню, где, обычно, можно увидеть все доступные взаимодействия с предметом.&lt;br /&gt;
|-&lt;br /&gt;
|E&lt;br /&gt;
|Взаимодействовать с предметом, например, открыть рюкзак или ящик. В остальном не отличается от ЛКМ.&lt;br /&gt;
|-&lt;br /&gt;
|Q&lt;br /&gt;
|Положить предмет.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+Q&lt;br /&gt;
|Бросить предмет.&lt;br /&gt;
|-&lt;br /&gt;
|Z&lt;br /&gt;
|Использовать предмет в активной руке, будь то кружка, из которой надо выпить кофе&amp;lt;s&amp;gt;, или пожарный топор, который надо взять в две руки&amp;lt;/s&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Shift+Q и Shift+E&lt;br /&gt;
|Убрать/достать предмет в/из рюкзака или пояса соответственно. Очень полезно, когда лень тащить мышку.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+ЛКМ&lt;br /&gt;
|Потащить что-либо за собой.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+ПКМ&lt;br /&gt;
|Перетащить то, что тащишь на место курсора.&lt;br /&gt;
|-&lt;br /&gt;
|Shift+СКМ&lt;br /&gt;
|Указать на что-либо.&lt;br /&gt;
|-&lt;br /&gt;
|Кнопки 1-0&lt;br /&gt;
|Использование панели действий слева.&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|Настройка панели действий.&lt;br /&gt;
|-&lt;br /&gt;
|I&lt;br /&gt;
|Посмотреть надетые на Вас вещи.&lt;br /&gt;
|}&lt;br /&gt;
Но не думайте, что это - всё! Вот парочка советов:&lt;br /&gt;
&lt;br /&gt;
* Если хотите обыскать кого-то, перетащите его на себя.&lt;br /&gt;
* Если хотите залезть или сесть на что-то, перетащите себя или нажмите &amp;lt;code&amp;gt;Alt+ЛКМ&amp;lt;/code&amp;gt; на это.&lt;br /&gt;
* Если Вы - [[Предатель]], нажмите &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;⁣, чтобы увидеть свои задачи и кодовые слова с рингтоном для КПК.&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%93%D0%B0%D0%B9%D0%B4_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE&amp;diff=959</id>
		<title>Гайд на строительство</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%93%D0%B0%D0%B9%D0%B4_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE&amp;diff=959"/>
		<updated>2023-05-10T18:58:39Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Основы ==&lt;br /&gt;
Строительство - неотъемлемая часть работы инженерного и не только отделов. Застраивать дыры в корпусе станции, строить компьютеры и машины - всё к строительству. &lt;br /&gt;
&lt;br /&gt;
Меню строительства на &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt; уже говорит само за себя. Вы вводите название предмета в поиск, нажимаете &amp;lt;code&amp;gt;Создать&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Разместить призрак конструкции&amp;lt;/code&amp;gt; и собираете его. Но не так всё просто, как кажется на первый взгляд!&lt;br /&gt;
&lt;br /&gt;
=== Машины и компьютеры ===&lt;br /&gt;
При сборке компьютера или машины, например, протолата у Вас может возникнуть вопрос &amp;quot;А что дальше-то?&amp;quot;. А всё легко! Осмотрите только что собранный Вами корпус с помощью &amp;lt;code&amp;gt;Shift+ЛКМ&amp;lt;/code&amp;gt; и следуйте указанным там инструкциям! Не забывайте брать с собой инструменты, они всегда понадобятся при сборке чего-то сложнее стены!&lt;br /&gt;
&lt;br /&gt;
Иногда, для строительства Вам могут понадобиться детали, которые просто так в технических помещениях не валяются(почти), например, манипулятор. Его и многие другие детали Вы можете &amp;lt;s&amp;gt;украсть&amp;lt;/s&amp;gt; заказать в отделе Науки! Любезные учёные никогда Вам не откажут!&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%93%D0%B0%D0%B9%D0%B4_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE&amp;diff=958</id>
		<title>Гайд на строительство</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%93%D0%B0%D0%B9%D0%B4_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE&amp;diff=958"/>
		<updated>2023-05-10T18:57:52Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Добавлена страница! С текстом!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Основы ==&lt;br /&gt;
Строительство - неотъемлемая часть работы инженерного и не только отделов. Застраивать дыры в корпусе станции, строить компьютеры и машины - всё к строительству. &lt;br /&gt;
&lt;br /&gt;
Меню строительства на &amp;lt;code&amp;gt;G&amp;lt;/code&amp;gt; уже говорит само за себя. Вы вводите название предмета в поиск, нажимаете &amp;lt;code&amp;gt;Создать&amp;lt;/code&amp;gt; или &amp;lt;code&amp;gt;Разместить призрак конструкции&amp;lt;/code&amp;gt; и собираете его. Но не так всё просто, как кажется на первый взгляд!&lt;br /&gt;
&lt;br /&gt;
=== Машины и компьютеры ===&lt;br /&gt;
При сборке компьютера или машины, например, протолата у Вас может возникнуть вопрос &amp;quot;А что дальше-то?&amp;quot;. А всё легко! Осмотрите только что собранный Вами корпус с помощью &amp;lt;code&amp;gt;Shift+ЛКМ&amp;lt;/code&amp;gt; и следуйте указанным там инструкциям! Не забывайте брать с собой инструменты, они всегда понадобятся при сборке чего-то сложнее стены!&lt;br /&gt;
&lt;br /&gt;
Иногда, для строительства Вам могут понадобиться детали, просто так в технических помещениях не валяются(почти), например, манипулятор. Его и многие другие детали Вы можете у&amp;lt;s&amp;gt;красть&amp;lt;/s&amp;gt; заказать в отделе Науки! Любезные учёные никогда Вам не откажут!&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%D0%BA%D0%B0%D0%BC&amp;diff=957</id>
		<title>Руководство новичкам</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BD%D0%BE%D0%B2%D0%B8%D1%87%D0%BA%D0%B0%D0%BC&amp;diff=957"/>
		<updated>2023-05-10T18:37:51Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Обновил страницу. Во многом.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;small&amp;gt;&#039;&#039;«Space Station 14 - кооперативная игра в жанрах ролевые игры, экшены, симуляторы»&#039;&#039;&amp;lt;/small&amp;gt;     &lt;br /&gt;
&lt;br /&gt;
Игра совсем не лёгкая. Для того чтобы её освоить полностью потребуются десятки, а то и сотни часов.&lt;br /&gt;
 &lt;br /&gt;
Цель этой страницы - ответить на популярные(в особенности у новичков) вопросы по игре. Если вы потерялись и задаёте себе вопрос &amp;quot;А что вообще делать?&amp;quot; - эта страница Вам поможет, наверное. &lt;br /&gt;
&lt;br /&gt;
== Настройка персонажа ==&lt;br /&gt;
При входе на сервер, а также в начале каждого раунда вы попадаете в лобби.&lt;br /&gt;
[[Файл:Персонализация.png|обрамить|справа]]&lt;br /&gt;
Для того чтобы настроить внешность и приоритеты профессий Вашего персонажа нажмите кнопку &amp;lt;code&amp;gt;Персонализация&amp;lt;/code&amp;gt;, когда сделаете это не забудьте сохранить его. Нажмите &amp;lt;code&amp;gt;Готов&amp;lt;/code&amp;gt; - эта кнопка запустит Вас в раунд по его началу, если Вы этого не сделаете, Вам придётся выбирать из оставшихся профессий.&lt;br /&gt;
[[Файл:Присоединиться.png|обрамить|справа|альт=Присоединиться|Присоединиться]]&lt;br /&gt;
&lt;br /&gt;
== Управление ==&lt;br /&gt;
В игре есть много способов взаимодействия, но рука, которую Вы используете для взаимодействия всегда должна быть пуста, если, конечно, Вы не засовываете что-то куда-то. &lt;br /&gt;
{| class=&amp;quot;wikitable sortable mw-collapsible&amp;quot;&lt;br /&gt;
|+Основные клавиши&lt;br /&gt;
!Клавиша&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|ЛКМ&lt;br /&gt;
|Базовое взаимодействие. Используется для атаки, поднятия предмета с пола, использования чего-либо в руке(надо нажать на этот предмет) или активации чего-либо.&lt;br /&gt;
|-&lt;br /&gt;
|Alt+ЛКМ&lt;br /&gt;
|Альтернативное взаимодействие, например, достать ID-Карту из КПК или закрыть ящик на электронный замок.&lt;br /&gt;
|-&lt;br /&gt;
|ПКМ&lt;br /&gt;
|Открывает контекстное меню, где, обычно, можно увидеть все доступные взаимодействия с предметом.&lt;br /&gt;
|-&lt;br /&gt;
|E&lt;br /&gt;
|Взаимодействовать с предметом, например, открыть рюкзак или ящик. В остальном не отличается от ЛКМ.&lt;br /&gt;
|-&lt;br /&gt;
|Q&lt;br /&gt;
|Положить предмет.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+Q&lt;br /&gt;
|Бросить предмет.&lt;br /&gt;
|-&lt;br /&gt;
|Z&lt;br /&gt;
|Использовать предмет в активной руке, будь то кружка, из которой надо выпить кофе&amp;lt;s&amp;gt;, или пожарный топор, который надо взять в две руки&amp;lt;/s&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|Shift+Q и Shift+E&lt;br /&gt;
|Убрать/достать предмет в/из рюкзака или пояса соответственно. Очень полезно, когда лень тащить мышку.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+ЛКМ&lt;br /&gt;
|Потащить что-либо за собой.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+ПКМ&lt;br /&gt;
|Перетащить то, что тащишь на место курсора.&lt;br /&gt;
|-&lt;br /&gt;
|Shift+СКМ&lt;br /&gt;
|Указать на что-либо.&lt;br /&gt;
|-&lt;br /&gt;
|Кнопки 1-0&lt;br /&gt;
|Использование панели действий слева.&lt;br /&gt;
|-&lt;br /&gt;
|K&lt;br /&gt;
|Настройка панели действий.&lt;br /&gt;
|-&lt;br /&gt;
|I&lt;br /&gt;
|Посмотреть надетые на Вас вещи.&lt;br /&gt;
|}&lt;br /&gt;
Но не думайте, что это - всё! Вот парочка советов:&lt;br /&gt;
&lt;br /&gt;
* Если хотите обыскать кого-то, перетащите его на себя.&lt;br /&gt;
* Если хотите залезть или сесть на что-то, перетащите себя или нажмите &amp;lt;code&amp;gt;Alt+ЛКМ&amp;lt;/code&amp;gt; на это.&lt;br /&gt;
* Если Вы - [[Предатель]], нажмите &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;⁣, чтобы увидеть свои задачи и кодовые слова с рингтоном для КПК.&amp;lt;br /&amp;gt;&lt;br /&gt;
== Игровой процесс ==&lt;br /&gt;
Вы прибыли на Научную Космическую Станцию 14, принадлежащую мега-корпорации NanoTrasen. Помимо Вас, здесь находятся ещё ~75 человек, у каждого из них свои особенности в виде расы и роли и других параметров. Существует несколько режимов игры: в некоторых станцию будут кошмарить [[Ядерный оперативник|Ядерные Оперативники]] Синдиката, в другом, его [[Предатель|Агенты]], но это ещё далеко не всё!&lt;br /&gt;
&lt;br /&gt;
Наконец, не забывайте, что все другие игроки - тоже люди. Соблюдайте [[Правила Космической станции|правила сервера]] и [[Космический Закон]].&lt;br /&gt;
&lt;br /&gt;
== Рации и каналы ==&lt;br /&gt;
[[Файл:Channels.png|мини|200x200пкс|Каналы для гарнитуры уборщика.]]&lt;br /&gt;
В игре существует множество каналов и чатов, например, общая, медицинская и другие рации. Переключение между основными происходит клавишей &amp;lt;code&amp;gt;Tab&amp;lt;/code&amp;gt;, в то время, как в другие надо писать вручную. &lt;br /&gt;
&lt;br /&gt;
Ваша гарнитура хранит в себе ключи шифрования, которые позволяют Вам писать в определённые каналы, по типу медицинского или командного. Чтобы узнать, какие каналы Вам доступны осмотрите свою гарнитуру с помощью клавиш &amp;lt;code&amp;gt;Shift+ЛКМ&amp;lt;/code&amp;gt; по ней. Там будет написано, как писать в канал и за что он отвечает. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Не забывайте, что каналы в игре делятся на IC(Рация, Рядом и т.д.) и OOC, т.е. Игровые и Неигровые. Так же, как в OOC нельзя писать информацию, которую Вы получили в игре, так же нельзя писать в IC то, что Вы получили, например, из Discord.&lt;br /&gt;
&lt;br /&gt;
== Ориентирование на станции ==&lt;br /&gt;
Простой способ ориентирования на станции - таблички. Если Вам не понятно, о чём она сообщает, просто осмотрите её, нажав &amp;lt;code&amp;gt;Shift+ЛКМ&amp;lt;/code&amp;gt; по ней. Обычно, таблички висят на перекрёстках.&lt;br /&gt;
&lt;br /&gt;
== Роли для новичков ==&lt;br /&gt;
Лучше всего для новичков подойдет роль [[Ассистент|Ассистента]], поскольку от него ничего не требуется. Можете свободно изучать управление, игру и станцию. &lt;br /&gt;
Как освоитесь - можете попробовать роли из [[Роли Космической станции#Сервис|Сервисного отдела]], например [[Ботаник|Ботаника]], [[Клоун|Клоуна]] или [[Бармен|Бармена]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Список ролей по их сложности для новичка&#039;&#039;&#039;:&lt;br /&gt;
|-&lt;br /&gt;
! Сложность !! Роль !! Объяснение &lt;br /&gt;
|-&lt;br /&gt;
| Легчайше! || Ассистент, Животные || Изучайте игру в свое удовольствие. &lt;br /&gt;
|-&lt;br /&gt;
| Легко || Любые сервисные роли(Бармен и Шеф-повар немного сложнее остальных), Грузчик, Психолог || С этим можно быстро разобраться, в интернете полно гайдов, а коллеги рады Вам помочь и все показать. Ответственность за станцию Вы не несете. &lt;br /&gt;
|-&lt;br /&gt;
| Средне || Кадет СБ, Интерн, Ученый, Утилизатор, Технический ассистент, Антагонисты || От вас многого не ждут, если что, у Вас всегда есть старшие коллеги, но если Вы не разбираетесь в своих обязанностях, будете обузой.&lt;br /&gt;
|-&lt;br /&gt;
| Сложно|| Офицер СБ, Детектив, Инженер, Врач, Химик, ОБР || У Вас тяжелая работа. Если Вы не умеете её выполнять - подведете станцию, вызовите людские жертвы, закончите в тюрьме. &lt;br /&gt;
|-&lt;br /&gt;
| Невозможно! || Весь отдел Командования, Командир Ядерных Оперативников, ПЦК, Смотритель, Атмосферный Техник || Вы несёте прямую ответственность за станцию. Если Вы не справитесь - игра закончится трагично. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Смерть еще не конец ==&lt;br /&gt;
Если Вы умерли(Счётчик пульса справа показывает надпись &amp;quot;DEAD&amp;quot;), это ещё не значит, что Вам надо выходить из игры! Вылетите из тела(&amp;lt;code&amp;gt;WASD&amp;lt;/code&amp;gt;) и нажмите кнопку &amp;quot;&amp;lt;code&amp;gt;Роли призраков&amp;lt;/code&amp;gt;&amp;quot; снизу: Вашему взору покажется список существ, в которых Вы можете вселиться! Просто нажмите &amp;quot;&amp;lt;code&amp;gt;Запросить&amp;lt;/code&amp;gt;&amp;quot;!&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Channels.png&amp;diff=956</id>
		<title>Файл:Channels.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Channels.png&amp;diff=956"/>
		<updated>2023-05-10T18:31:51Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Каналы радио.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A3%D0%B1%D0%BE%D1%80%D1%89%D0%B8%D0%BA&amp;diff=953</id>
		<title>Уборщик</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A3%D0%B1%D0%BE%D1%80%D1%89%D0%B8%D0%BA&amp;diff=953"/>
		<updated>2023-05-09T19:39:59Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Категория&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JobHeader|color1=#79b347|color2=#6f9e47|textcolor=white|department=Сервис|jobname=Ассистент|img=[[File:Janitor.png|128px]]|access=Технический, Уборщик|difficulty=Лёгкая|duties=Убирайте мусор и кровь. Заменяйте разбитые лампочки. Заставьте каждого члена экипажа упасть хоть раз.|supervisors=[[Глава персонала]]|quote=&amp;quot;Мне 30 и я работаю уборщиком на продвинутой научной станции, наконец моя мама может мной гордиться!&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Что мне делать?==&lt;br /&gt;
&lt;br /&gt;
===Задачи===&lt;br /&gt;
Ваша работа - самая сложная и самая недооценённая на станции, Вы собираете &amp;lt;s&amp;gt;органы от трупов ассистентов&amp;lt;/s&amp;gt; мусор от еды, заменяете лампы, разбитые космическими клещами и вымываете бесконечную космическую смазку с пола. Не забывайте кричать на людей, когда они кидают мусор на пол!&lt;br /&gt;
&lt;br /&gt;
===Снаряжение===&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+Снаряжение&lt;br /&gt;
!Изображение&lt;br /&gt;
!Имя&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Galoshes.png|32px|мини|слева]]&lt;br /&gt;
|Галоши&lt;br /&gt;
|Резиновые ботинки. Защищают от подскальзывания.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Mop.png|32px|мини|слева]]&lt;br /&gt;
|Швабра&lt;br /&gt;
|Ваш главный инструмент. Хранит в себе жидкости.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Trash_Bag.png|16px|мини|слева]]&lt;br /&gt;
|Мешок для мусора&lt;br /&gt;
|Складывайте в него мусор&amp;lt;s&amp;gt;, высыпайте его ГП на стойку&amp;lt;/s&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Bio Suit.png|32px|мини|слева]]&lt;br /&gt;
|Биозащитный костюм&lt;br /&gt;
|Защищает Вас от заражения. Не очень сильно.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Janitorial trolley.png|32px|мини|слева]]&lt;br /&gt;
|Тележка уборщика&lt;br /&gt;
|Тележка. Содержит в себе встроенное ведро, на неё могут быть повешены приспособления уборщика.&lt;br /&gt;
|}&lt;br /&gt;
Однако, это не всё доступное уборщику снаряжение: с продвинутой технологией уборки Научный отдел может создавать для Вас следующие предметы:&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+Продвинутое снаряжение&lt;br /&gt;
!Изображение&lt;br /&gt;
!Имя&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Adv Mop.png|32px|мини|слева]]&lt;br /&gt;
|Продвинутая швабра&lt;br /&gt;
|Улучшенная швабра, заполняющаяся водой автоматически.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Mega Spray Bottle.png|16px|мини|слева]]&lt;br /&gt;
|Мега бутылка с распылителем&lt;br /&gt;
|Распылитель с увеличенным объёмом.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Советы===&lt;br /&gt;
&lt;br /&gt;
*Используйте ботов-уборщиков, они помогут Вам в уборке.&lt;br /&gt;
*Если Вы потеряли что-то из своего снаряжения Вы можете заказать его в Поставках.&lt;br /&gt;
&lt;br /&gt;
[[Category:Роли]]&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A3%D0%B1%D0%BE%D1%80%D1%89%D0%B8%D0%BA&amp;diff=952</id>
		<title>Уборщик</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A3%D0%B1%D0%BE%D1%80%D1%89%D0%B8%D0%BA&amp;diff=952"/>
		<updated>2023-05-09T19:38:46Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: Добавлена страница! С текстом и картинками!!!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{JobHeader|color1=#79b347|color2=#6f9e47|textcolor=white|department=Сервис|jobname=Ассистент|img=[[File:Janitor.png|128px]]|access=Технический, Уборщик|difficulty=Лёгкая|duties=Убирайте мусор и кровь. Заменяйте разбитые лампочки. Заставьте каждого члена экипажа упасть хоть раз.|supervisors=[[Глава персонала]]|quote=&amp;quot;Мне 30 и я работаю уборщиком на продвинутой научной станции, наконец моя мама может мной гордиться!&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==Что мне делать?==&lt;br /&gt;
&lt;br /&gt;
===Задачи===&lt;br /&gt;
Ваша работа - самая сложная и самая недооценённая на станции, Вы собираете &amp;lt;s&amp;gt;органы от трупов ассистентов&amp;lt;/s&amp;gt; мусор от еды, заменяете лампы, разбитые космическими клещами и вымываете бесконечную космическую смазку с пола. Не забывайте кричать на людей, когда они кидают мусор на пол!&lt;br /&gt;
&lt;br /&gt;
===Снаряжение===&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+Снаряжение&lt;br /&gt;
!Изображение&lt;br /&gt;
!Имя&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Galoshes.png|32px|мини|слева]]&lt;br /&gt;
|Галоши&lt;br /&gt;
|Резиновые ботинки. Защищают от подскальзывания.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Mop.png|32px|мини|слева]]&lt;br /&gt;
|Швабра&lt;br /&gt;
|Ваш главный инструмент. Хранит в себе жидкости.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Trash_Bag.png|16px|мини|слева]]&lt;br /&gt;
|Мешок для мусора&lt;br /&gt;
|Складывайте в него мусор&amp;lt;s&amp;gt;, высыпайте его ГП на стойку&amp;lt;/s&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Bio Suit.png|32px|мини|слева]]&lt;br /&gt;
|Биозащитный костюм&lt;br /&gt;
|Защищает Вас от заражения. Не очень сильно.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Janitorial trolley.png|32px|мини|слева]]&lt;br /&gt;
|Тележка уборщика&lt;br /&gt;
|Тележка. Содержит в себе встроенное ведро, на неё могут быть повешены приспособления уборщика.&lt;br /&gt;
|}&lt;br /&gt;
Однако, это не всё доступное уборщику снаряжение: с продвинутой технологией уборки Научный отдел может создавать для Вас следующие предметы:&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+Продвинутое снаряжение&lt;br /&gt;
!Изображение&lt;br /&gt;
!Имя&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Adv Mop.png|32px|мини|слева]]&lt;br /&gt;
|Продвинутая швабра&lt;br /&gt;
|Улучшенная швабра, заполняющаяся водой автоматически.&lt;br /&gt;
|-&lt;br /&gt;
|[[Файл:Mega Spray Bottle.png|16px|мини|слева]]&lt;br /&gt;
|Мега бутылка с распылителем&lt;br /&gt;
|Распылитель с увеличенным объёмом.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Советы===&lt;br /&gt;
&lt;br /&gt;
*Используйте ботов-уборщиков, они помогут Вам в уборке.&lt;br /&gt;
*Если Вы потеряли что-то из своего снаряжения Вы можете заказать его в Поставках.&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Mega_Spray_Bottle.png&amp;diff=951</id>
		<title>Файл:Mega Spray Bottle.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Mega_Spray_Bottle.png&amp;diff=951"/>
		<updated>2023-05-09T19:32:11Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Adv_Mop.png&amp;diff=950</id>
		<title>Файл:Adv Mop.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Adv_Mop.png&amp;diff=950"/>
		<updated>2023-05-09T19:31:29Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Janitorial_trolley.png&amp;diff=949</id>
		<title>Файл:Janitorial trolley.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Janitorial_trolley.png&amp;diff=949"/>
		<updated>2023-05-09T19:08:16Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bio_Suit.png&amp;diff=948</id>
		<title>Файл:Bio Suit.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bio_Suit.png&amp;diff=948"/>
		<updated>2023-05-09T19:08:00Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Trash_Bag.png&amp;diff=947</id>
		<title>Файл:Trash Bag.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Trash_Bag.png&amp;diff=947"/>
		<updated>2023-05-09T19:07:40Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
	<entry>
		<id>https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Mop.png&amp;diff=946</id>
		<title>Файл:Mop.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.ss14.workbench.network/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Mop.png&amp;diff=946"/>
		<updated>2023-05-09T19:07:16Z</updated>

		<summary type="html">&lt;p&gt;Ser11y: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ser11y</name></author>
	</entry>
</feed>