|
|
| Строка 1: |
Строка 1: |
| {{wip}} | | {{wip}} |
|
| |
|
| |
| Небольшое руководство по консольному git.<br />
| |
| Часть про установку рассчитана на Windows, часть про работу с Github будет актуальна и для пользователей гуи-интерфейсов.
| |
|
| |
| Есть много различных GUI-клиентов, например [https://tortoisegit.org/ TortoiseGit] (на [https://tgstation13.org/wiki/Setting_up_git вики tg-станции] есть подробный обновляемый гайд), [https://www.sourcetreeapp.com/ SourceTree].<br />
| |
| Мы же в данной статье остановимся по большей части на консольном клиенте git:
| |
| # Сам Git - изначально консольный инструмент. И удобный!
| |
| # Консоль дает больше возможностей, чем GUI-клиенты.
| |
| # В GUI-клиентах есть возможность запустить консоль, если понадобится. Так что это универсальная инструкция.
| |
| # С консолью, вы словно хакер!
| |
|
| |
| В любом случае, какой-бы клиент вы не выбрали, в интернете всегда найдется документация и куча различных инструкций.
| |
|
| |
| == Git клиент, настройка ==
| |
| [[Image:Git-example.png|thumb|350px|Пример Posh-Git на Windows 8.]]
| |
| Гитхаб - наиболее популярный в сообществе станции хостинг репозиториев. Более подробнее в [[Git/GitHub]]
| |
|
| |
| Регистрируемся по адресу https://github.com/join, подтверждаем email, всё стандартно.<br>
| |
| '''''Важно:''' email, который вы укажете при регистрации, в дальнейшем будет указан под каждым вашим коммитом на гитхабе. Если не хотите светить - зарегистрируйте отдельный.''
| |
|
| |
| '''''UPD:''' Часть ниже устарела, нужно обновление. Для консоли требуется установка сразу https://git-scm.com/downloads, так что Github for windows опционален. Но если вас до усрачки пугает консоль - он хороший выбор.''
| |
|
| |
| Самый простой способ начать - поставить Github for windows все с того же гитхаба: https://desktop.github.com/<br />
| |
| Да, это графический клиент, и если работа с консолью не понравится, можете попробовать использовать его. На деле же нам потребуется запустить его только раз для настройки.<br />
| |
| Но что нас интересует больше - это идущие в комплекте [http://git-scm.com/downloads Git] (сам клиент) и [https://github.com/dahlbyk/posh-git Posh-Git] (расширение для Windows Powershell, не обязательно но крайне полезно - автодополнение по TAB и подсветка), самостоятельная установка и настройка которых может вызвать сложности (кому не хватает приключений - в интернете можно найти инструкции).
| |
|
| |
| Итак, запускаем с рабочего стола GitHub, логинимся под своим зарегестрированным ранее аккаунтом, пропускаем шаг с локальными репозиториями.<br />
| |
| Осталось только зайти в Options, и выбрать место для хранения репозиториев.<br />
| |
| Всё, можете закрыть и забыть про гуи, и с рабочего стола запустить Git Shell.
| |
|
| |
| == Краткий курс ==
| |
| Здесь и дальше алгоритм приводится на примере текущего основного репозитория Тау Киты, TauCetiClassic.
| |
|
| |
| ==== Делаем форк ====
| |
| Достаточно на странице репозитория https://github.com/TauCetiStation/TauCetiClassic в правом верхнем углу нажать Fork.<br />
| |
| В течении пары минут гитхаб подготовит ваш собственный репозиторий по адресу вида https://github.com/%аккаунт%/TauCetiClassic<br />
| |
| ''Кстати, нет никакой необходимости поддерживать актуальность вашего форка, не нужно специально его обновлять или пересоздавать. Ниже будет описанно, как обновляться напрямую с репозитория Тау Киты, а форк нам пригодится только для создания ПуллРеквестов.''
| |
|
| |
| ==== Создаем локальную рабочую копию ====
| |
| Со страницы '''вашего''' репозитория среди кнопок находим и копируем https адрес
| |
| <pre>
| |
| https://github.com/%аккаунт%/TauCetiClassic.git
| |
| </pre>
| |
| возвращаемся в консоль, вводим git clone и вставляем скопированный адрес. Можно вторым параметром указать имя папки, иначе же возьмется имя репозитория.
| |
| <pre>
| |
| git clone https://github.com/%аккаунт%/TauCetiClassic.git tauceticlassic
| |
| </pre>
| |
| По окончанию клонирования у вас будет актуальный билд в папке <code>tauceticlassic/</code>, с которым можно уже работать в DreamMaker-е. Прежде всего, для продолжения работы в консоли, вам необходимо сделать вход в папку, написав в ней <code>cd %имя папки%</code><br />
| |
|
| |
| ==== Подключаем удаленный репозиторий ====
| |
| Время от времени необходимо обновлять свой репозиторий с центрального. Это нужно делать, например, в случае возникновения конфликтов (если, пока вы пилили фичу, кто-то успел в аналогичных файлах внести свои изменения), и просто для профилактики.<br />
| |
| Традиционно центральный репозиторий именуется как <code>upstream</code> (или апстрим), но никто не мешает подобрать своё имя, к тому же никто не мешает иметь подключенными сразу несколько удаленных репозиториев. Кстати, после <code>git clone ...</code> у вас уже есть 1 подключенный удаленный репозиторий под названием <code>origin</code>, ссылающийся на репозиторий, который вы клонировали (ваш форк на гитхабе).<br />
| |
| Подключим центральный репозиторий Тау Киты:
| |
| <pre>
| |
| git remote add upstream https://github.com/TauCetiStation/TauCetiClassic.git
| |
| </pre>
| |
| Пока мы только создали ссылку на репозиторий, нужно еще обновить изменения:
| |
| <pre>
| |
| git fetch upstream
| |
| </pre>
| |
| Можете посмотреть список своих удаленных репозиториев по команде <code>git remote -v</code><br />
| |
|
| |
| ==== Создаем ветку, переключаем ветки ====
| |
| Ветка, или же branch - ссылка на определенное состояние репозитория.
| |
| Изначально у вас есть основная ветка <code>master</code>, как правило это актуальная рабочая версия, которая и стоит на сервере.<br />
| |
| Но при активной работе над билдом, предпочтительно её не трогать, и создавать для каждого фикса\фичи свою отдельную ветку.
| |
| <pre>
| |
| git checkout -b some-awesome-feature
| |
| </pre>
| |
| Создаст ответвление от вашей текущей ветки с названием <code>some-awesome-feature</code>, и переключится на неё. <br />
| |
| '''Важно:''' по умолчанию создается ответвление от '''текущей''' ветки, что может быть неудобно в случае работы сразу над несколькими ветками. В качестве параметра можно указать необходимую ветку для ответвления <code>git checkout -b some-awesome-feature master</code>
| |
|
| |
| Список своих веток можно посмотреть по команде <code>git branch -v</code>. На каждую из них можно переключится по команде <code>git checkout %branchname%</code>, например
| |
| <pre>
| |
| git checkout master
| |
| </pre>
| |
| Вернет вас на основную ветку. Имя текущей ветки можно посмотреть в <code>git status</code>, в большинстве случаев оно будет так же сразу отображено в консоли.
| |
|
| |
|
| |
| '''Важно:''' гит не позволит переключить ветку, если у вас есть незафиксированные изменения в репозитории. Возможные решения проблемы:
| |
| * Если это случайные, не нужные изменения, можно их сбросить командой <code>git checkout .</code>
| |
| * Спрятать изменения через <code>[https://git-scm.com/book/ru/v1/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-Git-%D0%9F%D1%80%D1%8F%D1%82%D0%B0%D0%BD%D1%8C%D0%B5 git stash]</code>
| |
| * Если это часть работы (например, работали над фичей и возникла необходимость переключиться на другую ветку), то возможно лучшим способом будет их просто закомментить.
| |
|
| |
| ==== Обновляем ветку ====
| |
| Пока мы работали с локальным репозиторием, в центральном репозитории могло уже что-то изменится. Обновим нашу ветку с апстрим мастером:
| |
| <pre>
| |
| git pull upstream master
| |
| </pre>
| |
| Если было что обновлять, то откроется тектовый редактор и предложит отредактировать название для merge-коммита. Можно оставить дефолтный, так что сохраняем/закрываем.<br />
| |
| Желательно это так же делать в дальнейшем перед самым ПР-ом, и аналогично придется делать в случае возникновения конфликтов в ПР-е (придется мержить).
| |
|
| |
| ==== Фиксируем изменения ====
| |
| Данный гайд не затрагивает DreamMaker, так что предположим вы уже закодили и протестировали свою фичу. Пора коммитить!<br />
| |
| Проверяем изменения через
| |
| <pre>
| |
| git status
| |
| </pre>
| |
| Мы увидим список всех измененных/добавленных файлов. Можно посмотреть изменения построчно с <code>git diff</code>, или воспользоваться какой-нибудь утилитой вроде <code>gitk</code> (скорее всего у вас он уже есть, так что достаточно просто ввести в консоли).
| |
|
| |
| Перед коммитом нужно отметить необходимые для коммита файлы через <code>git add</code> (добавить в "индекс"). Добавлять файлы по одному (для удобства можно пользоваться автодополнением по TAB-у, он здорово помогает):
| |
| <pre>
| |
| git add path/to/file/file.dm
| |
| </pre>
| |
|
| |
| Либо же отметить сразу все изменения:
| |
| <pre>
| |
| git add .
| |
| </pre>
| |
|
| |
| В случае, если вы зафиксировали не нужный вам файл, то для извлечения из индекса вам необходимо ввести следующею команду:
| |
| <pre>
| |
| git reset head path/to/file/file.dm
| |
| </pre>
| |
|
| |
| Через <code>git status</code> мы увидим список добавленных файлов, и если всё ок - делаем коммит:
| |
| <pre>
| |
| git commit -m "Ваше описание коммита"
| |
| </pre>
| |
| В названии желательно подробно и доступно описывать, что было измененно, и зачем. Если это был фикс бага из трекера - нужно прописать в названии "Fixes #номер" - гитхаб понимает такие коммиты, и в дальнейшем сам проставит ссылку с номера на баг в багтрекере, а после мержа сам закроет баг.
| |
|
| |
| Но стоит учитывать, что коммит получится сделать только в том случае, если не будет не зафиксированных изменений, которые могут появится по тем или иным причинам. Дабы их откинуть, необходимо прописать такую команду:
| |
| <pre>
| |
| git checkout -- path/to/file/file.dm
| |
| </pre>
| |
|
| |
| ==== Отправляем изменения ====
| |
| Пока мы только зафиксировали изменения локально, теперь нужно показать их миру и отправить в форк гитхаба. При условии, если мы этого еще не делали, и у нас не создана в репозитории нужная ветка:
| |
| <pre>
| |
| git push -u origin some-awesome-feature
| |
| </pre>
| |
| Создаст ветку <code>some-awesome-feature</code> в вашем репозитории на гитхабе, закинет туда наши коммиты. Флаг -u нужен, что бы зафиксировать связь между нашей локальной и удаленной ветками.
| |
| При следующих можно будет просто указать <code>git push</code>, либо для надежности при работе сразу с несколькими ветками/репозиториями - <code>git push origin some-awesome-feature</code>
| |
|
| |
| О создании ПРа стоит прочитать в [[Git/GitHub|этой]] статье
| |
|
| |
| ==== Немного о merge (слиянии изменения) ====
| |
| ...в процессе (кто нибудь, заполните пожалуйста)...
| |
|
| |
| == Полезные советы ==
| |
|
| |
| 1. Создавая ветку, можно в качестве параметра сразу указать удаленный репозиторий и ветку:
| |
| <pre>
| |
| git checkout -b some-awesome-feature upstream/master
| |
| </pre>
| |
| Сразу создаст ветку на основе <code>upstream/master</code>, без необходимости дополнительно обновлять.
| |
|
| |
|
| |
| 2. При обновлении и мерже изменений с апстримом, можно использовать флаг rebase - избавит от лишних коммитов в истории вида "юзернейм слил мастер в свою ветку"
| |
| <pre>
| |
| git pull --rebase upstream master
| |
| </pre>
| |
| Данная комманда возьмет ваши коммиты, и перебазирует их поверх обновления. Можно подобное, и не только, проворачивать самостоятельно с командой rebase, но с ней стоит работать очень осторожно.<br />
| |
| Потом, если вы попробуете отправить изменения в удаленный репозиторий, где уже были какие-то изменения, гит скорее всего будет ругаться - после rebase для него это 2 разные ветки, которые нужно мержить. Потому просто перезаписываем удаленную ветку, выполняя push с флагом --force
| |
| <pre>
| |
| git push --force
| |
| </pre>
| |
|
| |
| 3. Изменить или дополнить последний коммит можно с помощью флага --amend. Как обычно добавляете файлы в индекс, потом прописываете
| |
| <pre>
| |
| git commit --amend
| |
| </pre>
| |
| Все изменения попадут в последний коммит. Можно так же сразу поменять название:
| |
| <pre>
| |
| git commit --amend -m "Новое название коммита"
| |
| </pre>
| |
|
| |
| Полезно, если необходимо поправить незначительную ошибку/опечатку, и не хочется засорять историю коммитов. И вообще, держать чистую историю коммитов - хороший тон. Так же как и выше, это изменение истории, закоммитить изменения можно будет как и выше с
| |
| <pre>
| |
| git push --force
| |
| </pre>
| |
|
| |
| == Напоследок ==
| |
| Это довольно поверхностное описание без углубления в детали и другие возможности git. Ознакомится подробнее можно в многочисленных гайдах на просторах интернета, как пример:
| |
| https://git-scm.com/book/ru/v1
| |
|
| |
| Git - довольно простая система, необходимых для работы команд не так много, и все можно быстро запомнить. Если что-то пошло не так - всегда можно найти решение в интернете, или спросить у нашей команды разработчиков в [http://chat.tauceti.ru/channel/rnd чате], мы поможем.
| |