1 <!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <link rel=
"stylesheet" media=
"screen" type=
"text/css" href=
"./style.css" />
6 <link rel=
"stylesheet" media=
"screen" type=
"text/css" href=
"./design.css" />
7 <link rel=
"stylesheet" media=
"print" type=
"text/css" href=
"./print.css" />
9 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
14 <em>Эта страница доступна также на следующих языках:
</em> <a href=
"geda-scm.html" class=
"wikilink1" title=
"geda-scm.html">English
</a>
17 <h1 id=
"gedagafиgit">gEDA/gaf и git
</h1>
21 В gEDA для управления исходными текстами программ используется
<strong>git
</strong>.
22 <strong>git
</strong> --- это распределённая система управления версиями, которая
23 позволяет каждому пользователю иметь свою собственную полную копию истории
27 <li class=
"level1"><div class=
"li"> Официальная веб-страница git
</div>
29 <li class=
"level1"><div class=
"li"> Интерактивная документация по git
</div>
31 <li class=
"level1"><div class=
"li"> <a href=
"https://www.google.com/search?q=Git_%28software%29&btnI=lucky" class=
"interwiki iw_go" title=
"https://www.google.com/search?q=Git_%28software%29&btnI=lucky">Страница википедии по git
</a></div>
37 <h2 id=
"установкаgitидругихвспомогательныхпрограмм">Установка git и других вспомогательных программ
</h2>
41 Конечно, в первую очередь для использования репозитория необходимы основные
42 инструменты
<strong>git
</strong>, и всегда полезна документация. Но часто для работы с
43 <strong>git
</strong> удобно пользоваться и другими средствами:
46 <li class=
"level1"><div class=
"li"> gitk, программа просмотра истории репозитория
</div>
48 <li class=
"level1"><div class=
"li"> Stacked Git, для работы с наборами заплат
</div>
53 Для дистрибутивов на основе Debian:
55 <pre class=
"code">apt-get install git-core git-doc gitk stgit
</pre>
58 Ещё может пригодиться следующее:
60 <pre class=
"code">apt-get install git-email git-completion
</pre>
65 <pre class=
"code">yum install git stgit
</pre>
69 <h2 id=
"изучениеgit">Изучение git
</h2>
73 Главная страница документации
<strong>git
</strong>:
76 <li class=
"level1"><div class=
"li"> Официальная документация git
</div>
81 Руководство пользователя
<strong>git
</strong>:
84 <li class=
"level1"><div class=
"li"> Руководство пользователя git
</div>
89 Текущее руководство можно найти по ссылке:
92 <li class=
"level1"><div class=
"li"> Введение в основы git
</div>
97 Другие замечательные руководства/веб-страницы:
100 <li class=
"level1"><div class=
"li"> Руководство по Git
</div>
102 <li class=
"level1"><div class=
"li"> Аварийные курсы по git
</div>
107 Имейте в виду, что некоторые из этих руководств немного устарели и могут не
108 совсем полно отражать текущий синтаксис
<strong>git
</strong>.
113 <h2 id=
"анонимныйдоступкрепозиторию">Анонимный доступ к репозиторию
</h2>
117 Клонирование (создание точной локальной копии) репозитория
<strong>geda-gaf.git
</strong>
118 (или любого другого репозитория, поддерживаемого на
119 git.geda-project.org) с использованием
120 анонимного доступа
<strong>git
</strong> производится так:
122 <pre class=
"code">git clone git://git.geda-project.org/geda-gaf.git
</pre>
127 <pre class=
"code">git clone git://git.geda-project.org/pcb.git
</pre>
130 Для клонирования других репозиториев, поддерживаемых на
131 <code>git.geda-project.org
</code>, достаточно поправить последнюю часть вышеуказанной
136 Для репозиториев различных проектов существует
137 cgit-интерфейс. Открыть его можно,
138 просто набрав в строке адреса браузера http://git.geda-project.org/.
143 <h2 id=
"доступкрепозиториюсправаминазапись">Доступ к репозиторию с правами на запись
</h2>
147 Для доступа в
<strong>git
</strong> с правами разработчика вам нужно связаться с
<em>DJ
148 Delorie
</em>, чтобы он установил ваш открытый ключ SSH на сервере, после этого
149 для отправки своих изменений можно использовать следующие адреса:
151 <pre class=
"code">ssh://git@git.geda-project.org/geda-gaf.git
</pre>
156 <pre class=
"code">ssh://git@git.geda-project.org/pcb.git
</pre>
159 Вам также будет нужно отредактировать у себя файл
<em><code>~/.ssh/config
</code></em>
160 (создать, если он ещё не существует) и вставить туда следующий текст:
162 <pre class=
"code">Host git.geda-project.org
166 Примечание: если у вас проблемы с отправкой изменений в основной репозиторий
167 проекта, убедитесь, что у вас используется
<strong>git
</strong> версии
1.5 или выше.
171 Если для доступа к
<strong>git
</strong> вы отдали администратору ключ, специально
172 созданный для gEDA, вам может быть также нужно добавить к своим настройкам
173 ещё одну строку, где указать этот дополнительный ключ:
175 <pre class=
"code">Host git.geda-project.org
177 IdentityFile ~/.ssh/gedaproject_dsa
</pre>
180 Учтите, что файл, на который вы ссылаетесь здесь, это ваш закрытый ключ
181 («private key»), а файл, который нужно послать на сервер, это
182 соответствующий ему открытый ключ («public key»).
187 <h2 id=
"созданиеивнесениеизменений">Создание и внесение изменений
</h2>
192 <h3 id=
"настройкаинформацииопользователе">Настройка информации о пользователе
</h3>
196 Сначала вам нужно обеспечить, чтобы в файле настроек
<strong>git
</strong> у вас были
197 заданы ваше имя и ваш адрес электронной почты.
199 <pre class=
"code">$ git config --global user.name
"Здесь должно быть ваше имя
"
200 $ git config --global user.email вы@ваш_домен.example.com
</pre>
204 <h3 id=
"внесениезаплатдругихучастниковпроекта">Внесение заплат других участников проекта
</h3>
208 При наложении чужой заплаты (например, из записи о заплате в
<code>launchpad
</code>),
209 следует иметь в виду некоторые моменты. Для вносимых изменений
<strong>git
</strong>
210 сохраняет по два имени и по два адреса электронной почты: «автора» заплаты
211 («author») и «вносящего» заплату («committer»), и при внесении изменений эти
212 данные должны быть правильными.
216 Прежде всего, убедитесь, что:
219 <li class=
"level1"><div class=
"li"> ваша версия заплаты --- последняя;
</div>
221 <li class=
"level1"><div class=
"li"> автор заплаты будет рад, что его заплату внесут в репозиторий (и всё ещё не работает над ней);
</div>
223 <li class=
"level1"><div class=
"li"> вы довольны заплатой и возьмёте на себя ответственность за вносимые изменения.
</div>
228 Для простоты начать можно с неизменённого дерева самой последней версии
229 (
<strong><code>git status
</code></strong> не должен показывать никаких изменений).
233 Заплата накладывается обычным способом (как этом в примере):
235 <pre class=
"code">$ patch -p1
< example_changes.patch
</pre>
238 Можно также использовать команду
<strong><code>git apply
</code></strong>:
240 <pre class=
"code">$ git apply example_changes.patch
</pre>
243 Если перед внесением в репозиторий заплату нужно чуть подкорректировать
244 (например, поправить пробелы), проинформируйте об этом автора. Может быть на
245 основе этой заплаты он делает что-то другое, и тогда он должен знать, какие
246 изменения появились в наложенной версии.
250 Примечание:
<em>очень легко допустить случайную ошибку, если ваш редактор
251 заменяет пробелы знаками табуляции. Не разрешайте ему этого!
</em>
255 Прежде чем вносить изменения,
<strong>git
</strong> нужно проинформировать о всех
256 изменённых, добавленных или, наоборот, удалённых файлах. Чтобы посмотреть,
257 какие файлы изменены, можно запустить:
259 <pre class=
"code">$ git status
</pre>
262 Для скорости, командой
264 <pre class=
"code">$ git add -u
</pre>
267 можно обновить все файлы, отслеживаемые
<strong>git
</strong>, включая удалённые.
271 Добавление новых файлов, вводимых в репозиторий с этой заплатой,
272 производится командой
274 <pre class=
"code">$ git add new_file.c
</pre>
277 Примечание: параметры
<strong><code>git add
</code></strong> могут также задаваться и с помощью
282 При внесении заплаты обязательно следует указать имя и адрес электронной
285 <pre class=
"code">$ git commit --author
"Здесь должно быть имя автора
<author@example.com
>"</pre>
288 Как вариант, если заранее настроить переменные окружения
<code>GIT_AUTHOR_NAME
</code>
289 и
<code>GIT_AUTHOR_EMAIL
</code>, команду
<strong><code>git commit
</code></strong> можно запускать как
295 <h3 id=
"написаниехорошихсообщенийовносимыхизменениях">Написание хороших сообщений о вносимых изменениях
</h3>
299 Формат сообщения о вносимых изменениях [
"commit message
"] следующий:
300 <strong>строго
</strong> однострочное изложение сути заплаты, за которым следует пустая
301 строка, а затем длинное описание. Если можно уместить полное описание
302 заплаты в одной строке, --- прекрасно, --- тогда и не стоит забивать голову
303 насчёт длинного описания.
307 Однострочные описания используются для создания темы электронного письма и
308 для отображения в журналах
<strong>gitk
</strong> и
<strong>gitweb
</strong>. Очень удобно, когда они
309 написаны хорошо, потому что это значит, что пользователь этих программ
310 сможет быстро находить интересные изменения.
314 <strong>Не добавляйте
</strong> в сообщения о вносимых изменениях перечни изменённых файлов. Эту информацию очень просто извлечь с помощью инструментария
<strong>git
</strong>.
320 <pre class=
"code">Added new GedaList class derived from GObject
322 This abstracts a GList with API for write access. Its main use is in list
323 change notification, as it emits a
"changed
" g_signal when modified. Read
324 only access to the underlying GList is provided by an accessor, currenly
325 implemented as a macro.
</pre>
329 <h3 id=
"операцияpush-разрушительна">Операция push - разрушительна
</h3>
333 <strong>Предупреждение: добавление изменений с помощью
<em>push
</em> в удалённый репозиторий разрушительно
</strong>
337 В отличие от CVS, командой
<strong><code>git-push
</code></strong> изменения не просто добавляются
338 в основной репозиторий, но «продвигается» локальная версия. Всегда нужно
339 дважды (или даже трижды) проверить, что «продвигаемые» вами изменения в
340 самом деле предназначены для основного репозитория.
345 <h2 id=
"какмне">Как мне ... ?
</h2>
349 Более подробную информацию можно найти в
355 <h3 id=
"получитькопиюрепозиторияgitпроектаgedagaf">... получить копию репозитория git проекта gEDA/gaf?
</h3>
359 При анонимном доступе только на чтение:
361 <pre class=
"code">$ git clone git://git.geda-project.org/geda-gaf
</pre>
364 Для разработчиков с доступом на чтение и запись:
366 <pre class=
"code">$ git clone ssh://git@git.geda-project.org/geda-gaf
</pre>
370 <h3 id=
"поддерживатьсоответствиесвоейлокальнойкопиитекущейверсии">... поддерживать соответствие своей локальной копии текущей версии?
</h3>
374 Те, кто не собирается отправлять свои изменения в центральный репозиторий
375 <strong>git
</strong>, могут запустить:
377 <pre class=
"code">$ git pull
</pre>
380 Однако тем из вас, кто собирается «продвигать» свои изменения в центральный
381 репозиторий
<strong>git
</strong>, использование
<strong><code>git pull
</code></strong> испортит историю
382 сообщениями об объединении веток («Merge branch
'master
'»). Чтобы избежать
383 этого, нужно запустить:
385 <pre class=
"code">$ git fetch
386 $ git rebase origin
</pre>
390 <h3 id=
"внестисвоиизменениявлокальныйрепозиторийgit">... внести свои изменения в локальный репозиторий git?
</h3>
392 <pre class=
"code">$ git commit -a
</pre>
395 Эта команда найдёт все изменённые файлы, о которых знает
<strong>git
</strong>
396 (добавленные с помощью
<strong><code>git-add
</code></strong>) и запросит у вас сообщение о
397 вносимых изменениях. Непременно следуйте указанному выше соглашению по
398 написанию таких сообщений, если планируете отправлять свои изменения в
399 центральный репозиторий.
403 Если вы хотите внести файлы из текущего каталога, или хотите внести только
404 явно определённые файлы, не указывайте флаг
<code>-a
</code> и (или) укажите имена
405 выбранных файлов в командной строке, например:
407 <pre class=
"code">$ git commit filename1 filename2
</pre>
411 <h3 id=
"отменитьвселокальныеизмененияещёневнесённыеврепозиторий">... отменить все локальные изменения, ещё не внесённые в репозиторий?
</h3>
413 <pre class=
"code">$ git checkout -f
</pre>
416 Учтите, что при этом все изменения в любых файлах, отслеживаемых в
417 <strong>git
</strong>-репозитории, будут отвергнуты.
421 Если нужно отменить изменения только в одном файле, достаточно запустить:
423 <pre class=
"code">$ git checkout путь/к/нужному/файлу
</pre>
426 Если нужно отменить все изменения в текущем каталоге и рекурсивно во всех
427 его подкаталогах, достаточно запустить:
429 <pre class=
"code">$ git checkout .
</pre>
433 <h3 id=
"исправитьотредактироватьизменениявнесённыепоследнийраз">... исправить/отредактировать изменения, внесённые последний раз?
</h3>
435 <pre class=
"code">$ ... изменение каких-то файлов ...
436 $ git commit --amend filename1..filenameN
</pre>
439 Этой командой все новые изменения объединяются с внесёнными в последний раз
440 и заново вносятся в репозиторий со старым сообщением.
445 <h3 id=
"отслеживатьветку">... отслеживать ветку?
</h3>
447 <pre class=
"code">$ git checkout --track -b
<локальная_ветка
> origin/
<удалённая_ветка
></pre>
450 Этой командой создаётся ветка
<em><локальная_ветка
></em>, в которой отслеживается
451 удалённая ветка
<em><удалённая_ветка
></em>.
456 <h3 id=
"создатьветкуначинаясопределённоготега">... создать ветку (начиная с определённого тега)?
</h3>
460 Нужно запустить следующие команды (для примера используется ветка
461 <em>stable-
1.4</em>):
463 <pre class=
"code"> $ git branch stable-
1.4 1.4.0-
20080127
464 $ git checkout stable-
1.4
465 <что-то редактируем
>
466 $ git commit -a
</pre>
469 Чтобы опубликовать эту ветку в центральном репозитории (требуется доступ в
472 <pre class=
"code"> $ git push origin stable-
1.4</pre>
476 <h3 id=
"получитьветкуразработкидругогоразработчика">... получить ветку разработки другого разработчика?
</h3>
480 Кроме репозитория http://git.geda-project.org/, у нас есть его зеркало
481 на http://repo.or.cz/w/geda-gaf.git. Некоторые разработчики имеют свои
482 ответвления («fork») данного репозитория с ветками («branch») разработки
487 Если вы хотите попробовать одну из веток с новыми возможностями, нужно
488 получить её из репозитория разработчика. Самый лёгкий способ получения ветки
489 --- использовать команду
<strong><code>git fetch
</code></strong>.
491 <pre class=
"code"> $ git fetch ссылка_на_репозиторий название_удалённой_ветки:название_локальной_ветки
</pre>
494 <strong>Примеры:
</strong>
495 Получение ветки
<em>cairo_experiment
</em> от
<em>Peter C.
</em> выглядело бы так:
497 <pre class=
"code"> $ git fetch git://repo.or.cz/geda-gaf/pcjc2.git cairo_experiment:peters_cairo_experiment
</pre>
500 Теперь вы можете переключиться на локальную копию ветки
501 <em>peters_cairo_experiment
</em> и поиграться с ней.
505 Более того, в локальный репозиторий можно добавить несколько удалённых ответвлений:
507 <pre class=
"code"> $ git remote add
<название
> <url
>
508 $ git fetch
<название
></pre>
511 При условии, что
<название
> уникально, у вас появится возможность следить за
512 их развитием, не создавая локальных веток. С помощью таких
513 программ, как
<strong>gitk
</strong>, можно следить за прогрессом в ветках разработки различных возможностей в разных ответвлениях:
515 <pre class=
"code"> $ gitk --all
</pre>
518 <strong>Примеры:
</strong>
520 <pre class=
"code"> $ git remote add peter-b https://github.com/peter-b/geda-gaf.git
522 $ git remote add gareth8118 https://github.com/gareth8118/geda-gaf.git
523 $ git fetch gareth8118
524 $ git remote add bert https://github.com/bert/geda-gaf.git
529 Теперь gitk будет забит до отказа, но с помощью
<strong><em>Файл
</em></strong> -
> <strong><em>Список
530 ссылок
</em></strong> [
<strong><em>File
</em></strong> -
> <strong><em>List references
</em></strong>] (
<kbd>F2
</kbd>) можно
531 открыть диалоговое окно для более лёгкой навигации.
535 Обновление любимых веток сократится тогда до:
537 <pre class=
"code"> $ git fetch --all
</pre>
541 <h3 id=
"сделатьзаплатучтобыотправитьеёразработчикам">... сделать заплату, чтобы отправить её разработчикам?
</h3>
545 Самый простой способ, в котором в заплату включаются все изменения с тех пор, как локальный репозиторий синхронизировался с репозиторием на geda-project.org:
547 <pre class=
"code">$ git diff
> имя_файла_заплаты
</pre>
550 Более сложный способ с бóльшим контролем над содержимым заплаты:
552 <pre class=
"code">$ git add -i # выбрать файлы для внесения изменений
553 $ git status # проверить, что будут внесены именно те изменения,
554 # которые вы намеревались внести
555 $ git commit # внести изменения
556 $ git format-patch -
1 # сделать файл заплаты, основанный на данных изменениях
</pre>
559 Последняя команда выведет имя файла, содержащего заплату. Чтобы больше узнать об этой команде, обязательно взгляните на документацию по
<strong>git-format-patch
</strong>. Полученный файл можно отправить по электронной почте разработчикам, имеющим доступ на запись, и они смогут наложить заплату с помощью
<strong><code>git apply
</code></strong>.
564 <h3 id=
"восстановитьнасамомделеиспорченныйлокальныйрепозиторий">... восстановить на самом деле испорченный локальный репозиторий?
</h3>
568 Прежде всего, не вздумайте никуда «продвигать» командой
<strong><code>git push
</code></strong>
569 никаких изменений из локального репозитория, если вы думаете, что в нём
570 что-то испорчено. Спросите сначала кого-нибудь более опытного в
<strong>git
</strong>.
574 Во-вторых, команда, которая в самом деле спасёт вашу шкуру --- это
575 <strong>git-reflog
</strong>. Она используется примерно так:
577 <pre class=
"code"> $ git reflog
578 086908e... HEAD@{
0}: cherry-pick: Last minute updates to the READMEs for all pro
579 2a79a23... HEAD@{
1}: checkout: moving to master
580 2a79a23... HEAD@{
2}: checkout: moving to master
582 $ git reset --hard HEAD@{
1}
</pre>
585 Последняя команда (
<strong><code>git reset --hard ...
</code></strong>) откатит все ваши
586 изменения к шагу «checkout: moving to master». Помните: не паникуйте! С
587 помощью
<strong>git
</strong> можно многое починить.