Merge branch 'multiplayer-es' of https://github.com/irtusb/gitmagic
[gitmagic/gitmagic.git] / ru / basic.txt
blob93f40dc77197972b4e539abe65264b52ad89a6e3
1 == Базовые операции ==
3 Прежде чем погружаться в дебри многочисленных команд Git, попробуйте воспользоваться приведёнными ниже простыми примерами, чтобы немного освоиться. Несмотря на свою простоту, каждый из них является полезным.
5 В самом деле, первые месяцы использования Git я не выходил за рамки материала, изложенного в этой главе.
7 === Сохранение состояния ===
9 Выполняете опасную операцию? Прежде чем сделать это, создайте снимок всех файлов в текущей директории с помощью команд:
11  $ git init
12  $ git add .
13  $ git commit -m "Мой первый бекап"
15 Теперь, если ваши новые правки всё испортили, запустите:
17  $ git reset --hard
19 чтобы вернуться к исходному состоянию. Чтобы вновь сохраниться, выполните:
21  $ git commit -a -m "Другой бекап"
23 ==== Добавление, удаление, переименование ====
25 Приведенный выше пример будет отслеживать файлы, которые вы добавили, когда впервые запустили *git add*. Если вы хотите добавить новые файлы или поддиректории, вам придётся сказать Git:
27  $ git add НОВЫЕ_ФАЙЛЫ...
29 Аналогично, если вы хотите, чтобы Git забыл о некоторых файлах, например, потому что вы удалили их:
31  $ git rm СТАРЫЕ_ФАЙЛЫ...
33 Переименование файла — это то же, что и удаление старого имени и добавления нового. Для этого есть *git mv*, который имеет тот же синтаксис, что и команда *mv*. Например:
35  $ git mv OLDFILE NEWFILE
37 === Расширенная отмена/Восстановление ===
39 Иногда вы просто хотите вернуться к определенной точке и забыть все изменения, потому что все они были неправильными. В таком случае:
41  $ git log
43 покажет вам список последних изменений (коммитов, прим. пер.) и их SHA1 хеши. Далее введите:
45  $ git reset --hard SHA1_HASH
47 для восстановления состояния до указанного коммита и удаления всех последующих коммитов безвозвратно.
49 Возможно, в другой раз вы захотите быстро вернуться к старому состоянию. В этом случае наберите:
51  $ git checkout SHA1_HASH
53 Это перенесет вас назад во времени, до тех пор пока вы не сделаете новые коммиты. Как и в фантастических фильмах о путешествиях во времени, если вы редактируете и коммитите код, вы будете находиться в альтернативной реальности, потому что ваши действия отличаются от тех, что вы делали до этого.
55 Эта альтернативная реальность называется «ветвь» (branch, прим. пер.), и
56 <<branch,чуть позже мы поговорим об этом>>. А сейчас просто запомните:
58  $ git checkout master
60 вернёт вас обратно в настоящее. Кроме того, чтобы не получать предупреждений от Git, всегда делайте коммит или сброс ваших изменений до запуска checkout.
62 Ещё раз воспользуемся терминологией компьютерных игр:
64 - *`git reset --hard`*: загружает ранее сохраненную игру и удаляет все версии, сохраненные после только что загруженной.
66 - *`git checkout`*: загружает старую игру, но если вы продолжаете играть, состояние игры будет отличаться от более новых сохранений, которые вы сделали в первый раз. Любая игра, которую вы теперь сохраняете, попадает в отдельную ветвь, представляющую альтенативную реальность, в которую вы вошли.
67 <<branch,Как мы договорились, о бранчах поговорим позже>>.
69 Вы можете выбрать для восстановления только определенные файлы и поддиректории путём перечисления их имён после команды:
71  $ git checkout SHA1_HASH some.file another.file
73 Будьте внимательны: такая форма *checkout* может незаметно перезаписать файлы. Чтобы избежать неприятных неожиданностей, выполняйте коммит до запуска checkout, особенно если вы только осваиваетесь с Git. Вообще, если вы не уверены в какой-либо операции, будь то команда Git или нет, сперва выполните *git commit -a*.
75 Не любите копировать и вставлять хеши? Используйте:
77  $ git checkout :/"Мой первый б"
79 для перехода на коммит, который начинается с приведенной строки.
81 Можно также запросить 5-ое с конца сохраненное состояние:
83  $ git checkout master~5
85 ==== Возвраты ====
87 В зале суда в протокол могут вноситься изменения прямо во время слушания. Подобным образом и вы можете выбирать коммиты для возврата.
89  $ git commit -a
90  $ git revert SHA1_HASH
92 отменит коммит с выбранным хешем. Запущенный *git log* показывает, что изменение записано в качестве нового коммита.
94 === Создание списка изменений ===
96 Некоторым проектам требуется http://en.wikipedia.org/wiki/Changelog[список изменений] (changelog, прим. пер.).
97 Создать такой список вы можете, просто направив вывод *git log* в файл:
99  $ git log > ChangeLog
101 === Скачивание файлов ===
103 Получить копию проекта под управлением Git можно, набрав:
105  $ git clone git://server/path/to/files
107 Например, чтобы получить все файлы, я создавал такой сайт:
109  $ git clone git://git.or.cz/gitmagic.git
111 Мы поговорим больше о команде *clone* позже.
113 === На острие ножа ===
115 Если вы уже загрузили копию проекта с помощью *git clone*, вы можете обновить его до последней версии, используя:
117  $ git pull
119 === Публичный доступ ===
121 Предположим, вы написали скрипт, которым хотите поделиться с другими. Можно просто позволить всем загружать его с вашего компьютера, но, если они будут делать это в то время, как вы дорабатываете его или добавляете экспериментальную функциональность, у них могут возникнуть проблемы. Конечно, это одна из причин существования цикла разработки. Разработчики могут долго работать над проектом, но открывать доступ к коду следует только после того, как код приведен в приличный вид.
123 Чтобы сделать это с помощью Git, выполните в директории, где лежит ваш скрипт:
125  $ git init
126  $ git add .
127  $ git commit -m "Первый релиз"
129 Затем скажите вашим пользователям запустить:
131  $ git clone ваш.компьютер:/path/to/script
133 для того чтобы загрузить ваш скрипт. Это подразумевает что у вас есть доступ по ssh. Если нет, запустите *git daemon* и скажите остальным использовать для запуска:
135  $ git clone git://ваш.компьютер/path/to/script
137 Теперь, всякий раз когда ваш скрипт готов к релизу, выполняйте:
139  $ git commit -a -m "Следующий релиз"
141 и ваши пользователи смогут обновить свои версии, перейдя в директорию, содержащую ваш скрипт, и, набрав:
143  $ git pull
145 ваши пользователи никогда не попадут на версии скрипта, доступ к которым вы скрываете. Безусловно, этот трюк работает для всего, а не только в случаях со скриптами.
147 === Что я наделал? ===
149 Выясните, какие изменения вы сделали со времени последнего коммита:
151  $ git diff
153 Или со вчерашнего дня:
155  $ git diff "@{yesterday}"
157 Или между определенной версией и версией, сделанной 2 коммита назад:
159  $ git diff SHA1_HASH "master~2"
161 В каждом случае на выходе будет патч, который может быть применён с помощью *git apply*.
163 Попробуйте также:
165  $ git whatchanged --since="2 weeks ago"
167 Часто я смотрю историю при помощи http://sourceforge.net/projects/qgit[qgit] вместо стандартного способа,
168 из-за приятного интерфейса, или с помощью http://jonas.nitro.dk/tig[tig] с текстовым интерфейсом,
169 который хорошо работает при медленном соединении. В качестве альтернативы, можно запустить веб-сервер,
170 введя *git instaweb*, и запустить любой веб-браузер.
172 === Упражнение ===
174 Пусть A, B, C, D четыре успешных коммита, где В — то же, что и A, но с несколькими удаленными файлами. Мы хотим вернуть файлы в D, но не в B. Как это можно сделать?
176 Существует как минимум три решения. Предположим, что мы находимся на D.
178   1. Разница между A и B — удаление файлов.
179   Мы можем создать патч, отражающий эти изменения, и применить его:
181    $ git diff B A | git apply
183   2. Поскольку в коммите A мы сохранили файлы, мы можем получить их обратно:
185    $ git checkout A FILES...
187   3. Мы можем рассматривать переход от A до B в качестве изменений, которые мы хотим отменить:
189    $ git revert B
191 Какой способ лучший?
192 Тот, который вам больше нравится. С Git легко сделать все, что вы хотите, причём часто существует много разных способов сделать одно и то-же.