netlist: Apply title patch to Python netlist backend
[geda-gaf.git] / docs / wiki / geda-scm.ru.html
blob39e98a1f4f778c7e294bb5d4864282cd2a980585
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html>
4 <head>
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" />
10 </head>
11 <body>
13 <p>
14 <em>Эта страница доступна также на следующих языках:</em> <a href="geda-scm.html" class="wikilink1" title="geda-scm.html">English</a>
15 </p>
17 <h1 id="gedagafиgit">gEDA/gaf и git</h1>
18 <div class="level1">
20 <p>
21 В gEDA для управления исходными текстами программ используется <strong>git</strong>.
22 <strong>git</strong> --- это распределённая система управления версиями, которая
23 позволяет каждому пользователю иметь свою собственную полную копию истории
24 изменений проекта.
25 </p>
26 <ul>
27 <li class="level1"><div class="li"> Официальная веб-страница git</div>
28 </li>
29 <li class="level1"><div class="li"> Интерактивная документация по git</div>
30 </li>
31 <li class="level1"><div class="li"> <a href="https://www.google.com/search?q=Git_%28software%29&amp;btnI=lucky" class="interwiki iw_go" title="https://www.google.com/search?q=Git_%28software%29&amp;btnI=lucky">Страница википедии по git</a></div>
32 </li>
33 </ul>
35 </div>
37 <h2 id="установкаgitидругихвспомогательныхпрограмм">Установка git и других вспомогательных программ</h2>
38 <div class="level2">
40 <p>
41 Конечно, в первую очередь для использования репозитория необходимы основные
42 инструменты <strong>git</strong>, и всегда полезна документация. Но часто для работы с
43 <strong>git</strong> удобно пользоваться и другими средствами:
44 </p>
45 <ul>
46 <li class="level1"><div class="li"> gitk, программа просмотра истории репозитория</div>
47 </li>
48 <li class="level1"><div class="li"> Stacked Git, для работы с наборами заплат</div>
49 </li>
50 </ul>
52 <p>
53 Для дистрибутивов на основе Debian:
54 </p>
55 <pre class="code">apt-get install git-core git-doc gitk stgit</pre>
57 <p>
58 Ещё может пригодиться следующее:
59 </p>
60 <pre class="code">apt-get install git-email git-completion</pre>
62 <p>
63 Fedora Linux:
64 </p>
65 <pre class="code">yum install git stgit</pre>
67 </div>
69 <h2 id="изучениеgit">Изучение git</h2>
70 <div class="level2">
72 <p>
73 Главная страница документации <strong>git</strong>:
74 </p>
75 <ul>
76 <li class="level1"><div class="li"> Официальная документация git</div>
77 </li>
78 </ul>
80 <p>
81 Руководство пользователя <strong>git</strong>:
82 </p>
83 <ul>
84 <li class="level1"><div class="li"> Руководство пользователя git</div>
85 </li>
86 </ul>
88 <p>
89 Текущее руководство можно найти по ссылке:
90 </p>
91 <ul>
92 <li class="level1"><div class="li"> Введение в основы git</div>
93 </li>
94 </ul>
96 <p>
97 Другие замечательные руководства/веб-страницы:
98 </p>
99 <ul>
100 <li class="level1"><div class="li"> Руководство по Git</div>
101 </li>
102 <li class="level1"><div class="li"> Аварийные курсы по git</div>
103 </li>
104 </ul>
107 Имейте в виду, что некоторые из этих руководств немного устарели и могут не
108 совсем полно отражать текущий синтаксис <strong>git</strong>.
109 </p>
111 </div>
113 <h2 id="анонимныйдоступкрепозиторию">Анонимный доступ к репозиторию</h2>
114 <div class="level2">
117 Клонирование (создание точной локальной копии) репозитория <strong>geda-gaf.git</strong>
118 (или любого другого репозитория, поддерживаемого на
119 git.geda-project.org) с использованием
120 анонимного доступа <strong>git</strong> производится так:
121 </p>
122 <pre class="code">git clone git://git.geda-project.org/geda-gaf.git</pre>
125 или
126 </p>
127 <pre class="code">git clone git://git.geda-project.org/pcb.git</pre>
130 Для клонирования других репозиториев, поддерживаемых на
131 <code>git.geda-project.org</code>, достаточно поправить последнюю часть вышеуказанной
132 ссылки.
133 </p>
136 Для репозиториев различных проектов существует
137 cgit-интерфейс. Открыть его можно,
138 просто набрав в строке адреса браузера http://git.geda-project.org/.
139 </p>
141 </div>
143 <h2 id="доступкрепозиториюсправаминазапись">Доступ к репозиторию с правами на запись</h2>
144 <div class="level2">
147 Для доступа в <strong>git</strong> с правами разработчика вам нужно связаться с <em>DJ
148 Delorie</em>, чтобы он установил ваш открытый ключ SSH на сервере, после этого
149 для отправки своих изменений можно использовать следующие адреса:
150 </p>
151 <pre class="code">ssh://git@git.geda-project.org/geda-gaf.git</pre>
154 или
155 </p>
156 <pre class="code">ssh://git@git.geda-project.org/pcb.git</pre>
159 Вам также будет нужно отредактировать у себя файл <em><code>~/.ssh/config</code></em>
160 (создать, если он ещё не существует) и вставить туда следующий текст:
161 </p>
162 <pre class="code">Host git.geda-project.org
163 Port 65</pre>
166 Примечание: если у вас проблемы с отправкой изменений в основной репозиторий
167 проекта, убедитесь, что у вас используется <strong>git</strong> версии 1.5 или выше.
168 </p>
171 Если для доступа к <strong>git</strong> вы отдали администратору ключ, специально
172 созданный для gEDA, вам может быть также нужно добавить к своим настройкам
173 ещё одну строку, где указать этот дополнительный ключ:
174 </p>
175 <pre class="code">Host git.geda-project.org
176 Port 65
177 IdentityFile ~/.ssh/gedaproject_dsa</pre>
180 Учтите, что файл, на который вы ссылаетесь здесь, это ваш закрытый ключ
181 («private key»), а файл, который нужно послать на сервер, это
182 соответствующий ему открытый ключ («public key»).
183 </p>
185 </div>
187 <h2 id="созданиеивнесениеизменений">Создание и внесение изменений</h2>
188 <div class="level2">
190 </div>
192 <h3 id="настройкаинформацииопользователе">Настройка информации о пользователе</h3>
193 <div class="level3">
196 Сначала вам нужно обеспечить, чтобы в файле настроек <strong>git</strong> у вас были
197 заданы ваше имя и ваш адрес электронной почты.
198 </p>
199 <pre class="code">$ git config --global user.name &quot;Здесь должно быть ваше имя&quot;
200 $ git config --global user.email вы@ваш_домен.example.com</pre>
202 </div>
204 <h3 id="внесениезаплатдругихучастниковпроекта">Внесение заплат других участников проекта</h3>
205 <div class="level3">
208 При наложении чужой заплаты (например, из записи о заплате в <code>launchpad</code>),
209 следует иметь в виду некоторые моменты. Для вносимых изменений <strong>git</strong>
210 сохраняет по два имени и по два адреса электронной почты: «автора» заплаты
211 («author») и «вносящего» заплату («committer»), и при внесении изменений эти
212 данные должны быть правильными.
213 </p>
216 Прежде всего, убедитесь, что:
217 </p>
218 <ul>
219 <li class="level1"><div class="li"> ваша версия заплаты --- последняя;</div>
220 </li>
221 <li class="level1"><div class="li"> автор заплаты будет рад, что его заплату внесут в репозиторий (и всё ещё не работает над ней);</div>
222 </li>
223 <li class="level1"><div class="li"> вы довольны заплатой и возьмёте на себя ответственность за вносимые изменения.</div>
224 </li>
225 </ul>
228 Для простоты начать можно с неизменённого дерева самой последней версии
229 (<strong><code>git status</code></strong> не должен показывать никаких изменений).
230 </p>
233 Заплата накладывается обычным способом (как этом в примере):
234 </p>
235 <pre class="code">$ patch -p1 &lt; example_changes.patch</pre>
238 Можно также использовать команду <strong><code>git apply</code></strong>:
239 </p>
240 <pre class="code">$ git apply example_changes.patch</pre>
243 Если перед внесением в репозиторий заплату нужно чуть подкорректировать
244 (например, поправить пробелы), проинформируйте об этом автора. Может быть на
245 основе этой заплаты он делает что-то другое, и тогда он должен знать, какие
246 изменения появились в наложенной версии.
247 </p>
250 Примечание: <em>очень легко допустить случайную ошибку, если ваш редактор
251 заменяет пробелы знаками табуляции. Не разрешайте ему этого!</em>
252 </p>
255 Прежде чем вносить изменения, <strong>git</strong> нужно проинформировать о всех
256 изменённых, добавленных или, наоборот, удалённых файлах. Чтобы посмотреть,
257 какие файлы изменены, можно запустить:
258 </p>
259 <pre class="code">$ git status</pre>
262 Для скорости, командой
263 </p>
264 <pre class="code">$ git add -u</pre>
267 можно обновить все файлы, отслеживаемые <strong>git</strong>, включая удалённые.
268 </p>
271 Добавление новых файлов, вводимых в репозиторий с этой заплатой,
272 производится командой
273 </p>
274 <pre class="code">$ git add new_file.c</pre>
277 Примечание: параметры <strong><code>git add</code></strong> могут также задаваться и с помощью
278 метасимволов.
279 </p>
282 При внесении заплаты обязательно следует указать имя и адрес электронной
283 почты автора:
284 </p>
285 <pre class="code">$ git commit --author &quot;Здесь должно быть имя автора &lt;author@example.com&gt;&quot;</pre>
288 Как вариант, если заранее настроить переменные окружения <code>GIT_AUTHOR_NAME</code>
289 и <code>GIT_AUTHOR_EMAIL</code>, команду <strong><code>git commit</code></strong> можно запускать как
290 обычно.
291 </p>
293 </div>
295 <h3 id="написаниехорошихсообщенийовносимыхизменениях">Написание хороших сообщений о вносимых изменениях</h3>
296 <div class="level3">
299 Формат сообщения о вносимых изменениях [&quot;commit message&quot;] следующий:
300 <strong>строго</strong> однострочное изложение сути заплаты, за которым следует пустая
301 строка, а затем длинное описание. Если можно уместить полное описание
302 заплаты в одной строке, --- прекрасно, --- тогда и не стоит забивать голову
303 насчёт длинного описания.
304 </p>
307 Однострочные описания используются для создания темы электронного письма и
308 для отображения в журналах <strong>gitk</strong> и <strong>gitweb</strong>. Очень удобно, когда они
309 написаны хорошо, потому что это значит, что пользователь этих программ
310 сможет быстро находить интересные изменения.
311 </p>
314 <strong>Не добавляйте</strong> в сообщения о вносимых изменениях перечни изменённых файлов. Эту информацию очень просто извлечь с помощью инструментария <strong>git</strong>.
315 </p>
318 Пример:
319 </p>
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 &quot;changed&quot; g_signal when modified. Read
324 only access to the underlying GList is provided by an accessor, currenly
325 implemented as a macro. </pre>
327 </div>
329 <h3 id="операцияpush-разрушительна">Операция push - разрушительна</h3>
330 <div class="level3">
333 <strong>Предупреждение: добавление изменений с помощью <em>push</em> в удалённый репозиторий разрушительно</strong>
334 </p>
337 В отличие от CVS, командой <strong><code>git-push</code></strong> изменения не просто добавляются
338 в основной репозиторий, но «продвигается» локальная версия. Всегда нужно
339 дважды (или даже трижды) проверить, что «продвигаемые» вами изменения в
340 самом деле предназначены для основного репозитория.
341 </p>
343 </div>
345 <h2 id="какмне">Как мне ... ?</h2>
346 <div class="level2">
349 Более подробную информацию можно найти в
350 Руководстве по Git.
351 </p>
353 </div>
355 <h3 id="получитькопиюрепозиторияgitпроектаgedagaf">... получить копию репозитория git проекта gEDA/gaf?</h3>
356 <div class="level3">
359 При анонимном доступе только на чтение:
360 </p>
361 <pre class="code">$ git clone git://git.geda-project.org/geda-gaf</pre>
364 Для разработчиков с доступом на чтение и запись:
365 </p>
366 <pre class="code">$ git clone ssh://git@git.geda-project.org/geda-gaf</pre>
368 </div>
370 <h3 id="поддерживатьсоответствиесвоейлокальнойкопиитекущейверсии">... поддерживать соответствие своей локальной копии текущей версии?</h3>
371 <div class="level3">
374 Те, кто не собирается отправлять свои изменения в центральный репозиторий
375 <strong>git</strong>, могут запустить:
376 </p>
377 <pre class="code">$ git pull</pre>
380 Однако тем из вас, кто собирается «продвигать» свои изменения в центральный
381 репозиторий <strong>git</strong>, использование <strong><code>git pull</code></strong> испортит историю
382 сообщениями об объединении веток («Merge branch &#039;master&#039;»). Чтобы избежать
383 этого, нужно запустить:
384 </p>
385 <pre class="code">$ git fetch
386 $ git rebase origin</pre>
388 </div>
390 <h3 id="внестисвоиизменениявлокальныйрепозиторийgit">... внести свои изменения в локальный репозиторий git?</h3>
391 <div class="level3">
392 <pre class="code">$ git commit -a</pre>
395 Эта команда найдёт все изменённые файлы, о которых знает <strong>git</strong>
396 (добавленные с помощью <strong><code>git-add</code></strong>) и запросит у вас сообщение о
397 вносимых изменениях. Непременно следуйте указанному выше соглашению по
398 написанию таких сообщений, если планируете отправлять свои изменения в
399 центральный репозиторий.
400 </p>
403 Если вы хотите внести файлы из текущего каталога, или хотите внести только
404 явно определённые файлы, не указывайте флаг <code>-a</code> и (или) укажите имена
405 выбранных файлов в командной строке, например:
406 </p>
407 <pre class="code">$ git commit filename1 filename2</pre>
409 </div>
411 <h3 id="отменитьвселокальныеизмененияещёневнесённыеврепозиторий">... отменить все локальные изменения, ещё не внесённые в репозиторий?</h3>
412 <div class="level3">
413 <pre class="code">$ git checkout -f</pre>
416 Учтите, что при этом все изменения в любых файлах, отслеживаемых в
417 <strong>git</strong>-репозитории, будут отвергнуты.
418 </p>
421 Если нужно отменить изменения только в одном файле, достаточно запустить:
422 </p>
423 <pre class="code">$ git checkout путь/к/нужному/файлу</pre>
426 Если нужно отменить все изменения в текущем каталоге и рекурсивно во всех
427 его подкаталогах, достаточно запустить:
428 </p>
429 <pre class="code">$ git checkout .</pre>
431 </div>
433 <h3 id="исправитьотредактироватьизменениявнесённыепоследнийраз">... исправить/отредактировать изменения, внесённые последний раз?</h3>
434 <div class="level3">
435 <pre class="code">$ ... изменение каких-то файлов ...
436 $ git commit --amend filename1..filenameN</pre>
439 Этой командой все новые изменения объединяются с внесёнными в последний раз
440 и заново вносятся в репозиторий со старым сообщением.
441 </p>
443 </div>
445 <h3 id="отслеживатьветку">... отслеживать ветку?</h3>
446 <div class="level3">
447 <pre class="code">$ git checkout --track -b &lt;локальная_ветка&gt; origin/&lt;удалённая_ветка&gt;</pre>
450 Этой командой создаётся ветка <em>&lt;локальная_ветка&gt;</em>, в которой отслеживается
451 удалённая ветка <em>&lt;удалённая_ветка&gt;</em>.
452 </p>
454 </div>
456 <h3 id="создатьветкуначинаясопределённоготега">... создать ветку (начиная с определённого тега)?</h3>
457 <div class="level3">
460 Нужно запустить следующие команды (для примера используется ветка
461 <em>stable-1.4</em>):
462 </p>
463 <pre class="code"> $ git branch stable-1.4 1.4.0-20080127
464 $ git checkout stable-1.4
465 &lt;что-то редактируем&gt;
466 $ git commit -a</pre>
469 Чтобы опубликовать эту ветку в центральном репозитории (требуется доступ в
470 него на запись):
471 </p>
472 <pre class="code"> $ git push origin stable-1.4</pre>
474 </div>
476 <h3 id="получитьветкуразработкидругогоразработчика">... получить ветку разработки другого разработчика?</h3>
477 <div class="level3">
480 Кроме репозитория http://git.geda-project.org/, у нас есть его зеркало
481 на http://repo.or.cz/w/geda-gaf.git. Некоторые разработчики имеют свои
482 ответвления («fork») данного репозитория с ветками («branch») разработки
483 новых возможностей.
484 </p>
487 Если вы хотите попробовать одну из веток с новыми возможностями, нужно
488 получить её из репозитория разработчика. Самый лёгкий способ получения ветки
489 --- использовать команду <strong><code>git fetch</code></strong>.
490 </p>
491 <pre class="code"> $ git fetch ссылка_на_репозиторий название_удалённой_ветки:название_локальной_ветки</pre>
494 <strong>Примеры:</strong>
495 Получение ветки <em>cairo_experiment</em> от <em>Peter C.</em> выглядело бы так:
496 </p>
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> и поиграться с ней.
502 </p>
505 Более того, в локальный репозиторий можно добавить несколько удалённых ответвлений:
506 </p>
507 <pre class="code"> $ git remote add &lt;название&gt; &lt;url&gt;
508 $ git fetch &lt;название&gt;</pre>
511 При условии, что &lt;название&gt; уникально, у вас появится возможность следить за
512 их развитием, не создавая локальных веток. С помощью таких
513 программ, как <strong>gitk</strong>, можно следить за прогрессом в ветках разработки различных возможностей в разных ответвлениях:
514 </p>
515 <pre class="code"> $ gitk --all</pre>
518 <strong>Примеры:</strong>
519 </p>
520 <pre class="code"> $ git remote add peter-b https://github.com/peter-b/geda-gaf.git
521 $ git fetch peter-b
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
525 $ git fetch bert
526 $ gitk --all</pre>
529 Теперь gitk будет забит до отказа, но с помощью <strong><em>Файл</em></strong> -&gt; <strong><em>Список
530 ссылок</em></strong> [<strong><em>File</em></strong> -&gt; <strong><em>List references</em></strong>] (<kbd>F2</kbd>) можно
531 открыть диалоговое окно для более лёгкой навигации.
532 </p>
535 Обновление любимых веток сократится тогда до:
536 </p>
537 <pre class="code"> $ git fetch --all</pre>
539 </div>
541 <h3 id="сделатьзаплатучтобыотправитьеёразработчикам">... сделать заплату, чтобы отправить её разработчикам?</h3>
542 <div class="level3">
545 Самый простой способ, в котором в заплату включаются все изменения с тех пор, как локальный репозиторий синхронизировался с репозиторием на geda-project.org:
546 </p>
547 <pre class="code">$ git diff &gt; имя_файла_заплаты</pre>
550 Более сложный способ с бóльшим контролем над содержимым заплаты:
551 </p>
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>.
560 </p>
562 </div>
564 <h3 id="восстановитьнасамомделеиспорченныйлокальныйрепозиторий">... восстановить на самом деле испорченный локальный репозиторий?</h3>
565 <div class="level3">
568 Прежде всего, не вздумайте никуда «продвигать» командой <strong><code>git push</code></strong>
569 никаких изменений из локального репозитория, если вы думаете, что в нём
570 что-то испорчено. Спросите сначала кого-нибудь более опытного в <strong>git</strong>.
571 </p>
574 Во-вторых, команда, которая в самом деле спасёт вашу шкуру --- это
575 <strong>git-reflog</strong>. Она используется примерно так:
576 </p>
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> можно многое починить.
588 </p>
590 </div>
591 </body>
592 </html>