Github гайд: различия между версиями

Материал из Lost Paradise 14
Нет описания правки
(редакция 3.5, требуются картинки)
 
(не показано 15 промежуточных версий 2 участников)
Строка 1: Строка 1:
<big>Git для разработчика Космической Станции 14 </big>
= <center><big>'''Git для разработчика Космической Станции 14''' </big></center> =
Если вы когда-либо следовали халтурно написанному руководству по Git или открывали один из многих невероятно раздутых современных графических интерфейсов git, таких как GitKraken, вы, вероятно, понимаете, что Git может быть действительно запутанным. Цель этого руководства - предоставить вам только информацию, необходимую для правильной разработки для SS14, и предоставить ресурсы для изучения большего, если необходимо.


If you've ever followed a hackily written guide to Git or opened up one of the many incredibly bloated modern git GUIs like GitKraken, you probably recognize that Git can be really confusing. The purpose of this guide is to give you just the information you need to develop properly for SS14 and give you the resources to learn more if necessary.
Вот еще несколько ресурсов для изучения Git:


Here are some more resources for learning about Git:
Онлайн-книга [https://git-scm.com/book/ru/v2 Git-SCM]


The Git-SCM online book
[https://www.atlassian.com/git/tutorials/setting-up-a-repository Руководство Atlassian по Git]. Довольно простое и понятное.
Atlassian's git guides. Good guides for some more advanced stuff
Oh shit, Git?!, a list of solutions to common git problems. This one will come in handy.
Learn Git Branching. This one is interactive, and very in-depth, but you will have learned Git by the end of it. Recommended for intermediate Git users.
1. Setting up Git itself
For the love of god do not install GitKraken or GitHub Desktop. I have felt nothing but endless CBT trying to help people using either of them. I know GitKraken looks all professional and GH Desktop is nice and simple but please do not use either of them unless you know what you are doing.
If you were following our "Setting up a Development Environment" guide, you probably already have Git installed. If not, go to their website and install it now. This will install the Git backend, as well as Git Bash (if you select that option)--one of the many ways you can actually use Git.


If you're on Linux, you'll probably just be using Git through your terminal or whichever IDE you've chosen, and chances are you have it installed already.
[https://ohshitgit.com/ О черт, Git?!] список решений распространенных проблем с git. Этот вам тоже понадобится.


I highly recommend at least trying Git Bash (as will a lot of our developers), but there are friendlier alternatives many use that I'll be showing steps for here as well:
Изучите так-же [https://learngitbranching.js.org/?locale=ru_RU ветвление Git]. На данном сайте вы сможете познакомиться со всеми необходимыми функциями гита путём практики.


TortoiseGit -- old but gold Git GUI that shows info in the file explorer menu and makes basic stuff a breeze
==Настройка вашего Git==
SmartGit -- fully featured Git GUI that's very customizable and simple to use
Ради всего святого, не используйте '''GitHub Desktop'''. Мы знаем, что '''GitHub Desktop''' красив и прост, но, пожалуйста, не используйте его, если вы не знаете, что делаете. Если вы следовали нашему руководству "Настройка среды разработки", у вас, вероятно, уже установлен Git. Если нет, перейдите на их [https://git-scm.com/ сайт] и установите его сейчас. Это позволит установить серверную часть Git, а также Git Bash (если вы выберете эту опцию) - один из многих способов, которыми вы действительно можете использовать Git.
I won't have steps for these (I'm recommending these after I initially wrote this guide) but after trying some more there are other very, very good options:


Fork -- fast and extremely ergonomic GUI, my personal favorite. "Non-free", but it's WinRAR-level non-free, so it's basically free. Has support for partial staging of
Если вы используете Linux, вы, вероятно, просто будете использовать Git через свой терминал или любую другую IDE, которую вы выбрали, и, скорее всего, она у вас уже установлена.
Sublime Merge -- very similar to Fork, looks and feels great and I've gotten a lot of recommendations for it, though I haven't used it much. Also has support for partial staging.
Most IDEs have some form of Git integration as well. JetBrains Rider's Git integration is really good (and I personally recommend Rider for everything SS14-development related). I don't recommend Visual Studio's Git integration, because it's.. not very good.


While you're here, install Python 3.7+ as well if you don't have it already. You can do that here for Windows and Mac, and if you're on Linux you almost certainly have Python installed already. If you don't, figure it out yourself, dork!
Я настоятельно рекомендую хотя бы раз попробовать Git Bash (как и многие наши разработчики), но есть более удобные альтернативы, которые многие используют, и здесь я также покажу шаги для них:


When [setting up your `user.name` and `user.email`](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup#_your_identity), know that these are publicly displayed on all commits that you create. If you want to keep your information private, you can set `user.name` to your username instead of your real name, and `user.email` to the one provided by GitHub when the [`Keep my email addresses private`](https://github.com/settings/emails#toggle_visibility) setting is checked in [GitHub Email Settings](https://github.com/settings/emails#primary_email_select_label).
'''[https://tortoisegit.org/ TortoiseGit]''' - старый, но до сих пор актуальный графический интерфейс Git, который отображает информацию в меню проводника файлов и упрощает базовые вещи. '''[https://www.syntevo.com/smartgit/ SmartGit]''' - полнофункциональный графический интерфейс Git, в котором можно настроить многое под себя, а так-же простой в использовании.
Now that you have Git installed, I recommend you read up a bit on the basics of it first and get acquainted with whatever git client you're working with, whether its just command-line (Git Bash) or anything else.


We're going to run through the process of setting up a Git environment for Space Station 14 so that you can contribute code through pull requests, create your own codebase, or just check out the history of the project.
Есть другие, возможно более привычные вам альтернативы:


1.1 Why are we even using Git?
'''[https://git-fork.com/ Fork]''' - понятный, эргономичный интерфейс, отличный вариант. "Платный", но на деле платный на уровне WinRAR, так что по сути он бесплатный. Имеет поддержку частичной промежуточной обработки.  
Git is version-control software--basically, it's an easy way to track changes to the code, and manage those changes without headaches. It's an invaluable tool for software development, because it easily lets you make new changes, view different changes, see who made changes, etc. without having to coordinate and tabulate everything yourself.


GitHub is an online service that hosts Git repositories (codebases) for easy collaboration. It's perfect for a codebase like SS14, with lots of contributors and lots of history. It also means that we're open-source--anyone can go to our GitHub and download the code!
'''[https://www.sublimemerge.com/ Sublime Merge]''' - очень похож на Fork. Также имеет поддержку частичной промежуточной обработки.


2. Setting up your repositories
Большинство IDE также имеют ту или иную форму интеграции с Git. Интеграция с Git в JetBrains Rider.
Like I said before, a repository is just a codebase. Repositories contain some branches, and those branches contain different commits. You might have heard of both of these--I'll talk more about them in depth later.


A remote repository is just a repository's that's on GitHub. A local repository is one that's actually on your computer.
Не рекомендуется использовать Git-интерфейс в Visual Studio, поскольку в большинстве своём он ужасен. Лучший и рекомендуемый вариант это [https://www.jetbrains.com/rider/ JetBrains Rider].


2.1 Creating your remote repository
И пока вы здесь, установите также Python 3.7+, если у вас его еще нет. Вы можете сделать это [https://www.python.org/downloads/ здесь] для Windows и Mac, а если вы используете Linux, у вас почти наверняка уже установлен Python.
First, let's make our own remote repository fork of Space Station 14. You'll need a GitHub account for this, of course. 'Forking' it like this just means you're copying all of the repository's history and changes into your own remote repository so that you can do stuff freely to the code.
{|
|+
!При [https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup#_your_identity настройке вашего логина и почты] помните, что они публично отображаются во всех создаваемых вами коммит-файлах. Если вы хотите скрыть от остальных свою другую деятельность, вы можете это сделать через [https://github.com/settings/emails#toggle_visibility настройки приватности].
|-
|Теперь, когда у вас установлен Git, я рекомендую вам сначала немного ознакомиться с его основами и ознакомиться с любым клиентом git, с которым вы работаете, будь то просто командная строка (Git Bash) или что-либо еще.
Мы собираемся запустить процесс настройки среды Git для Space Station 14, чтобы вы могли вносить код с помощью запросов на извлечение, создавать свою собственную кодовую базу или просто просматривать историю проекта.
|}


Your remote repository doesn't automatically update with changes from the original SS14 repo--you'll have to do that yourself, which I'll talk about later.
===Зачем мы вообще используем Git?===
Git - это самая удобная платформа где можно контролировать каждую версию - по сути, это простой способ отслеживать изменения в коде и управлять этими изменениями без головной боли. Это бесценный инструмент для разработки программного обеспечения, потому что он позволяет легко вносить новые изменения, просматривать различные изменения, видеть, кто внес изменения, и т.д. без необходимости координировать и сводить все в таблицу самостоятельно.


Navigate to the Space Station 14 repository and click here:
GitHub - это онлайн-сервис, в котором размещены репозитории Git для удобства совместной работы. Он идеально подходит для такой базы кода, как SS14, с большим количеством участников и богатой историей. Это также означает, что у нас открытый исходный код - любой может зайти на [https://github.com/Lost-Paradise-Project/Lost-Paradise/tree/master наш GitHub] и скачать код!


== Настройка вашего репозитория==
Как я уже говорилось ранее, репозиторий - это просто база кода. Репозитории содержат некоторые ветви, и эти ветви содержат разные коммиты. Возможно, вы слышали об обоих из них и знаете как работать, если прошли курс выше.


Удаленный (главный) репозиторий - это просто репозиторий, который находится на GitHub. Локальный репозиторий - это тот, который фактически находится на вашем компьютере и с которым работаете вы!


From there, it'll ask you where to fork it and what to name it--just to your regular account, and name it whatever you please! I'd stick with space-station-14 if you just want to help out with development, though.
===Создание локального репозитория===
Сначала давайте создадим нашу собственную ветку удаленного репозитория Space Station 14. Для этого, конечно, вам понадобится учетная запись на GitHub. Такое "разветвление" просто означает, что вы копируете всю историю репозитория и изменения в свой собственный репозиторий, чтобы вы могли свободно вносить изменения в код и проверять их.


2.2 Creating your local repository
Ваш локальный репозиторий не обновляется автоматически изменениями из исходного репозитория SS14 - вам придется сделать это самостоятельно, о чём мы поговорим позже.
Now, we'll need to download our remote repository onto our computer (cloning) so we can add 20 pairs of clown shoes to every locker some changes to it. You can technically change your remote repository (GitHub has some nice tools), but having it on your computer means you use IDEs like Visual Studio or Rider to build the game and run tests, as well as handle Git stuff easily.


For every step, there will be screenshots and instructions for Git Bash, SmartGit, and TortoiseGit on Windows.
Перейдите в репозиторий Lost-Paradise и создайте ветвь [https://github.com/Lost-Paradise-Project/Lost-Paradise/fork здесь]:


Navigate to somewhere on your computer where you want to put the local repository, and:
После этого он спросит вас, где разместить его и как назвать - не переживайте, никто не узнает как вы его назвали. Назовите его так, как вам заблагорассудится!


TortoiseGit
Теперь нам нужно загрузить наш удаленный репозиторий на ваш компьютер (клонировать), чтобы мы могли добавить 20 пар клоунской обуви в каждый шкафчик. Технически вы можете изменить свой удаленный репозиторий (на GitHub есть несколько полезных инструментов), но наличие его на вашем компьютере означает, что вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также для простой обработки материалов Git.
SmartGit
 
Git Bash
Теперь, на вашем компьютере, куда вы хотите поместить локальный репозиторий, и затем мы введем команду для клонирования нашего удаленного репозитория - не репозитория Einstein engine / RobustToolbox.
Then, we'll enter the command for cloning our remote repository--not the space-wizards/space-station-14 repository.
 
После всех этих махинаций, у вас будет локальный репозиторий, который теперь вы можете изменять! Однако предстоит выполнить еще некоторые настройки.


TortoiseGit
===Проблемы с субмодулями===
SmartGit
Обратите на это внимание! Если вы этого не сделаете, вы получите множество странных ошибок о том, что материал недоступен, когда вы будете пытаться запустить билд.
Git Bash
After this completes, you have a local repository that you can now modify! There's still some more setup to go through, though.


2.3 Submodule woes
У Space Station 14 есть много субмодулей, в первую очередь наш движок, RobustToolbox. Субмодули - это просто репозитории внутри репозитория. Не переживайте, их обновление можно автоматизировать.
Pay attention to this! If you don't do this, you'll get a lot of weird errors about stuff not being available when you actually try to build the game.


Space Station 14 has a lot of submodules--most notably our engine, RobustToolbox. Submodules are just repositories inside a repository, and they need to be updated manually by you. Or do they?
У нас есть программа автоматического обновления субмодулей, поэтому вам не нужно беспокоиться о постоянном запуске git submodule update --init --recursive (команда для ручного обновления субмодулей).


We have an automatic submodule updater so you don’t have to worry about running git submodule update --init --recursive (the command for manually updating submodules) all the time.
Запустите RUN_THIS.py внутри репозитория, который вы загрузили с помощью Python. Предпочтительно также с терминала (python RUN_THIS.py или python3 RUN_THIS.py). Это должно занять несколько секунд, поэтому, если это мгновенно остановится, вы, вероятно, не используете Python 3.7+ или что-то в этом роде.


Run RUN_THIS.py inside the repo you downloaded with Python. Preferably from a terminal too (python RUN_THIS.py or python3 RUN_THIS.py). This should take a few seconds so if it instantly stops you probably aren’t using Python 3.7+ or something.
Если вы используете Windows и вас перенаправляют в Microsoft Store или при попытке запустить приведенную выше команду в вашем терминале появляется сообщение о том, что Python не установлен, вам необходимо отключить ярлык Microsoft, который может вызывать эту проблему. Вы можете сделать это, выполнив поиск "Управление псевдонимами выполнения приложений" в поиске Windows, а затем отключив две ссылки на Python.


If you are on Windows and get redirected to the Microsoft Store or encounter a message in your terminal claiming that Python is not installed when you attempt to run the above command, you will need to disable the Microsoft shortcut that might be causing this issue. You can do this by searching for Manage App Execution Aliases in the Windows search and then turning off the two Python references.
Однако, если вы хотите изменить движок напрямую или хотите обновить субмодуль вручную (автоматическое обновление иногда может быть затруднительным), создайте файл с именем DISABLE_SUBMODULE_AUTOUPDATE внутри BuildChecker / directory.


If you do want to modify the engine directly however, or you want to update the submodule manually (the auto updating can be a pain occasionally), make a file called DISABLE_SUBMODULE_AUTOUPDATE inside the BuildChecker/ directory.
Если вам когда-нибудь понадобится вручную обновить RobustToolbox по какой-либо причине, вы можете использовать cd RobustToolbox; git checkout версии 0.4.87 (замените версию 0.4.87 последней версией RobustToolbox), затем вы можете использовать cd ..\, чтобы вернуться в свое репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.


If you ever need to manually update RobustToolbox for whatever reason you can use cd RobustToolbox; git checkout v0.4.87(replace v0.4.87 with the latest RobustToolbox release) then you can use cd..\ to get back into your SS14 repo. This is also an example of using cd to navigate files from the comfort of your command line.
==Настройка локального репозитория==
Когда вы клонировали свой локальный репозиторий, мы можем приступить к следующему этапу. Учтите, теперь у вас появился свой локальный сервер.  


3. Setting up remotes
Локальные серверы - это просто именованные URL-адреса удаленных репозиториев, которые отслеживает Git, чтобы вы могли выполнять такие действия, как загрузка новых изменений в код или загрузка (pull) кода в ваш разветвленный репозиторий.
When you cloned your remote repository, a remote was automatically added to your local repository. Remotes are just named URLs to remote repositories that Git keeps track of so you can do stuff like download (pull) new changes to the code or upload (push) code to your forked repository.


In this case, the remote automatically added is calledorigin and it points to https://github.com/[username-here]/space-station-14 (or whatever you named the remote repository).
В этом случае автоматически добавляемый удаленный репозиторий называется origin и указывает на <nowiki>https://github.com</nowiki> /[имя пользователя-здесь]/space-station-14 (или как там вы назвали удаленный репозиторий).


One issue: we don't have a reference to the original space-wizards/space-station-14 remote repository anywhere! How are we supposed to update our local repository without it? So let's make sure we've navigated inside our local repo's folder, and we'll add a new remote:
Одна проблема: у нас нигде нет ссылки на исходный удаленный репозиторий space-wizards / einstein-engines. Как мы собираемся обновлять наш локальный репозиторий без него? Легко, просто время от времени будут производиться апстримы, то есть общее обновление сборки, с которым мы можем работать.
== Ветвления и коммиты==
Ветви и коммиты - это две наиболее важные концепции в Git, и большая часть работы, которую вы выполняете, будет вращаться вокруг них.


TortoiseGit
===Что такое коммит? ===
SmartGit
Как я упоминал ранее, коммиты - это просто упакованные изменения в коде, готовые к загрузке в репозиторий. Как разработчик, вы выбираете, какие изменения будут внесены в коммит и когда эти изменения будут зафиксированы. Фиксация относится к созданию коммита, и это, по сути, создает точку сохранения, к которой вы можете вернуться в любое время.
Git Bash
All this does is add a new remote named upstream that points to the original space-wizards/space-station-14 repository. Now we can receive updates from the main repository whenever we want! (see below on how to do that).


The convention is to call the remote pointing to the original repository upstream but you can technically call it whatever you like. I'll be referring to it as 'the upstream', though, and it's terminology Git guides use as well.
К коммит-кодам прикреплены автор, временная метка, сообщение и некоторые изменения кода. У них также есть действительно длинный "хэш коммита", уникальный идентификатор, используемый для обозначения различных коммитов.


Addendum for fork/downstream developers: If a downstream repository you wish to contribute to is set up as a direct fork (IE: GitHub shows a "forked from" label underneath the repo's name), then you'll additionally want to add that fork as a remote (but if the fork isn't set up that way, you can ignore this). You can do this in a way similar to how you've added the upstream as a remote (just use the fork's GitHub link as the remote URL), but be sure to substitute the remote name of upstream with any name you deem appropriate. Your own fork does not have to be a fork of the downstream's fork for this; all that matters is that the commit history in the individual branches you push to your own remote line up with the commit history of wherever you're intending to PR your changes to.
Коммиты - это то, как создается история: на самом деле вы можете просмотреть историю каждого отдельного коммита, сделанного в репозитории SS14, с самого начала, что довольно круто:


Please make sure you read through the [Freezes & Restrictions](https://github.com/space-wizards/space-station-14/issues/8524) and ensure your idea does not fall into the freezes or if your PR requires some prerequisite before being made.
===Что такое ветка?===
4. Branching & Commits
Ветви очень, очень важны. По сути, это просто список изменений в коде (коммитов). Ветвь по умолчанию - "master", и все наши серверы используют эту ветвь для компиляции кода.
Branches and commits are two of the most important concepts in Git, and most of the work you do will revolve around them.


4.1 Whats a commit?
Вы практически всегда находитесь "на ветке", когда работаете со своим кодом, и вы можете легко переключиться, над какой веткой вы работаете.
Like I mentioned before, commits are just packaged up changes to the code. As the developer, you choose which changes go into a commit and when to commit those changes. Committing refers to creating a commit, and it essentially makes a save point that you can go back to at any time.


Commits have an author, timestamp, a message, and some code changes attached to them. They also have a really long 'commit hash', a unique identifier used to refer to different commits.
Как правило, ветви называются в честь того, над чем вы собираетесь в них работать, но на самом деле не имеет значения, как они называются.


Commits are how history is built up--you can actually view the history of every single commit made to the SS14 repository from the beginning, which is pretty cool:
Вы можете создавать столько ветвей, сколько захотите. Когда вы создаете ветку, она "разветвляется" (ни хрена себе, правда?) из текущей ветки, в которой вы находитесь, и становится отдельной независимой ветвью, к которой вы можете добавлять коммиты.
====Слияние ветвей====
Ветви можно объединить в единую. Именно так функции интегрируются в основную основную ветку. Слияние просто означает "взять специальные коммиты из этой ветки и применить их к другой ветке". Вы можете объединить любые две ветви вместе.


Иногда это не удается, потому что обе ветви изменяют одну и ту же часть файла противоречивыми способами, и в этом случае вы получите конфликт слияния - подробнее об этом позже.


Запросы на извлечение с GitHub на самом деле являются "запросом на слияние" - вы говорите, что хотите объединить коммиты из вашей ветки в другую ветку, обычно их основную. Подробнее об этом позже.


(done with git log --reverse)
Запросы на извлечение очень хорошо показывают всю эту информацию.


4.2 What's a branch?
В этом запросе на извлечение Sweeped начал с создания новой ветки. Поскольку теперь у него была свежая ветка, свободная от помех, с которой он мог работать, он начал работать над этой функцией и создавал коммиты, чтобы "сохранять свой прогресс" всякий раз, когда он чувствовал, что это необходимо. Эти коммиты добавлялись в ветку последовательно, и вы можете видеть эволюцию ветки по мере написания большего количества кода. Подробнее о запросах на извлечение мы поговорим позже.
Branches are very, very important. They're basically just a list of changes to the code (commits). The default branch is 'master', and all of our servers use that branch to compile the code.
====Но почемууу?====
Хорошо, технически, конечно, вы можете просто выполнить всю свою работу в главной ветке и извлечь запрос оттуда. Но создание разных ветвей позволяет легко понять, где вы находитесь, сколько изменений вы внесли, и дает возможность работать над несколькими функциями одновременно.


You're pretty much always 'on a branch' when you're working with your code, and you can switch which branch you're working on easily.
Мы также закроем ваш локальный репозиторий (далее именуемый ЛР), если он находится в вашей основной ветке (это может очень легко вызвать проблемы), поэтому не делайте этого.


Generally, branches are named for whatever you're going to be working on in them, but it doesn't really matter what they're named.
===Создание и работа с ветвями===
Создавать ветки довольно просто. Давайте создадим новую ветку под названием funny-feature:


You can make as many branches as you like. When you create a branch, it 'branches out' (no shit, really?) from the current branch you're on and becomes its own independent thing you can add commits to.
Теперь вы можете свободно работать с этой веткой, как вам заблагорассудится, не опасаясь испортить свою важнейшую главную ветку.


Переключаться между ветками довольно просто: это называется проверкой ветки. Когда вы это сделаете, ваши файлы и папки локально будут изменены в соответствии с веткой, поэтому Git будет кричать на вас, если у вас есть локальные изменения, и вы попытаетесь их проверить.


Проверка ветки:


In this diagram, each little node is a different commit, and each color is a different branch.
Затем внесите любые локальные изменения, какие захотите! На самом деле это не имеет значения. Создайте новый файл, удалите все, измените одну строку в файле и т.д. Это не повлияет на вашу главную ветку, потому что теперь это земля с забавными функциями!


Branch merging
===Подготовка и фиксация изменений в вашей ветке===
Branches are important because they can be merged together. This is how features are integrated into the main master branch. A merge just means 'take the special commits from this branch, and apply them to another branch'. You can merge any two branches together.
Еще одна важная вещь: прежде чем вы сможете зафиксировать свои изменения, вы должны добавить их в промежуточную область. Все это означает, что вы указываете, какие файлы вы хотите зафиксировать. Это полезно, потому что вы почти никогда не хотите фиксировать изменения субмодуля, поэтому вы избегаете этого, не добавляя их в промежуточную область.


Sometimes this doesn't go well, because both branches modify the same part in a file in contradictory ways, in which case you'll get a merge conflict--more on that in the addendums.
Как упоминалось ранее, коммиты всегда сопровождаются сообщением, которое представляет собой всего лишь краткое, обязательное описание того, что делается в этом коммите. Или вы можете быть новичком и называть каждый коммит "changes stuff", решать вам.


GitHub pull requests are really a 'merge request'--you're saying that you want to merge the commits on your branch into another branch, usually their master. More on that later.
Если вы хотите посмотреть, что вы изменили в данный момент и что находится в промежуточной области, это довольно просто. Вы вполне можете зайти и просмотреть историю изменений прежде чем загружать ваши наработки. Если же вас всё устраивает, то переходим к следующему этапу.


Pull requests show all this info very well:


Теперь, когда вы убедились, что все эти изменения выглядят хорошо, мы добавим их в промежуточную область и зафиксируем (некоторые графические интерфейсы Git делают это за один шаг)


In this pull request, Swept started out by creating a new branch. Since he now had a fresh branch free of interference to work with, he started working on the feature and created commits to 'save his progress' whenever he felt it was necessary. These commits were added to the branch sequentially, and you can see the evolution of the branch as more code was written. We'll talk more about pull requests later.
Вау, мы зафиксировали наши изменения в ветке! Теперь, когда они зафиксированы, они остаются в истории ветки навсегда (вроде как). Теперь мы можем многое сделать: объединить нашу забавную функцию с нашей локальной главной веткой (если мы по какой-то причине захотим), загрузить (протолкнуть) нашу забавную функцию в наш удаленный репозиторий или полностью уничтожить ветку (среди прочего). Мы выберем нажатие на ветку и отправим запрос на извлечение прямо сейчас.


But whyyy?
==Извлечение и загрузка вашего ПР==
Okay, technically, sure, you can just do all of your work on the master branch and pull request from there. But, creating different branches makes it easy to understand where you are, how many changes you've made, and it makes it possible to work on multiple features at once.
Запрос на извлечение зависит от GitHub. Это просто означает, что вы хотите, чтобы кодовая база объединила ваши изменения в одной из ваших ветвей в одну из своих ветвей - обычно в их главную ветвь. Прежде чем мы сможем это сделать, наш удаленный репозиторий GitHub (origin) должен знать о прекрасных ветвях и коммит-кодах, которые мы создали локально, поэтому мы загружаем или отправляем эти изменения на удаленный сервер.


Also we'll close your PR if it's from your master branch (it can very easily cause issues) so don't do it.
===Загрузка коммитов===
Теперь, когда мы зафиксировали ваши изменения, их довольно легко загрузить. Имейте в виду, что при использовании этих команд Git, вероятно, запросит ваши учетные данные на GitHub, чтобы он мог убедиться, что вам разрешено отправлять запросы на этот удаленный сервер.


4.3 Making and working with branches
При отправке изменений мы указываем удаленный репозиторий, в который мы отправляем коммит, и локальную ветку. Достаточно просто.
Making branches is pretty easy. Let's make a new branch called funny-feature:


TortoiseGit
Отправляем нашу ветку в наш удаленный репозиторий (origin).
SmartGit
Git Bash
Now, you can work freely with this branch as you please without fear of messing up your all-important master branch.


Switching between branches is pretty easy: it's called checking out a branch. When you do this, your files and folders locally will be changed to match the branch, so Git will yell at you if you have local changes and you try to check out.
Теперь самое интересное:Добавьте описание, красивое название, прежде чем подтвердить загрузку вашего обновления в репозиторий, и вот, вполне вероятно что рано или поздно ваша идея станет частью нашей сборки Lost Paradise!
==Обновление нашего репозитория ==
Возможно, прошло некоторое время, неделя или две, с момента вашего последнего запроса на извлечение, и вы хотели бы сделать еще один. Прежде чем вы что-либо предпримете, вам нужно загрузить изменения кода из основного репозитория SS14 в ваш локальный репозиторий. Если вы этого не сделаете, у вас будет устаревший код, и ваши локальные изменения могут не соответствовать тому, как на самом деле будет работать игра - вы даже можете столкнуться с конфликтами слияния при попытке.


Checking out a branch:
Есть два способа обновить ваш репозиторий. Оба метода предполагают, что у вас правильно настроен вышестоящий удаленный сервер - если нет, вернитесь к предыдущему разделу руководства. И, конечно, если вы разрабатываете для нисходящего репозитория, то вам захочется заменить нисходящий репозиторий тем, что вы назвали нисходящим репозиторием на шаге 4, чтобы убедиться, что вы работаете с файлами этого нисходящего репозитория, а не с файлами восходящего репозитория. Убедитесь, что вы всегда проходите процесс обновления при переключении между внесением вклада в форк и внесением вклада в восходящий поток, в противном случае вы неизбежно закончите тем, что либо передадите всю историю нисходящего потока в восходящий поток, либо передадите ссылки на нисходящий поток, которые немедленно вступят в конфликт.


TortoiseGit
Первый метод, fetch + merge , дает вам больше контроля, но может сбить с толку. Второй метод, pulling, прост и непринужден, но не дает вам особого контроля. Однако обычно все, что вам нужно - это pulling .
SmartGit
Git Bash
Then, make whatever local changes you want! It doesn't really matter. Make a new file, delete everything, change one line in a file, etc. It won't affect your master branch, because this isfunny-feature land now!


4.4 Staging and committing changes to your branch
=== Fetch + merge метод===
One more important thing: Before you can commit your changes, you have to add your changes to the staging area. All this means is that you're specifying which files you want to commit. This is helpful, because you almost never want to commit submodule changes, so you avoid that by not adding them to the staging area.
Выборка относится к загрузке новых ветвей и коммитов из удаленного репозитория, но пока ничего с ними не делает (локально ничего изменено не будет). После того, как мы получим изменения из нашего вышестоящего удаленного хранилища (основного репозитория SS14), мы объединим их в нашу локальную главную ветвь.


As mentioned before, commits always come with a message, which is just a short, imperative description of what's being done in that commit. Or you can be a chad and name every commit "changes stuff", up to you.
Когда вы извлекаете удаленный сервер, он загружает эти ветки в ваш локальный репозиторий и добавляет к ним имя удаленного сервера с косой чертой. Итак, когда вы извлекаете upstream , он создает ветку с именем upstream / master . В качестве бонуса вы можете оформить заказ на эту удаленную ветку напрямую, если хотите, и даже создать локальную ветку на ее основе, что особенно полезно, если вы работаете не только с восходящим потоком.


If you want to see what you've currently changed, and what's in the staging area, it's pretty easy:
Сначала давайте сделаем выборку с нашего вышестоящего пульта дистанционного управления. Это займет немного времени.


TortoiseGit
Теперь мы объединим те изменения, которые мы только что загрузили, в нашу основную ветку. Здесь вам не обязательно выполнять слияние с master; вы также можете выполнить слияние с другой веткой. Если вы просто хотели "ускорить" обновление одной из ваших веток, чтобы убедиться, что ваш PR актуален, вы можете вместо этого объединиться с этой веткой.
SmartGit
Git Bash
Now that you've verified that all of these changes look good, we'll add them to the staging area and commit them (some Git GUIs do this in one step)


TortoiseGit
Проверьте ветку, с которой вы хотите объединить контент!
SmartGit
Git Bash
Woo, we've committed our changes to a branch! Now that they're committed, they're in the history of the branch forever (sort of). We can do a lot of things now: merge our funny-feature into our local master branch (if we wanted, for some reason), upload (push) our funny-feature branch to our remote repository, or nuke the branch entirely (among other things). We'll opt for pushing the branch and making a pull request now.


5. Pushing and making a PR
===Способ pull===
A pull request is a GitHub-specific thing. It just means that you want a codebase to merge your changes on one of your branches into one of their branches--usually to their master branch. Before we can do this, our remote GitHub repository (origin) needs to know about the beautiful branches and commits we've created locally, so we upload or push those changes to the remote.
Pull, по сути своей это загрузка новых ветвей и коммитов из удаленного репозитория, а затем объединению их в ветку на вашем локальном репозитории. Это часто проще, потому что в Git есть хорошая система для автоматического определения, с какого пульта вы хотите выполнить выборку (но это не всегда работает чисто).


5.1 Pushing commits
Это гораздо проще предыдущего метода.
It's pretty easy to push our changes now that we've committed them. Be aware that, when using these commands, Git is probably going to ask for your GitHub credentials so that it can verify that you're allowed to push to that remote.


When pushing changes, we specify the remote repository that we're pushing to and the local branch that we're pushing. Simple enough.
Мы подключимся к нашему удаленному серверу (основному репозиторию SS14) и скажем ему, чтобы он объединился с нашей локальной главной веткой.


Pushing our branch to our remote repository (origin):
Сначала оформите свою главную ветку. Мы рассмотрели это ранее. Затем,


TortoiseGit
TortoiseGit
SmartGit
SmartGit
Git Bash
Git Bash
5.2 Making a pull request
Now, the fun part. We'll go to GitHub now and make a pull request for our funny feature.


Если любой из методов прошел успешно, вы успешно обновили свою основную ветку (или любую другую ветку, которую вы выбрали для обновления)! Делайте это регулярно и всегда перед началом работы над новой веткой.
==<center>Дополнения</center>==


==Что нужно иметь в виду?==
Вы более или менее изучили рабочий процесс разработки функций для SS14 с точки зрения Git, но вот некоторые вещи, которые мы действительно хотели бы донести до вашего сознания:


Add a description, a nice title, some screenshots, and hopefully it gets merged.
При создании новой функции всегда создавайте новую ветвь от master, прежде чем что-либо менять. Если вы случайно внесете изменения в чужую ветку, вам будет не до веселья, но это поправимо, ведь всегда есть предыдущие версии.  


6. Updating our repository
Никогда, никогда не делайте коммиты в RobustToolbox или в любые субмодули, подобные Lidgren. Лучше спросить совета у разработчиков. В локальном репозитории верхнего уровня эти субмодули считаются "файлами", поэтому их легко случайно создать и изменить.Не делайте этого. Смотрите ниже, как исправить ваши ошибки, если это произойдет. Если вам нужна дополнительная помощь с Git, не стесняйтесь спрашивать в Lost Paradise #дать имя разделу.
Maybe it's been a while, a week or two, since your last pull request, and you'd like to make another. Before you do anything, you need to download (pull) the code changes from the main SS14 repository into your local repository. If you don't, you'll have out-of-date code and your local changes may not be accurate to how the game will actually run--you might even get merge conflicts when you try to PR.


There are two ways to update your repository. Both methods assume you have the upstream remote set up properly--if not, go back to earlier in the guide. And of course, if you're developing for a downstream, then you'll want to substitute upstream for whatever you named the downstream repo in step 4, to make sure that you're working with that downstream's files instead of upstream's. Make sure you always go through the update process when switching between contributing to a fork, and contributing to upstream, otherwise you'll inevitably end up either PRing the entire history of a downstream to upstream, or making PRs to downstream that immediately conflict.
==Краткий пример рабочего процесса==
Чтобы собрать все в голове и обобщить все это, вот пример рабочего процесса для выполнения нескольких запросов на извлечение с использованием команд Git Bash.


The first method, fetch+merge, gives you more control but can be confusing. The second method, pulling, is simple and easy but doesn't give you much control. However, pulling is usually all you need.
git checkout master # Прежде чем мы создадим новую ветку, мы должны перейти на master .


6.1 Fetch + merge method
git fetch upstream # Мы извлекаем любые новые изменения из репозитория SS14
Fetching refers to downloading the new branches and commits from a remote repository--but not doing anything with them just yet (nothing locally will be changed). After we fetch changes from our upstream remote (the main SS14 repository), we'll merge them into our local master branch.


When you fetch a remote, it downloads those branches to your local repository and prepends them with the remotes name and a slash. So, when you fetch upstream, it'll make a branch called upstream/master. As a bonus, you can checkout this remote branch directly if you'd like, and even create a local branch based off it, which is especially useful if you're working with more than just upstream.
git merge upstream / master # и объединяем их в нашу главную ветку.


First, let's fetch from our upstream remote. It'll take a little bit to complete.
git checkout -b my-new-feature # Создайте новую ветку для функции↵...локальные изменения позже...


TortoiseGit
git add -A # Добавьте все наши локальные изменения в промежуточную область
SmartGit
Git Bash
Now, we'll merge those changes we just downloaded into our master branch. You don't have to merge into master here; you can merge into another branch, too. If you just wanted to 'fast-forward' update one of your branches to make sure your PR is up to date, you can merge into that branch instead.


Check out the branch you want to merge to. Then,
git commit -m "Исправьте взрывы спагетти" # Зафиксируйте их


TortoiseGit
git push origin my-new-feature # и отправьте их на наш удаленный сервер
SmartGit
Git Bash
6.2 Pull method
Pulling refers to fetching (downloading) the new branches and commits from a remote repository, and then merging them into a branch. Pulling is often easier because Git has a nice system for automatically figuring out which remote you want to fetch from (but it doesn't always work cleanly).


Pulling is usually simpler and a lot easier to do.


We'll pull from our upstream remote (the main SS14 repo) and tell it to merge into our local master branch.


First, checkout your master branch. We covered this earlier. Then,
Теперь вы захотите поработать над чем-то другим.


TortoiseGit
git checkout master
SmartGit
Git Bash
If either method went well, you've successfully updated your master branch (or whichever branch you chose to update)! Do this regularly, and always before you start work on a new branch.


Addendums
Прошло не слишком много времени, и ничего важного не было объединено,
1. Things to keep in mind
You've more or less learned the workflow for developing features for SS14 Git-wise, but here's some things I'd really like to hammer into your mind:


When creating a new feature, always always always create a new branch off of master before committing anything. If you accidentally commit your physics changes to your bike horn branch, you're not in for a fun time, but it is fixable (see Oh Shit, Git?! above)
поэтому я не буду снова извлекать и объединять изменения - просто создам новую ветку.
Never, ever commit RobustToolbox or any submodules like Lidgren.Network unless you know what you're doing. In the top-level local repository, these submodules are considered 'files', so it's easy to accidentally stage and commit them. Do not do this. See below for how to fix your fuckups if it happens.
If you need further help with Git, feel free to ask in the SS14 Discord in #howdoicode.
2. A quick example workflow
To get everything in your head and to summarize it all, here's an example workflow for making several pull requests using Git Bash commands.


git checkout master # Before we create a new branch, we should be on master.
git checkout -b еще одна функция↵...локальные изменения позже...
git fetch upstream # We'll fetch any new changes from the SS14 repo..
git merge upstream/master # ..and merge them into our master branch.


git checkout -b my-new-feature # Make a new branch for the feature
git add -A
...local changes later...
git add -A # Add all of our local changes to the staging area
git commit -m "Fix spaghetti explosions" # Commit them
git push origin my-new-feature # and push them to our remote


# Now, I want to work on a different pull request.
git commit -m "Удаляет ядерные оперативники"


git checkout master


# It hasn't been too long, and nothing important was merged,
# so I won't fetch and merge changes again--just a new branch.


git checkout -b another-feature
Я внёс изменение, но потом понял, что мой коммит был совершенно неправильным.
...local changes later...
git add -A
git commit -m "Deletes nuclear operatives"


# I committed, but then I realized my commit was entirely wrong
и я вернусь к этому позже.
# and i'll take it up later.


git revert HEAD
git revert HEAD
git checkout master
git checkout master


...a week later...


# A lot of new stuff was merged, so let's update our branch.
 
'''... неделю спустя...'''
 
Было объединено много нового материала, так что давайте обновим нашу ветку.


git fetch upstream
git fetch upstream
git merge upstream/master master
 
git checkout another-feature
git merge upstream / master master
 
git checkout другая функция
 
git merge master
git merge master


# Now we'll make changes and push again, this time correctly.


...local changes later...
 
Теперь мы внесем изменения и снова запустим, на этот раз правильно.
 
...локальные изменения позже..
 
git add -A
git add -A
git commit -m "Adds Highlander gamemode"
 
git commit -m "Добавляет игровой режим Highlander"
 
git push origin another-feature
git push origin another-feature


# Made both PRs, both were merged, so we're done here


git checkout master
git branch -d my-new-feature # Delete both old branches
git branch -d another-feature
Glossary: The Inner Machinations of Git
Just for reference, here's a little glossary of Git concepts and terms explained in a little more detail, all in one place.


'Branches' are self-contained versions of the codebase that you can add commits to. The default branch is master, but you can make as many as you like.
Созданы оба ПР, оба были объединены, на этом мы закончили
'Repositories' are essentially just folders where you can use Git to make changes and keep track of changes made. Local repositories are repositories you have on your computer, and remote repositories are repositories that live on websites like GitHub. Repositories are made up of a lot of branches.
 
'Remotes' are names for and links to remote repositories that your local repository can use.
мастер оформления заказа git
'Submodules' are repositories that are located inside another repository.
 
'Forks' are repositories that are based on another repository. If you're going to make a pull request to the SS14 repo, you need to fork it first.
ветка git -d my-new-feature # Удалить обе старые ветки
'The working tree' is just every file and folder and what not that's in the repository.
 
'Staging' means adding (with git add) changes from your working tree into the 'staging area', where some actions can be performed on it
ветка git -d another-feature
'Commits' are snapshots of the repository's working tree at a given time. Basically a save point. A 'commit' is just a list of files that have been changed from the last commit, and the changes that are 'committed' are the changes that you've 'staged'.
 
'Checking out' is the act of switching to another branch so you can mess with it or look at its changes locally.
==Глоссарий: Внутренние махинации Git==
'Merging' is the act of integrating the changes from one branch into another branch.
Просто для справки, вот небольшой глоссарий концепций и терминов Git, объясненный чуть более подробно, и все это в одном месте.
'Merge conflicts' occur when integrating the changes from one branch into another can't be done automatically because they both change the same area in a file, or their changes are mutually exclusive in some other way.
 
'Fetching' means getting the branches and commits of a remote repository, but not actually.. doing anything with them yet. You'll just have them updated for if you want to checkout or merge them later.
'Ветви' это автономные версии кодовой базы, в которые вы можете добавлять коммиты. Ветка по умолчанию - master, но вы можете создавать столько, сколько захотите.
'Pulling' is the act of integrating changes from a remote repository's branch into your local branch.
 
'Pull requests' are a GitHub-specific action that allow you to request that your local branch and all of its changes is merged into another repository's branch.
"Репозитории" - это, по сути, просто папки, в которые вы можете использовать Git для внесения изменений и отслеживания внесенных изменений. Локальные репозитории - это репозитории, которые есть у вас на компьютере, а удаленные репозитории - это репозитории, размещенные на веб-сайтах, таких как GitHub. Репозитории состоят из множества ветвей.
'Pushing' is the act of integrating your local changes into a remote repository.
 
There are way more commands and concepts than this, but this is all you really need to know for basic development work.
'Remotes' - это названия удаленных репозиториев и ссылки на них, которые может использовать ваш локальный репозиторий.
 
'Субмодули' - это репозитории, расположенные внутри другого репозитория.
 
"Форки" - это репозитории, основанные на другом репозитории. Если вы собираетесь отправить запрос на извлечение в репозиторий SS14, вам нужно сначала разветвить его.
 
"Рабочее дерево" - это просто каждый файл и папка, а также то, чего нет в репозитории.↵ "Промежуточный" означает добавление (с помощью git add) изменений из вашего рабочего дерева в "промежуточную область", где с ним можно выполнять некоторые действия
 
"Коммиты" - это моментальные снимки рабочего дерева репозитория в данный момент времени. По сути, точка сохранения. "Фиксация" - это просто список файлов, которые были изменены с момента последней фиксации, а "зафиксированные" изменения - это изменения, которые вы "подготовили".
 
"Проверка" - это процесс переключения на другую ветку, чтобы вы могли поработать с ней или просмотреть ее изменения локально.
 
"Слияние" - это процесс интеграции изменений из одной ветки в другую ветку.
 
"Конфликты слияния" возникают, когда интеграция изменений из одной ветви в другую не может быть выполнена автоматически, потому что они оба изменяют одну и ту же область в файле, или их изменения каким-либо другим образом взаимоисключают друг друга.
 
"Выборка" означает получение веток и коммитов удаленного репозитория, но не на самом деле.. пока что с ними ничего не делается. Вы просто обновите их, если захотите оформить заказ или объединить их позже.
 
"Pull" - это процесс интеграции изменений из ветки удаленного репозитория в вашу локальную ветку.
 
"Pull request" - это специфичное для GitHub действие, которое позволяет вам запросить, чтобы ваша локальная ветка и все ее изменения были объединены в ветку другого репозитория.
 
"Проталкивание" - это процесс интеграции ваших локальных изменений в удаленный репозиторий.
 
Существует гораздо больше команд и концепций, чем эта, но это все, что вам действительно нужно знать для базовой работы по разработке.


Appendix A: Helpful tips and tricks
===Полезные советы и подсказки===
There's some stuff I didn't cover, but you'll almost inevitably have to do at some point. I'll cover these all exclusively as git commands in Git Bash quickly, but they're not too hard to figure out in the other programs (same keywords, just look for those). I recommend using their specific guides because I don't know TortoiseGit / SmartGit / GitKraken / Github Desktop well enough to help you with more advanced stuff.
Есть некоторые вещи, которые я не описал, но в какой-то момент вам почти неизбежно придется это сделать. Я быстро опишу все это исключительно как команды git в Git Bash, но их не так уж сложно вычислить в других программах (те же ключевые слова, просто поищите их). Я рекомендую использовать их конкретные руководства, потому что я недостаточно хорошо знаю TortoiseGit / SmartGit / GitKraken / Github Desktop, чтобы помочь вам с более продвинутыми материалами.


One note since it comes up a lot here: HEAD is a fancy name for the commit that you're currently on. Nothing more than that. Branches are also technically fancy names for commits, but you don't need to know that yet.
Одно замечание, поскольку оно часто встречается здесь: HEAD - это причудливое название коммита, над которым вы сейчас работаете. Не более того. Технически ветви также являются причудливыми названиями для коммитов, но вам пока не обязательно это знать.


A lot of these can be found probably more eloquently in Oh Shit, Git?! (see resources above)
Многие из них, мы надеемся вы запомнили читая строки выше.


Resolving merge conflicts
===Решение конфликтов слияния===
WIP i'll write a better guide for this later because it's important
В работе. Когда-нибудь появится гайд получше.


A nasty little maintainer has told you to 'resolve conflicts' or your PR 'wont be merged'. What an asshole! Thankfully, it's not too hard.
Противный маленький разработчик сказал вам "исправить конфликты самому", иначе ваш ПР "не будет объединен". Что за мудак! К счастью, это не слишком сложно.


First, you're going to want to update your local master branch. See above for how to do that.
Во-первых, вы захотите обновить свою локальную главную ветку. Смотрите выше, как это сделать.


When you run git merge master [local branch], it'll either do it cleanly (woohoo) or tell you you have to resolve conflicts (wahhhh).
Когда вы запускаете git merge master [локальная ветка], он либо сделает это чисто (йюхуу!), либо скажет вам, что вы должны разрешить конфликты (уээээ).


All you need to do to resolve conflicts manually is go into the files that are conflicting, remove all the >>>>HEAD and ===== <<<<master nonsense (just notates where the changes originated) and then edit the file so that it properly integrates both sets of changes. Sometimes this is easy, sometimes it's hard. If it's hard, you probably know what you're doing. After that, just git commit.
Все, что вам нужно сделать для разрешения конфликтов вручную, это зайти в конфликтующие файлы, удалить всю ерунду типа >>>>HEAD и ===== <<<<master (просто указывает, откуда произошли изменения), а затем отредактировать файл так, чтобы он должным образом интегрировал оба набора изменений. Иногда это легко, иногда сложно. Если это сложно, вы, вероятно, знаете, что делаете. После этого просто git commit.


Atlassian has a really good guide for this here
У Atlassian есть [https://www.atlassian.com/git/tutorials/using-branches/merge-conflicts '''хороший гайд на эту тему'''].


Checking history
===Проверка истории===
git log --oneline is your friend. It shows short commit hashes (unique IDs for commits), their messages, and their branches and tags.
журнал git -oneline - ваш друг. Он показывает короткие хэши коммитов (уникальные идентификаторы для коммитов), их сообщения, а также их ветви и теги.


Getting rid of local changes
=== Избавление от локальных изменений===
You might have accidentally made changes you didn't want to, and you don't want to bother with making an entirely new branch or something--but you haven't committed those changes yet.
Возможно, вы случайно внесли изменения, которых не хотели, и вам не хочется утруждать себя созданием совершенно новой ветки или чего-то в этом роде, но вы еще не зафиксировали эти изменения.


git reset --hard HEAD
git reset --hard HEAD #Это просто означает "измените рабочее дерево на текущий коммит перед любыми локальными изменениями. Или иначе." Вы не сможете восстановить эти локальные изменения, если сделаете это, так что будьте осторожны.
This just means 'change the working tree to the current commit, before any local changes. Or else.' You can't retrieve those local changes if you do this, so be wary.


Unstaging changes
===Unstaging changes [перевести кому-то адекватному]===
Ah shit, I just staged RobustToolbox by accident. No fear!
Ah shit, I just staged RobustToolbox by accident. No fear!


Строка 354: Строка 346:


git reset HEAD
git reset HEAD
Reverting a commit you made
Oh shit, your xenomorph erotica made its way into a commit/you accidentally committed a submodule! What now? Well, there's two solutions:


git revert HEAD
=== Возврат сделанного вами коммита ===
This makes a new commit undoing the current commit, and then commits it. Hehe commit.
О черт, твой эротический ксеноморф попала в коммит раньше времени или ты случайно зафиксировал субмодуль! Что теперь? Что ж, есть два решения:
 
git revert HEAD #Это создает новый коммит, отменяющий текущий коммит, а затем фиксирует его.
 
Если вы хотите отменить другой коммит, вы можете проверить его хэш в git log --oneline, а затем вызвать git revert [commit hash]. У Git есть более надежная система для этого; вы можете выполнить git revert HEAD ~ 1, чтобы отменить коммит перед вашим текущим, или git revert HEAD ~ 2, чтобы отменить коммит перед этим. Символ ~ 1 просто означает "1 фиксация перед HEAD".


If you want to undo a different commit, you can check its hash in git log --oneline and then call git revert [commit hash]. Git has a more robust system for doing this; you can do git revert HEAD~1 to undo the commit before your current one or git revert HEAD~2 to revert the one before that. The ~1 just means '1 commit before HEAD'.
В качестве альтернативы,


Alternatively,
git reset --hard HEAD ~ 1


git reset --hard HEAD~1
Я не рекомендую делать это, если вы полностью не осознаете, что делаете.
I don't recommend doing this unless you're fully aware of what you're doing.


For when you REALLY don't want anyone to know about that xenomorph erotica you just made. This method rewrites history, so it isn't the best for a collaborative environment. If you do this, you'll need to force push (git push origin [branch] --force) or else it won't work. Force pushing can be dangerous, so again, be sure you know what you're doing.
Когда вы ДЕЙСТВИТЕЛЬНО не хотите, чтобы кто-нибудь узнал о том эротическом ксеноморфе, которого вы только что создали. Этот метод переписывает историю, поэтому он не самый лучший для среды совместной работы. Если вы сделаете это, вам нужно будет принудительно нажать (git push origin [branch] --force), иначе это не сработает. Принудительное нажатие может быть опасным, поэтому, опять же, убедитесь, что вы знаете, что делаете.


Checking out a PR's changes locally
===Проверка изменений PR на локальном уровне===
Ok, this one is a little difficult. There's a couple ways to do this:
Ладно, это немного сложно. Есть пара способов сделать это:


Github CLI
====Github CLI====
Install github's fancy CLI and do this:
Установите модную CLI от github и сделайте это:


gh pr checkout [pr number]
gh pr checkout [номер pr]
Neat.


Changing .git/config
====Измена .git/config====
Go into your .git folder (hidden by default--may need to enable showing hidden folders in Windows), and open up the 'config' file. There should be a bit that looks something like:
Go into your .git folder (hidden by default--may need to enable showing hidden folders in Windows), and open up the 'config' file. There should be a bit that looks something like:


[remote "upstream"]
[remote "upstream"] url = https://github.com/space-wizards/space-station-14 fetch = +refs/heads/*:refs/remotes/upstream/*
url = https://github.com/space-wizards/space-station-14
 
fetch = +refs/heads/*:refs/remotes/upstream/*
Добавьте к этому строку, которая читает fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*, таким образом, эта секция теперь должна выглядеть следующим образом:
Add a line to this that reads fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*, so that section should now look like:


[remote "upstream"]
[remote "upstream"]
Строка 391: Строка 382:
         fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*
         fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*


Now, git fetch upstream. This method is great if you're a maintainer, but it also.. fetches every branch that's still up from every PR that's been opened, so not fantastic if you just wanted one thing. From here, you can git checkout upstream/pr/[pr number] to check out their branch. This is basically what GitHub CLI does but less sophisticated.
Теперь git извлекает данные вверх по течению. Этот метод хорош, если вы полноценный разработчик, а не волонтёр, но он также .. извлекает каждую ветку, которая все еще работает, из каждого открытого PR, так что это не вариант, если вам нужно только что-то конкретное.  
 
Отсюда вы можете выполнить git checkout upstream / pr /[номер pr], чтобы проверить их ветку. По сути, это то, что делает GitHub CLI, но менее сложный.
 
====Добавление нового PR (персональный репозиторий)====
Этот метод немного сосёт, потому что он занимает некоторое время, но если вы хотите проверить чужой форк игры и их ответвления, это наиболее подходящий вариант.
 
На самом деле не так сложно, но это сбивает с толку, если вы не очень хорошо знаете Git.
 
Настройте удаленный доступ к удаленному репозиторию пользователя, извлеките их ветки, а затем извлеките их ветку:


Adding a new remote
удаленное добавление git [имя пользователя] <nowiki>https://github.com</nowiki> /[имя пользователя] / space-station-14
This method kinda sucks because it takes a while but if you want to check out someone else's fork of the game and their branches it's pretty nice.


Not actually that hard but its confusing if you don't know Git very well. Set up a remote to the user's remote repository, fetch their branches, and then checkout their branch:
git fetch [имя пользователя]↵git checkout [имя пользователя] / [название филиала]


git remote add [username] https://github.com/[username]/space-station-14
Это также позволяет вам отправлять ссылки на их удаленный филиал, если вы того пожелаете.
git fetch [username]
git checkout [username]/[branch name]
This also lets you make PRs to their remote branch, if you so desired.

Текущая версия от 16:47, 30 сентября 2024

Git для разработчика Космической Станции 14

Если вы когда-либо следовали халтурно написанному руководству по Git или открывали один из многих невероятно раздутых современных графических интерфейсов git, таких как GitKraken, вы, вероятно, понимаете, что Git может быть действительно запутанным. Цель этого руководства - предоставить вам только информацию, необходимую для правильной разработки для SS14, и предоставить ресурсы для изучения большего, если необходимо.

Вот еще несколько ресурсов для изучения Git:

Онлайн-книга Git-SCM

Руководство Atlassian по Git. Довольно простое и понятное.

О черт, Git?! список решений распространенных проблем с git. Этот вам тоже понадобится.

Изучите так-же ветвление Git. На данном сайте вы сможете познакомиться со всеми необходимыми функциями гита путём практики.

Настройка вашего Git

Ради всего святого, не используйте GitHub Desktop. Мы знаем, что GitHub Desktop красив и прост, но, пожалуйста, не используйте его, если вы не знаете, что делаете. Если вы следовали нашему руководству "Настройка среды разработки", у вас, вероятно, уже установлен Git. Если нет, перейдите на их сайт и установите его сейчас. Это позволит установить серверную часть Git, а также Git Bash (если вы выберете эту опцию) - один из многих способов, которыми вы действительно можете использовать Git.

Если вы используете Linux, вы, вероятно, просто будете использовать Git через свой терминал или любую другую IDE, которую вы выбрали, и, скорее всего, она у вас уже установлена.

Я настоятельно рекомендую хотя бы раз попробовать Git Bash (как и многие наши разработчики), но есть более удобные альтернативы, которые многие используют, и здесь я также покажу шаги для них:

TortoiseGit - старый, но до сих пор актуальный графический интерфейс Git, который отображает информацию в меню проводника файлов и упрощает базовые вещи. SmartGit - полнофункциональный графический интерфейс Git, в котором можно настроить многое под себя, а так-же простой в использовании.

Есть другие, возможно более привычные вам альтернативы:

Fork - понятный, эргономичный интерфейс, отличный вариант. "Платный", но на деле платный на уровне WinRAR, так что по сути он бесплатный. Имеет поддержку частичной промежуточной обработки.

Sublime Merge - очень похож на Fork. Также имеет поддержку частичной промежуточной обработки.

Большинство IDE также имеют ту или иную форму интеграции с Git. Интеграция с Git в JetBrains Rider.

Не рекомендуется использовать Git-интерфейс в Visual Studio, поскольку в большинстве своём он ужасен. Лучший и рекомендуемый вариант это JetBrains Rider.

И пока вы здесь, установите также Python 3.7+, если у вас его еще нет. Вы можете сделать это здесь для Windows и Mac, а если вы используете Linux, у вас почти наверняка уже установлен Python.

При настройке вашего логина и почты помните, что они публично отображаются во всех создаваемых вами коммит-файлах. Если вы хотите скрыть от остальных свою другую деятельность, вы можете это сделать через настройки приватности.
Теперь, когда у вас установлен Git, я рекомендую вам сначала немного ознакомиться с его основами и ознакомиться с любым клиентом git, с которым вы работаете, будь то просто командная строка (Git Bash) или что-либо еще.

Мы собираемся запустить процесс настройки среды Git для Space Station 14, чтобы вы могли вносить код с помощью запросов на извлечение, создавать свою собственную кодовую базу или просто просматривать историю проекта.

Зачем мы вообще используем Git?

Git - это самая удобная платформа где можно контролировать каждую версию - по сути, это простой способ отслеживать изменения в коде и управлять этими изменениями без головной боли. Это бесценный инструмент для разработки программного обеспечения, потому что он позволяет легко вносить новые изменения, просматривать различные изменения, видеть, кто внес изменения, и т.д. без необходимости координировать и сводить все в таблицу самостоятельно.

GitHub - это онлайн-сервис, в котором размещены репозитории Git для удобства совместной работы. Он идеально подходит для такой базы кода, как SS14, с большим количеством участников и богатой историей. Это также означает, что у нас открытый исходный код - любой может зайти на наш GitHub и скачать код!

Настройка вашего репозитория

Как я уже говорилось ранее, репозиторий - это просто база кода. Репозитории содержат некоторые ветви, и эти ветви содержат разные коммиты. Возможно, вы слышали об обоих из них и знаете как работать, если прошли курс выше.

Удаленный (главный) репозиторий - это просто репозиторий, который находится на GitHub. Локальный репозиторий - это тот, который фактически находится на вашем компьютере и с которым работаете вы!

Создание локального репозитория

Сначала давайте создадим нашу собственную ветку удаленного репозитория Space Station 14. Для этого, конечно, вам понадобится учетная запись на GitHub. Такое "разветвление" просто означает, что вы копируете всю историю репозитория и изменения в свой собственный репозиторий, чтобы вы могли свободно вносить изменения в код и проверять их.

Ваш локальный репозиторий не обновляется автоматически изменениями из исходного репозитория SS14 - вам придется сделать это самостоятельно, о чём мы поговорим позже.

Перейдите в репозиторий Lost-Paradise и создайте ветвь здесь:

После этого он спросит вас, где разместить его и как назвать - не переживайте, никто не узнает как вы его назвали. Назовите его так, как вам заблагорассудится!

Теперь нам нужно загрузить наш удаленный репозиторий на ваш компьютер (клонировать), чтобы мы могли добавить 20 пар клоунской обуви в каждый шкафчик. Технически вы можете изменить свой удаленный репозиторий (на GitHub есть несколько полезных инструментов), но наличие его на вашем компьютере означает, что вы используете IDE, такие как Visual Studio или Rider, для сборки игры и запуска тестов, а также для простой обработки материалов Git.

Теперь, на вашем компьютере, куда вы хотите поместить локальный репозиторий, и затем мы введем команду для клонирования нашего удаленного репозитория - не репозитория Einstein engine / RobustToolbox.

После всех этих махинаций, у вас будет локальный репозиторий, который теперь вы можете изменять! Однако предстоит выполнить еще некоторые настройки.

Проблемы с субмодулями

Обратите на это внимание! Если вы этого не сделаете, вы получите множество странных ошибок о том, что материал недоступен, когда вы будете пытаться запустить билд.

У Space Station 14 есть много субмодулей, в первую очередь наш движок, RobustToolbox. Субмодули - это просто репозитории внутри репозитория. Не переживайте, их обновление можно автоматизировать.

У нас есть программа автоматического обновления субмодулей, поэтому вам не нужно беспокоиться о постоянном запуске git submodule update --init --recursive (команда для ручного обновления субмодулей).

Запустите RUN_THIS.py внутри репозитория, который вы загрузили с помощью Python. Предпочтительно также с терминала (python RUN_THIS.py или python3 RUN_THIS.py). Это должно занять несколько секунд, поэтому, если это мгновенно остановится, вы, вероятно, не используете Python 3.7+ или что-то в этом роде.

Если вы используете Windows и вас перенаправляют в Microsoft Store или при попытке запустить приведенную выше команду в вашем терминале появляется сообщение о том, что Python не установлен, вам необходимо отключить ярлык Microsoft, который может вызывать эту проблему. Вы можете сделать это, выполнив поиск "Управление псевдонимами выполнения приложений" в поиске Windows, а затем отключив две ссылки на Python.

Однако, если вы хотите изменить движок напрямую или хотите обновить субмодуль вручную (автоматическое обновление иногда может быть затруднительным), создайте файл с именем DISABLE_SUBMODULE_AUTOUPDATE внутри BuildChecker / directory.

Если вам когда-нибудь понадобится вручную обновить RobustToolbox по какой-либо причине, вы можете использовать cd RobustToolbox; git checkout версии 0.4.87 (замените версию 0.4.87 последней версией RobustToolbox), затем вы можете использовать cd ..\, чтобы вернуться в свое репозиторий SS14. Это также пример использования cd для навигации по файлам, не выходя из командной строки.

Настройка локального репозитория

Когда вы клонировали свой локальный репозиторий, мы можем приступить к следующему этапу. Учтите, теперь у вас появился свой локальный сервер.

Локальные серверы - это просто именованные URL-адреса удаленных репозиториев, которые отслеживает Git, чтобы вы могли выполнять такие действия, как загрузка новых изменений в код или загрузка (pull) кода в ваш разветвленный репозиторий.

В этом случае автоматически добавляемый удаленный репозиторий называется origin и указывает на https://github.com /[имя пользователя-здесь]/space-station-14 (или как там вы назвали удаленный репозиторий).

Одна проблема: у нас нигде нет ссылки на исходный удаленный репозиторий space-wizards / einstein-engines. Как мы собираемся обновлять наш локальный репозиторий без него? Легко, просто время от времени будут производиться апстримы, то есть общее обновление сборки, с которым мы можем работать.

Ветвления и коммиты

Ветви и коммиты - это две наиболее важные концепции в Git, и большая часть работы, которую вы выполняете, будет вращаться вокруг них.

Что такое коммит?

Как я упоминал ранее, коммиты - это просто упакованные изменения в коде, готовые к загрузке в репозиторий. Как разработчик, вы выбираете, какие изменения будут внесены в коммит и когда эти изменения будут зафиксированы. Фиксация относится к созданию коммита, и это, по сути, создает точку сохранения, к которой вы можете вернуться в любое время.

К коммит-кодам прикреплены автор, временная метка, сообщение и некоторые изменения кода. У них также есть действительно длинный "хэш коммита", уникальный идентификатор, используемый для обозначения различных коммитов.

Коммиты - это то, как создается история: на самом деле вы можете просмотреть историю каждого отдельного коммита, сделанного в репозитории SS14, с самого начала, что довольно круто:

Что такое ветка?

Ветви очень, очень важны. По сути, это просто список изменений в коде (коммитов). Ветвь по умолчанию - "master", и все наши серверы используют эту ветвь для компиляции кода.

Вы практически всегда находитесь "на ветке", когда работаете со своим кодом, и вы можете легко переключиться, над какой веткой вы работаете.

Как правило, ветви называются в честь того, над чем вы собираетесь в них работать, но на самом деле не имеет значения, как они называются.

Вы можете создавать столько ветвей, сколько захотите. Когда вы создаете ветку, она "разветвляется" (ни хрена себе, правда?) из текущей ветки, в которой вы находитесь, и становится отдельной независимой ветвью, к которой вы можете добавлять коммиты.

Слияние ветвей

Ветви можно объединить в единую. Именно так функции интегрируются в основную основную ветку. Слияние просто означает "взять специальные коммиты из этой ветки и применить их к другой ветке". Вы можете объединить любые две ветви вместе.

Иногда это не удается, потому что обе ветви изменяют одну и ту же часть файла противоречивыми способами, и в этом случае вы получите конфликт слияния - подробнее об этом позже.

Запросы на извлечение с GitHub на самом деле являются "запросом на слияние" - вы говорите, что хотите объединить коммиты из вашей ветки в другую ветку, обычно их основную. Подробнее об этом позже.

Запросы на извлечение очень хорошо показывают всю эту информацию.

В этом запросе на извлечение Sweeped начал с создания новой ветки. Поскольку теперь у него была свежая ветка, свободная от помех, с которой он мог работать, он начал работать над этой функцией и создавал коммиты, чтобы "сохранять свой прогресс" всякий раз, когда он чувствовал, что это необходимо. Эти коммиты добавлялись в ветку последовательно, и вы можете видеть эволюцию ветки по мере написания большего количества кода. Подробнее о запросах на извлечение мы поговорим позже.

Но почемууу?

Хорошо, технически, конечно, вы можете просто выполнить всю свою работу в главной ветке и извлечь запрос оттуда. Но создание разных ветвей позволяет легко понять, где вы находитесь, сколько изменений вы внесли, и дает возможность работать над несколькими функциями одновременно.

Мы также закроем ваш локальный репозиторий (далее именуемый ЛР), если он находится в вашей основной ветке (это может очень легко вызвать проблемы), поэтому не делайте этого.

Создание и работа с ветвями

Создавать ветки довольно просто. Давайте создадим новую ветку под названием funny-feature:

Теперь вы можете свободно работать с этой веткой, как вам заблагорассудится, не опасаясь испортить свою важнейшую главную ветку.

Переключаться между ветками довольно просто: это называется проверкой ветки. Когда вы это сделаете, ваши файлы и папки локально будут изменены в соответствии с веткой, поэтому Git будет кричать на вас, если у вас есть локальные изменения, и вы попытаетесь их проверить.

Проверка ветки:

Затем внесите любые локальные изменения, какие захотите! На самом деле это не имеет значения. Создайте новый файл, удалите все, измените одну строку в файле и т.д. Это не повлияет на вашу главную ветку, потому что теперь это земля с забавными функциями!

Подготовка и фиксация изменений в вашей ветке

Еще одна важная вещь: прежде чем вы сможете зафиксировать свои изменения, вы должны добавить их в промежуточную область. Все это означает, что вы указываете, какие файлы вы хотите зафиксировать. Это полезно, потому что вы почти никогда не хотите фиксировать изменения субмодуля, поэтому вы избегаете этого, не добавляя их в промежуточную область.

Как упоминалось ранее, коммиты всегда сопровождаются сообщением, которое представляет собой всего лишь краткое, обязательное описание того, что делается в этом коммите. Или вы можете быть новичком и называть каждый коммит "changes stuff", решать вам.

Если вы хотите посмотреть, что вы изменили в данный момент и что находится в промежуточной области, это довольно просто. Вы вполне можете зайти и просмотреть историю изменений прежде чем загружать ваши наработки. Если же вас всё устраивает, то переходим к следующему этапу.


Теперь, когда вы убедились, что все эти изменения выглядят хорошо, мы добавим их в промежуточную область и зафиксируем (некоторые графические интерфейсы Git делают это за один шаг)

Вау, мы зафиксировали наши изменения в ветке! Теперь, когда они зафиксированы, они остаются в истории ветки навсегда (вроде как). Теперь мы можем многое сделать: объединить нашу забавную функцию с нашей локальной главной веткой (если мы по какой-то причине захотим), загрузить (протолкнуть) нашу забавную функцию в наш удаленный репозиторий или полностью уничтожить ветку (среди прочего). Мы выберем нажатие на ветку и отправим запрос на извлечение прямо сейчас.

Извлечение и загрузка вашего ПР

Запрос на извлечение зависит от GitHub. Это просто означает, что вы хотите, чтобы кодовая база объединила ваши изменения в одной из ваших ветвей в одну из своих ветвей - обычно в их главную ветвь. Прежде чем мы сможем это сделать, наш удаленный репозиторий GitHub (origin) должен знать о прекрасных ветвях и коммит-кодах, которые мы создали локально, поэтому мы загружаем или отправляем эти изменения на удаленный сервер.

Загрузка коммитов

Теперь, когда мы зафиксировали ваши изменения, их довольно легко загрузить. Имейте в виду, что при использовании этих команд Git, вероятно, запросит ваши учетные данные на GitHub, чтобы он мог убедиться, что вам разрешено отправлять запросы на этот удаленный сервер.

При отправке изменений мы указываем удаленный репозиторий, в который мы отправляем коммит, и локальную ветку. Достаточно просто.

Отправляем нашу ветку в наш удаленный репозиторий (origin).

Теперь самое интересное:Добавьте описание, красивое название, прежде чем подтвердить загрузку вашего обновления в репозиторий, и вот, вполне вероятно что рано или поздно ваша идея станет частью нашей сборки Lost Paradise!

Обновление нашего репозитория

Возможно, прошло некоторое время, неделя или две, с момента вашего последнего запроса на извлечение, и вы хотели бы сделать еще один. Прежде чем вы что-либо предпримете, вам нужно загрузить изменения кода из основного репозитория SS14 в ваш локальный репозиторий. Если вы этого не сделаете, у вас будет устаревший код, и ваши локальные изменения могут не соответствовать тому, как на самом деле будет работать игра - вы даже можете столкнуться с конфликтами слияния при попытке.

Есть два способа обновить ваш репозиторий. Оба метода предполагают, что у вас правильно настроен вышестоящий удаленный сервер - если нет, вернитесь к предыдущему разделу руководства. И, конечно, если вы разрабатываете для нисходящего репозитория, то вам захочется заменить нисходящий репозиторий тем, что вы назвали нисходящим репозиторием на шаге 4, чтобы убедиться, что вы работаете с файлами этого нисходящего репозитория, а не с файлами восходящего репозитория. Убедитесь, что вы всегда проходите процесс обновления при переключении между внесением вклада в форк и внесением вклада в восходящий поток, в противном случае вы неизбежно закончите тем, что либо передадите всю историю нисходящего потока в восходящий поток, либо передадите ссылки на нисходящий поток, которые немедленно вступят в конфликт.

Первый метод, fetch + merge , дает вам больше контроля, но может сбить с толку. Второй метод, pulling, прост и непринужден, но не дает вам особого контроля. Однако обычно все, что вам нужно - это pulling .

Fetch + merge метод

Выборка относится к загрузке новых ветвей и коммитов из удаленного репозитория, но пока ничего с ними не делает (локально ничего изменено не будет). После того, как мы получим изменения из нашего вышестоящего удаленного хранилища (основного репозитория SS14), мы объединим их в нашу локальную главную ветвь.

Когда вы извлекаете удаленный сервер, он загружает эти ветки в ваш локальный репозиторий и добавляет к ним имя удаленного сервера с косой чертой. Итак, когда вы извлекаете upstream , он создает ветку с именем upstream / master . В качестве бонуса вы можете оформить заказ на эту удаленную ветку напрямую, если хотите, и даже создать локальную ветку на ее основе, что особенно полезно, если вы работаете не только с восходящим потоком.

Сначала давайте сделаем выборку с нашего вышестоящего пульта дистанционного управления. Это займет немного времени.

Теперь мы объединим те изменения, которые мы только что загрузили, в нашу основную ветку. Здесь вам не обязательно выполнять слияние с master; вы также можете выполнить слияние с другой веткой. Если вы просто хотели "ускорить" обновление одной из ваших веток, чтобы убедиться, что ваш PR актуален, вы можете вместо этого объединиться с этой веткой.

Проверьте ветку, с которой вы хотите объединить контент!

Способ pull

Pull, по сути своей это загрузка новых ветвей и коммитов из удаленного репозитория, а затем объединению их в ветку на вашем локальном репозитории. Это часто проще, потому что в Git есть хорошая система для автоматического определения, с какого пульта вы хотите выполнить выборку (но это не всегда работает чисто).

Это гораздо проще предыдущего метода.

Мы подключимся к нашему удаленному серверу (основному репозиторию SS14) и скажем ему, чтобы он объединился с нашей локальной главной веткой.

Сначала оформите свою главную ветку. Мы рассмотрели это ранее. Затем,

TortoiseGit

SmartGit

Git Bash

Если любой из методов прошел успешно, вы успешно обновили свою основную ветку (или любую другую ветку, которую вы выбрали для обновления)! Делайте это регулярно и всегда перед началом работы над новой веткой.

Дополнения

Что нужно иметь в виду?

Вы более или менее изучили рабочий процесс разработки функций для SS14 с точки зрения Git, но вот некоторые вещи, которые мы действительно хотели бы донести до вашего сознания:

При создании новой функции всегда создавайте новую ветвь от master, прежде чем что-либо менять. Если вы случайно внесете изменения в чужую ветку, вам будет не до веселья, но это поправимо, ведь всегда есть предыдущие версии.

Никогда, никогда не делайте коммиты в RobustToolbox или в любые субмодули, подобные Lidgren. Лучше спросить совета у разработчиков. В локальном репозитории верхнего уровня эти субмодули считаются "файлами", поэтому их легко случайно создать и изменить.Не делайте этого. Смотрите ниже, как исправить ваши ошибки, если это произойдет. Если вам нужна дополнительная помощь с Git, не стесняйтесь спрашивать в Lost Paradise #дать имя разделу.

Краткий пример рабочего процесса

Чтобы собрать все в голове и обобщить все это, вот пример рабочего процесса для выполнения нескольких запросов на извлечение с использованием команд Git Bash.

git checkout master # Прежде чем мы создадим новую ветку, мы должны перейти на master .

git fetch upstream # Мы извлекаем любые новые изменения из репозитория SS14

git merge upstream / master # и объединяем их в нашу главную ветку.

git checkout -b my-new-feature # Создайте новую ветку для функции↵...локальные изменения позже...

git add -A # Добавьте все наши локальные изменения в промежуточную область

git commit -m "Исправьте взрывы спагетти" # Зафиксируйте их

git push origin my-new-feature # и отправьте их на наш удаленный сервер


Теперь вы захотите поработать над чем-то другим.

git checkout master

Прошло не слишком много времени, и ничего важного не было объединено,

поэтому я не буду снова извлекать и объединять изменения - просто создам новую ветку.

git checkout -b еще одна функция↵...локальные изменения позже...

git add -A

git commit -m "Удаляет ядерные оперативники"


Я внёс изменение, но потом понял, что мой коммит был совершенно неправильным.

и я вернусь к этому позже.

git revert HEAD

git checkout master


... неделю спустя...

Было объединено много нового материала, так что давайте обновим нашу ветку.

git fetch upstream

git merge upstream / master master

git checkout другая функция

git merge master


Теперь мы внесем изменения и снова запустим, на этот раз правильно.

...локальные изменения позже..

git add -A

git commit -m "Добавляет игровой режим Highlander"

git push origin another-feature


Созданы оба ПР, оба были объединены, на этом мы закончили

мастер оформления заказа git

ветка git -d my-new-feature # Удалить обе старые ветки

ветка git -d another-feature

Глоссарий: Внутренние махинации Git

Просто для справки, вот небольшой глоссарий концепций и терминов Git, объясненный чуть более подробно, и все это в одном месте.

'Ветви' это автономные версии кодовой базы, в которые вы можете добавлять коммиты. Ветка по умолчанию - master, но вы можете создавать столько, сколько захотите.

"Репозитории" - это, по сути, просто папки, в которые вы можете использовать Git для внесения изменений и отслеживания внесенных изменений. Локальные репозитории - это репозитории, которые есть у вас на компьютере, а удаленные репозитории - это репозитории, размещенные на веб-сайтах, таких как GitHub. Репозитории состоят из множества ветвей.

'Remotes' - это названия удаленных репозиториев и ссылки на них, которые может использовать ваш локальный репозиторий.

'Субмодули' - это репозитории, расположенные внутри другого репозитория.

"Форки" - это репозитории, основанные на другом репозитории. Если вы собираетесь отправить запрос на извлечение в репозиторий SS14, вам нужно сначала разветвить его.

"Рабочее дерево" - это просто каждый файл и папка, а также то, чего нет в репозитории.↵ "Промежуточный" означает добавление (с помощью git add) изменений из вашего рабочего дерева в "промежуточную область", где с ним можно выполнять некоторые действия

"Коммиты" - это моментальные снимки рабочего дерева репозитория в данный момент времени. По сути, точка сохранения. "Фиксация" - это просто список файлов, которые были изменены с момента последней фиксации, а "зафиксированные" изменения - это изменения, которые вы "подготовили".

"Проверка" - это процесс переключения на другую ветку, чтобы вы могли поработать с ней или просмотреть ее изменения локально.

"Слияние" - это процесс интеграции изменений из одной ветки в другую ветку.

"Конфликты слияния" возникают, когда интеграция изменений из одной ветви в другую не может быть выполнена автоматически, потому что они оба изменяют одну и ту же область в файле, или их изменения каким-либо другим образом взаимоисключают друг друга.

"Выборка" означает получение веток и коммитов удаленного репозитория, но не на самом деле.. пока что с ними ничего не делается. Вы просто обновите их, если захотите оформить заказ или объединить их позже.

"Pull" - это процесс интеграции изменений из ветки удаленного репозитория в вашу локальную ветку.

"Pull request" - это специфичное для GitHub действие, которое позволяет вам запросить, чтобы ваша локальная ветка и все ее изменения были объединены в ветку другого репозитория.

"Проталкивание" - это процесс интеграции ваших локальных изменений в удаленный репозиторий.

Существует гораздо больше команд и концепций, чем эта, но это все, что вам действительно нужно знать для базовой работы по разработке.

Полезные советы и подсказки

Есть некоторые вещи, которые я не описал, но в какой-то момент вам почти неизбежно придется это сделать. Я быстро опишу все это исключительно как команды git в Git Bash, но их не так уж сложно вычислить в других программах (те же ключевые слова, просто поищите их). Я рекомендую использовать их конкретные руководства, потому что я недостаточно хорошо знаю TortoiseGit / SmartGit / GitKraken / Github Desktop, чтобы помочь вам с более продвинутыми материалами.

Одно замечание, поскольку оно часто встречается здесь: HEAD - это причудливое название коммита, над которым вы сейчас работаете. Не более того. Технически ветви также являются причудливыми названиями для коммитов, но вам пока не обязательно это знать.

Многие из них, мы надеемся вы запомнили читая строки выше.

Решение конфликтов слияния

В работе. Когда-нибудь появится гайд получше.

Противный маленький разработчик сказал вам "исправить конфликты самому", иначе ваш ПР "не будет объединен". Что за мудак! К счастью, это не слишком сложно.

Во-первых, вы захотите обновить свою локальную главную ветку. Смотрите выше, как это сделать.

Когда вы запускаете git merge master [локальная ветка], он либо сделает это чисто (йюхуу!), либо скажет вам, что вы должны разрешить конфликты (уээээ).

Все, что вам нужно сделать для разрешения конфликтов вручную, это зайти в конфликтующие файлы, удалить всю ерунду типа >>>>HEAD и ===== <<<<master (просто указывает, откуда произошли изменения), а затем отредактировать файл так, чтобы он должным образом интегрировал оба набора изменений. Иногда это легко, иногда сложно. Если это сложно, вы, вероятно, знаете, что делаете. После этого просто git commit.

У Atlassian есть хороший гайд на эту тему.

Проверка истории

журнал git -oneline - ваш друг. Он показывает короткие хэши коммитов (уникальные идентификаторы для коммитов), их сообщения, а также их ветви и теги.

Избавление от локальных изменений

Возможно, вы случайно внесли изменения, которых не хотели, и вам не хочется утруждать себя созданием совершенно новой ветки или чего-то в этом роде, но вы еще не зафиксировали эти изменения.

git reset --hard HEAD #Это просто означает "измените рабочее дерево на текущий коммит перед любыми локальными изменениями. Или иначе." Вы не сможете восстановить эти локальные изменения, если сделаете это, так что будьте осторожны.

Unstaging changes [перевести кому-то адекватному]

Ah shit, I just staged RobustToolbox by accident. No fear!

git reset HEAD [file] Alternatively, to unstage everything:

git reset HEAD

Возврат сделанного вами коммита

О черт, твой эротический ксеноморф попала в коммит раньше времени или ты случайно зафиксировал субмодуль! Что теперь? Что ж, есть два решения:

git revert HEAD #Это создает новый коммит, отменяющий текущий коммит, а затем фиксирует его.

Если вы хотите отменить другой коммит, вы можете проверить его хэш в git log --oneline, а затем вызвать git revert [commit hash]. У Git есть более надежная система для этого; вы можете выполнить git revert HEAD ~ 1, чтобы отменить коммит перед вашим текущим, или git revert HEAD ~ 2, чтобы отменить коммит перед этим. Символ ~ 1 просто означает "1 фиксация перед HEAD".

В качестве альтернативы,

git reset --hard HEAD ~ 1

Я не рекомендую делать это, если вы полностью не осознаете, что делаете.

Когда вы ДЕЙСТВИТЕЛЬНО не хотите, чтобы кто-нибудь узнал о том эротическом ксеноморфе, которого вы только что создали. Этот метод переписывает историю, поэтому он не самый лучший для среды совместной работы. Если вы сделаете это, вам нужно будет принудительно нажать (git push origin [branch] --force), иначе это не сработает. Принудительное нажатие может быть опасным, поэтому, опять же, убедитесь, что вы знаете, что делаете.

Проверка изменений PR на локальном уровне

Ладно, это немного сложно. Есть пара способов сделать это:

Github CLI

Установите модную CLI от github и сделайте это:

gh pr checkout [номер pr]

Измена .git/config

Go into your .git folder (hidden by default--may need to enable showing hidden folders in Windows), and open up the 'config' file. There should be a bit that looks something like:

[remote "upstream"] url = https://github.com/space-wizards/space-station-14 fetch = +refs/heads/*:refs/remotes/upstream/*

Добавьте к этому строку, которая читает fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*, таким образом, эта секция теперь должна выглядеть следующим образом:

[remote "upstream"]

       url = https://github.com/space-wizards/space-station-14
       fetch = +refs/heads/*:refs/remotes/upstream/*
       fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*

Теперь git извлекает данные вверх по течению. Этот метод хорош, если вы полноценный разработчик, а не волонтёр, но он также .. извлекает каждую ветку, которая все еще работает, из каждого открытого PR, так что это не вариант, если вам нужно только что-то конкретное.

Отсюда вы можете выполнить git checkout upstream / pr /[номер pr], чтобы проверить их ветку. По сути, это то, что делает GitHub CLI, но менее сложный.

Добавление нового PR (персональный репозиторий)

Этот метод немного сосёт, потому что он занимает некоторое время, но если вы хотите проверить чужой форк игры и их ответвления, это наиболее подходящий вариант.

На самом деле не так сложно, но это сбивает с толку, если вы не очень хорошо знаете Git.

Настройте удаленный доступ к удаленному репозиторию пользователя, извлеките их ветки, а затем извлеките их ветку:

удаленное добавление git [имя пользователя] https://github.com /[имя пользователя] / space-station-14

git fetch [имя пользователя]↵git checkout [имя пользователя] / [название филиала]

Это также позволяет вам отправлять ссылки на их удаленный филиал, если вы того пожелаете.