|
1 | 1 | == Базовые операции == |
2 | 2 |
|
3 | | -Прежде чем погружаться в дебри многочисленных Git команд, попробуйте воспользоваться этими простыми примерами, чтобы немного освоиться. Несмотря на свою простоту, каждая из них является полезной. |
| 3 | +Прежде чем погружаться в дебри многочисленных команд Git, попробуйте воспользоваться приведёнными ниже простыми примерами, чтобы немного освоиться. Несмотря на свою простоту, каждый из них является полезным. |
4 | 4 |
|
5 | | -Действительно, в первые месяцы использования Git я не выходил за рамки материала изложенного в этой главе. |
| 5 | +В самом деле, первые месяцы использования Git я не выходил за рамки материала, изложенного в этой главе. |
6 | 6 |
|
7 | 7 | === Сохранение состояния === |
8 | 8 |
|
9 | | -Выполняете опасную операцию? Перед тем, как сделать это, создайте снимок всех файлов в текущей директории с помощью команд: |
| 9 | +Выполняете опасную операцию? Прежде чем сделать это, создайте снимок всех файлов в текущей директории с помощью команд: |
10 | 10 |
|
11 | | - $ git init |
12 | | - $ git add . |
| 11 | + $ git init |
| 12 | + $ git add . |
13 | 13 | $ git commit -m "Мой первый бекап" |
14 | | - |
15 | | -Теперь, если ваши новые правки все испортили, запустите: |
| 14 | + |
| 15 | +Теперь, если ваши новые правки всё испортили, запустите: |
16 | 16 |
|
17 | 17 | $ git reset --hard |
18 | 18 |
|
19 | | -чтобы вернуться к исходному состоянию. Чтобы вновь сохраниться выполните: |
| 19 | +чтобы вернуться к исходному состоянию. Чтобы вновь сохраниться, выполните: |
20 | 20 |
|
21 | 21 | $ git commit -a -m "Другой бекап" |
22 | 22 |
|
23 | | -==== Добавление, Удаление, Переименование ==== |
| 23 | +==== Добавление, удаление, переименование ==== |
24 | 24 |
|
25 | | -Приведенный выше пример будет отслеживать файлы, которые вы добавили когда впервые запустили *git add*. Если вы хотите добавить новые файлы или поддиректории, вам придется сказать Git: |
| 25 | +Приведенный выше пример будет отслеживать файлы, которые вы добавили, когда впервые запустили *git add*. Если вы хотите добавить новые файлы или поддиректории, вам придётся сказать Git: |
26 | 26 |
|
27 | 27 | $ git add НОВЫЕ_ФАЙЛЫ... |
28 | 28 |
|
29 | | -Аналогично, если вы хотите чтобы Git забыл о некоторых файлах, может быть, потому, что вы удалите их: |
| 29 | +Аналогично, если вы хотите, чтобы Git забыл о некоторых файлах, например, потому что вы удалили их: |
30 | 30 |
|
31 | 31 | $ git rm СТАРЫЕ_ФАЙЛЫ... |
32 | 32 |
|
33 | | -Переименование файла это то же, что и удаление старого имени и добавления нового. Для этого есть *git mv*, который имеет тот же синтаксис, что и команда *mv*. Например: |
| 33 | +Переименование файла — это то же, что и удаление старого имени и добавления нового. Для этого есть *git mv*, который имеет тот же синтаксис, что и команда *mv*. Например: |
34 | 34 |
|
35 | 35 | $ git mv OLDFILE NEWFILE |
36 | 36 |
|
|
40 | 40 |
|
41 | 41 | $ git log |
42 | 42 |
|
43 | | -покажет вам список последних изменений (коммитов, прим. пер.), и их SHA1 хеши. Далее введите: |
| 43 | +покажет вам список последних изменений (коммитов, прим. пер.) и их SHA1 хеши. Далее введите: |
44 | 44 |
|
45 | 45 | $ git reset --hard SHA1_HASH |
46 | 46 |
|
|
52 | 52 |
|
53 | 53 | Это перенесет вас назад во времени, до тех пор пока вы не сделаете новые коммиты. Как и в фантастических фильмах о путешествиях во времени, если вы редактируете и коммитите код, вы будете находиться в альтернативной реальности, потому что ваши действия отличаются от тех, что вы делали до этого. |
54 | 54 |
|
55 | | -Эта альтернативная реальность называется 'бранч' и |
| 55 | +Эта альтернативная реальность называется «ветвь» (branch, прим. пер.), и |
56 | 56 | <<branch,мы поговорим об этом больше чуть позже>>. А сейчас просто запомните: |
57 | 57 |
|
58 | 58 | $ git checkout master |
59 | 59 |
|
60 | 60 | вернёт вас обратно в настоящее. Кроме того, чтобы не получать предупреждений от Git, всегда делайте коммит или сброс ваших изменений до запуска checkout. |
61 | 61 |
|
62 | | -Еще раз воспользуемся терминологией компьютерных игр: |
| 62 | +Ещё раз воспользуемся терминологией компьютерных игр: |
63 | 63 |
|
64 | 64 | - *`git reset --hard`*: загружает ранее сохраненную игру и удаляет все версии, сохраненные после только что загруженной. |
65 | 65 |
|
66 | | -- *`git checkout`*: загружает старую игру, но если вы продолжаете играть, состояние игры будет отличаться от более новых сохранок, которые вы сделали в первый раз. Любая игра, которую вы теперь сохраняете, попадает в отдельный бранч, прадставляющий альтенативную реальность, в которую вы вошли. |
67 | | -<<branch,как мы договорились, о бранчах поговорим позже>> |
| 66 | +- *`git checkout`*: загружает старую игру, но если вы продолжаете играть, состояние игры будет отличаться от более новых сохранений, которые вы сделали в первый раз. Любая игра, которую вы теперь сохраняете, попадает в отдельную ветвь, представляющую альтенативную реальность, в которую вы вошли. |
| 67 | +<<branch,Как мы договорились, о бранчах поговорим позже>>. |
68 | 68 |
|
69 | | -Вы можете выбрать для восстановления только определенные файлы и поддиректории путём добавления их после команды: |
| 69 | +Вы можете выбрать для восстановления только определенные файлы и поддиректории путём перечисления их имён после команды: |
70 | 70 |
|
71 | 71 | $ git checkout SHA1_HASH some.file another.file |
72 | 72 |
|
73 | | -Будьте внимательны, такая форма *checkout* (чекаута) может незаметно перезаписать файлы. Чтобы избежать неприятных неожиданностей, выполняйте коммит до запуска "чекаут", особенно если вы впервые пробуете Git. Вообще, если вы не уверены в какой-либо операции, будь то команда Git или нет, сперва выполните *git commit -a*. |
| 73 | +Будьте внимательны: такая форма *checkout* может незаметно перезаписать файлы. Чтобы избежать неприятных неожиданностей, выполняйте коммит до запуска checkout, особенно если вы только осваиваетесь с Git. Вообще, если вы не уверены в какой-либо операции, будь то команда Git или нет, сперва выполните *git commit -a*. |
74 | 74 |
|
75 | 75 | Не любите копировать и вставлять хеши? Используйте: |
76 | 76 |
|
77 | 77 | $ git checkout :/"Мой первый б" |
78 | 78 |
|
79 | 79 | для перехода на коммит, который начинается с приведенной строки. |
80 | 80 |
|
81 | | -Можно также запросить 5-е последнее сохраненное состояние: |
| 81 | +Можно также запросить 5-ое с конца сохраненное состояние: |
82 | 82 |
|
83 | 83 | $ git checkout master~5 |
84 | 84 |
|
|
89 | 89 | $ git commit -a |
90 | 90 | $ git revert SHA1_HASH |
91 | 91 |
|
92 | | -отменит текущий коммит с учетом выбранного хеша. Запущенный *git log* показывает, что изменение записано в качестве нового коммита. |
| 92 | +отменит коммит с выбранным хешем. Запущенный *git log* показывает, что изменение записано в качестве нового коммита. |
| 93 | + |
| 94 | +=== Создание списка изменений === |
| 95 | + |
| 96 | +Некоторым проектам требуется http://en.wikipedia.org/wiki/Changelog[список изменений] (changelog, прим. пер.). |
| 97 | +Создать такой список вы можете, просто направив вывод *git log* в файл: |
| 98 | + |
| 99 | + $ git log > ChangeLog |
93 | 100 |
|
94 | 101 | === Скачивание файлов === |
95 | 102 |
|
96 | | -Получить копию проекта под управлением Git можно набрав: |
| 103 | +Получить копию проекта под управлением Git можно, набрав: |
97 | 104 |
|
98 | 105 | $ git clone git://server/path/to/files |
99 | 106 |
|
|
103 | 110 |
|
104 | 111 | Мы поговорим больше о команде *clone* позже. |
105 | 112 |
|
106 | | -=== Сглаживание углов === |
| 113 | +=== На острие ножа === |
107 | 114 |
|
108 | | -Если вы уже загрузили копию проекта с помощью *git clone*, вы можете обновить его до последней версии используя: |
| 115 | +Если вы уже загрузили копию проекта с помощью *git clone*, вы можете обновить его до последней версии, используя: |
109 | 116 |
|
110 | 117 | $ git pull |
111 | 118 |
|
112 | 119 | === Публичный доступ === |
113 | 120 |
|
114 | | -Предположим, вы написали скрипт которым хотите поделиться с другими. Можно просто позволить всем загружать его с вашего компьютера, но, если они будут делать это в то время, как вы дорабатываете его или добавляете экспериментальную функциональность, у них могут возникнуть проблемы. Конечно, это одна из причин существования цикла разработки. Разработчики могут долго работать над проектом, но открывать доступ к коду следует только после того, как код приведен в приличный вид. |
| 121 | +Предположим, вы написали скрипт, которым хотите поделиться с другими. Можно просто позволить всем загружать его с вашего компьютера, но, если они будут делать это в то время, как вы дорабатываете его или добавляете экспериментальную функциональность, у них могут возникнуть проблемы. Конечно, это одна из причин существования цикла разработки. Разработчики могут долго работать над проектом, но открывать доступ к коду следует только после того, как код приведен в приличный вид. |
115 | 122 |
|
116 | 123 | Чтобы сделать это с помощью Git, выполните в директории, где лежит ваш скрипт: |
117 | 124 |
|
|
123 | 130 |
|
124 | 131 | $ git clone ваш.компьютер:/path/to/script |
125 | 132 |
|
126 | | -для того чтобы загрузить ваш скрипт. Это подразумевает что у вас есть доступ по ssh. Если нет, запустите *git daemon* и скажите пользователям использовать для запуска: |
| 133 | +для того чтобы загрузить ваш скрипт. Это подразумевает что у вас есть доступ по ssh. Если нет, запустите *git daemon* и скажите остальным использовать для запуска: |
127 | 134 |
|
128 | 135 | $ git clone git://ваш.компьютер/path/to/script |
129 | 136 |
|
|
135 | 142 |
|
136 | 143 | $ git pull |
137 | 144 |
|
138 | | -Ваши пользователи никогда не попадут на версии скрипта, доступ к которым вы скрываете. Безусловно, что этот трюк работает для всего, не только в случаях со скриптами. |
| 145 | +ваши пользователи никогда не попадут на версии скрипта, доступ к которым вы скрываете. Безусловно, этот трюк работает для всего, а не только в случаях со скриптами. |
139 | 146 |
|
140 | 147 | === Что я наделал? === |
141 | 148 |
|
142 | | -Выяснить, какие изменения вы сделали со времени последнего коммита: |
| 149 | +Выясните, какие изменения вы сделали со времени последнего коммита: |
143 | 150 |
|
144 | 151 | $ git diff |
145 | 152 |
|
146 | 153 | Или со вчерашнего дня: |
147 | 154 |
|
148 | 155 | $ git diff "@{yesterday}" |
149 | 156 |
|
150 | | -Или между определенной версией и 2-мя предыдущими версиями. |
| 157 | +Или между определенной версией и версией, сделанной 2 коммита назад: |
151 | 158 |
|
152 | 159 | $ git diff SHA1_HASH "master~2" |
153 | 160 |
|
|
158 | 165 | $ git whatchanged --since="2 weeks ago" |
159 | 166 |
|
160 | 167 | Часто я смотрю историю при помощи http://sourceforge.net/projects/qgit[qgit] вместо стандартного способа, |
161 | | -из-за приятного фотогеничного интерфейса, или с помощью http://jonas.nitro.dk/tig[tig] с текстовым интерфейсом, |
162 | | -который хорошо работает при медленном соединении. В качестве альтернативы, можно проинсталировать веб-сервер, |
| 168 | +из-за приятного интерфейса, или с помощью http://jonas.nitro.dk/tig[tig] с текстовым интерфейсом, |
| 169 | +который хорошо работает при медленном соединении. В качестве альтернативы, можно запустить веб-сервер, |
163 | 170 | введя *git instaweb*, и запустить любой веб-браузер. |
164 | 171 |
|
165 | 172 | === Упражнение === |
166 | 173 |
|
167 | | -Пусть A, B, C, D четыре успешных коммита, где В - то же, что и A, но с несколькими удаленными файлами. Мы хотим вернуть файлы в D, но не в B. Как это можно сделать? |
| 174 | +Пусть A, B, C, D четыре успешных коммита, где В — то же, что и A, но с несколькими удаленными файлами. Мы хотим вернуть файлы в D, но не в B. Как это можно сделать? |
168 | 175 |
|
169 | 176 | Существует как минимум три решения. Предположим, что мы находимся на D. |
170 | 177 |
|
171 | | - 1. Разница между A и B - удаление файлов. |
| 178 | + 1. Разница между A и B — удаление файлов. |
172 | 179 | Мы можем создать патч, отражающий эти изменения, и применить его: |
173 | | - |
| 180 | + |
174 | 181 | $ git diff B A | git apply |
175 | | - |
176 | | - 2. Поскольку мы сохранили файлы обратно в A, мы можем получить их обратно: |
177 | | - |
| 182 | + |
| 183 | + 2. Поскольку в коммите A мы сохранили файлы, мы можем получить их обратно: |
| 184 | + |
178 | 185 | $ git checkout A FILES... |
179 | | - |
| 186 | + |
180 | 187 | 3. Мы можем рассматривать переход от A до B в качестве изменений, которые мы хотим отменить: |
181 | | - |
| 188 | + |
182 | 189 | $ git revert B |
183 | 190 |
|
184 | 191 | Какой способ лучший? |
185 | | -Тот, который вам больше нравится. С Git легко сделать все, что вы хотите, причем часто существует много способов сделать одно и то же. |
| 192 | +Тот, который вам больше нравится. С Git легко сделать все, что вы хотите, причём часто существует много разных способов сделать одно и то-же. |
| 193 | + |
0 commit comments