User Tools

Site Tools


geda:scm.ru

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
geda:scm.ru [2012/02/27 16:52]
vzh Updated
geda:scm.ru [2014/04/23 01:42]
vzh Fix quotes
Line 1: Line 1:
-====== gEDA/gaf и git ======+//Эта страница доступна также на следующих языках://​ [[scm|English]]
  
 +====== gEDA/gaf и git ======
  
 В gEDA для управления исходными текстами программ используется **git**. В gEDA для управления исходными текстами программ используется **git**.
-**git** --- это распределённая система ​контроля версий, которая позволяет +**git** --- это распределённая система ​управления версиями, которая 
-каждому пользователю иметь свою собственную полную копию истории изменений.+позволяет каждому пользователю иметь свою собственную полную копию истории 
 +изменений ​проекта. 
   * [[http://​git.or.cz/​|Официальная веб-страница git]]   * [[http://​git.or.cz/​|Официальная веб-страница git]]
   * [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​|Интерактивная документация по git]]   * [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​|Интерактивная документация по git]]
   * [[wp>​Git_(software)|Страница википедии по git]]   * [[wp>​Git_(software)|Страница википедии по git]]
  
 +===== Установка git и других вспомогательных программ =====
  
-===== Установка git и относящихся к нему инструментов ===== +Конечнов первую очередь для использования репозитория необходимы основные 
-Конечно, ​для использования репозитория необходимы основные инструменты +инструменты **git**, и всегда полезна документация. Но часто для работы с 
-**git**, и всегда полезна документация. Но часто для работы с **git** удобно +**git** удобно пользоваться и другими средствами:​ 
-пользоваться и другими средствами:​ + 
-  * [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​gitk.html|gitk]], ​браузер истории репозитория+  * [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​gitk.html|gitk]], ​программа просмотра ​истории репозитория
   * [[http://​www.procode.org/​stgit/​|Stacked Git]], для работы с наборами заплат   * [[http://​www.procode.org/​stgit/​|Stacked Git]], для работы с наборами заплат
  
-Для дистрибутивов, созданных ​на основе Debian:+ 
 +Для дистрибутивов на основе Debian: 
   apt-get install git-core git-doc gitk stgit   apt-get install git-core git-doc gitk stgit
  
-Может ​быть также вам будет нужно сделать:+Ещё может ​пригодиться следующее: 
   apt-get install git-email git-completion   apt-get install git-email git-completion
 +
  
 Fedora Linux: Fedora Linux:
 +
   yum install git stgit   yum install git stgit
 +
 +
  
  
 ===== Изучение git ===== ===== Изучение git =====
 +
 Главная страница документации **git**: Главная страница документации **git**:
-  * [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​|Официальная документация git]] 
  
 +  * [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​|Официальная документация git]]
 Руководство пользователя **git**: Руководство пользователя **git**:
-  * [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​user-manual.html|Руководство пользователя git]] 
  
 +  * [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​user-manual.html|Руководство пользователя git]]
 Текущее руководство можно найти по ссылке:​ Текущее руководство можно найти по ссылке:​
-  ​* [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​core-tutorial.html|Введение в основы git]]+ 
 +  ​* [[http://​www.kernel.org/​pub/​software/​scm/​git/​docs/​gitcore-tutorial.html|Введение в основы git]]
  
 Другие замечательные руководства/​веб-страницы:​ Другие замечательные руководства/​веб-страницы:​
  
-  * [[http://​wiki.sourcemage.org/​Git_Guide|Руководство по git]]\\+  * [[http://​wiki.sourcemage.org/​Git_Guide|Руководство по Git]]
   * [[http://​git.or.cz/​course/​index.html|Аварийные курсы по git]]   * [[http://​git.or.cz/​course/​index.html|Аварийные курсы по git]]
  
 Имейте в виду, что некоторые из этих руководств немного устарели и могут не Имейте в виду, что некоторые из этих руководств немного устарели и могут не
 совсем полно отражать текущий синтаксис **git**. совсем полно отражать текущий синтаксис **git**.
 +
 +
 +
 +
 +
 +
  
  
 ===== Анонимный доступ к репозиторию ===== ===== Анонимный доступ к репозиторию =====
-Точная копия репозитория **geda-gaf.git** (или любого репозитория,​ поддерживаемого на + 
-[[http://​git.geda-project.org|git.geda-project.org]]) с использованием анонимного доступа +Клонирование (создание точной локальной ​копии) репозитория **geda-gaf.git** 
-**git**:+(или любого другого репозитория,​ поддерживаемого на 
 +[[http://​git.geda-project.org|git.geda-project.org]]) с использованием 
 +анонимного доступа **git** ​производится так: 
   git clone git://​git.geda-project.org/​geda-gaf.git   git clone git://​git.geda-project.org/​geda-gaf.git
 +
 или или
 +
   git clone git://​git.geda-project.org/​pcb.git   git clone git://​git.geda-project.org/​pcb.git
  
-Для других репозиториев,​ поддерживаемых на ''​git.geda-project.org'', ​просто ​измените +Для клонирования других репозиториев,​ поддерживаемых на 
-последнюю часть вышеуказанной ссылки.+''​git.geda-project.org'', ​достаточно поправить последнюю часть вышеуказанной 
 +ссылки.
  
 Для репозиториев различных проектов существует Для репозиториев различных проектов существует
-[[http://​hjemli.net/​git/​cgit/​about/​|cgit]]-интерфейс. Обратиться +[[http://​hjemli.net/​git/​cgit/​about/​|cgit]]-интерфейс. Открыть его можно, 
-к нему из браузера ​можно, набрав в строке адреса [[http://​git.geda-project.org/​]] . +просто ​набрав в строке адреса браузера [[http://​git.geda-project.org/​]].
- +
 ===== Доступ к репозиторию с правами на запись ===== ===== Доступ к репозиторию с правами на запись =====
-Для доступа в **git** с правами разработчика вам нужно связаться с //DJ Delorie// + 
-для ​установки вашего публичного ключа SSH, после этого+Для доступа в **git** с правами разработчика вам нужно связаться с //DJ 
 +Delorie//, чтобы он установил ваш открытый ​ключ SSH на сервере, после этого
 для отправки своих изменений можно использовать следующие адреса:​ для отправки своих изменений можно использовать следующие адреса:​
 +
   ssh://​git@git.geda-project.org/​geda-gaf.git   ssh://​git@git.geda-project.org/​geda-gaf.git
 или или
   ssh://​git@git.geda-project.org/​pcb.git   ssh://​git@git.geda-project.org/​pcb.git
  
-Вам также будет необходимо отредактировать свой +Вам также будет нужно отредактировать ​у себя ​файл //''​~/​.ssh/​config''//​ 
-файл //''​~/​.ssh/​config''//​ (создать ​его, если он не существует) и вставить +(создать,​ если он ещё ​не существует) и вставить туда следующий текст: 
-туда следующий текст:+
   Host git.geda-project.org   Host git.geda-project.org
   Port 65   Port 65
  
-Примечание: ​Если у вас проблемы с отправкой изменений в основной репозиторий+Примечание: ​если у вас проблемы с отправкой изменений в основной репозиторий
 проекта,​ убедитесь,​ что у вас используется **git** версии 1.5 или выше. проекта,​ убедитесь,​ что у вас используется **git** версии 1.5 или выше.
 +
 +Если для доступа к **git** вы отдали администратору ключ, специально
 +созданный для gEDA, вам может быть также нужно добавить к своим настройкам
 +ещё одну строку,​ где указать этот дополнительный ключ:
 +
 +  Host git.geda-project.org
 +  Port 65
 +  IdentityFile ~/​.ssh/​gedaproject_dsa
 +
 +Учтите,​ что файл, на который вы ссылаетесь здесь, это ваш закрытый ключ
 +(«private key»), а файл, который нужно послать на сервер,​ это
 +соответствующий ему открытый ключ («public key»).
  
  
 ===== Создание и внесение изменений ===== ===== Создание и внесение изменений =====
 +
 +
 ==== Настройка информации о пользователе ==== ==== Настройка информации о пользователе ====
-Вам нужно обеспечить ​наличие в вашем конфигурационном файле для ​**git** + 
-своего ​имени пользователя и адреса электронной почты.+Сначала вам нужно обеспечитьчтобы ​в файле настроек **git** ​у вас были 
 +заданы ваше имя и ваш ​адрес электронной почты. 
   $ git config --global user.name "​Здесь должно быть ваше имя"​   $ git config --global user.name "​Здесь должно быть ваше имя"​
   $ git config --global user.email вы@ваш_домен.example.com   $ git config --global user.email вы@ваш_домен.example.com
 +
  
  
 ==== Внесение заплат других участников проекта ==== ==== Внесение заплат других участников проекта ====
-Если вы накладываете чью-нибудь заплату (например,​ из записи о заплате в 
-''​launchpad''​),​ следует кое-что учесть. **git** сохраняет два имени и два 
-адреса электронной почты для вносимого изменения:​ "​автора"​ заплаты ("​author"​) 
-и "​вносящего"​ заплату ("​committer"​),​ так что при внесении изменений эти данные 
-должны быть установлены правильно. 
  
-Прежде всегопроверьтечто: +При наложении чужой заплаты (например, из записи о заплате в ''​launchpad''​),​ 
-  * Ваша версия заплаты --- последняя. +следует иметь в виду некоторые моменты. Для вносимых изменений **git** 
-  * Автор заплаты будет рад, что его заплату ​внесут (и всё ​ещё не работает над ​ней). +сохраняет по два имени и по два ​адреса электронной почты: «автора» ​заплаты 
-  * Что вы довольны заплатой и возьмёте ​на себя ответственность ​за внесение данных изменений.+(«author») ​и «вносящего» заплату («committer»),​ и при ​внесении изменений эти 
 +данные ​должны быть правильными.
  
-Для простоты начните с немодифицированного неустаревшего дерева+Прежде всего, убедитесь, что
 +  * ваша версия заплаты --- последняя; 
 +  * автор заплаты будет рад, ​что его заплату внесут в репозиторий (и всё ещё не работает над ней); 
 +  * вы довольны заплатой и возьмёте на себя ответственность за вносимые изменения. 
 + 
 +Для простоты начать можно с неизменённого дерева ​самой последней версии
 (**''​git status''​** не должен показывать никаких изменений). (**''​git status''​** не должен показывать никаких изменений).
  
-Наложите заплату как обычно (как в примере):​+Заплата накладывается ​обычным способом ​(как ​этом ​в примере):​ 
   $ patch -p1 < example_changes.patch   $ patch -p1 < example_changes.patch
  
 Можно также использовать команду **''​git apply''​**:​ Можно также использовать команду **''​git apply''​**:​
 +
   $ git apply example_changes.patch   $ git apply example_changes.patch
  
-Если заплата нуждается в небольшой ​правке перед внесением ​(например,​ в +Если ​перед внесением в репозиторий ​заплату нужно ​чуть подкорректировать 
-изменении пробелов), проинформируйте об этом автора. Может быть он делает +(например, ​поправить пробелы), проинформируйте об этом автора. Может быть ​на 
-что-то другое ​на основе этой заплаты и пожелает ​знать, есть ли изменения в +основе этой заплаты ​он делает что-то другое, и тогда он должен знать, ​какие 
-наложенной версии.+изменения появились в наложенной версии.
  
-Примечание:​ //Допустить случайную ошибку ​очень легко, если ваш редактор+Примечание:​ //очень легко допустить случайную ошибку,​ если ваш редактор
 заменяет пробелы знаками табуляции. Не разрешайте ему этого!//​ заменяет пробелы знаками табуляции. Не разрешайте ему этого!//​
  
-Прежде чем вносить изменения,​ **git** нужно +Прежде чем вносить изменения,​ **git** нужно проинформировать о всех 
-проинформировать о каждом ​изменённом, добавленном или удалённом файле. Чтобы посмотреть,​ какие +изменённых, добавленных или, наоборот, ​удалённых файлах. Чтобы посмотреть,​ 
-файлы изменены,​ запустите:+какие файлы изменены, ​можно ​запустить: 
   $ git status   $ git status
-Для скорости,​ командой:+ 
 +Для скорости,​ командой 
   $ git add -u   $ git add -u
 +
 можно обновить все файлы, отслеживаемые **git**, включая удалённые. можно обновить все файлы, отслеживаемые **git**, включая удалённые.
  
-Для добавления новых файлов,​ вносимых заплатой, ​используйте команду+Добавление новых файлов,​ вводимых ​в репозиторий с этой ​заплатой,​ 
 +производится командой 
   $ git add new_file.c   $ git add new_file.c
  
Line 131: Line 182:
 метасимволов. метасимволов.
  
-Внесите заплату, убедившись, что указаны имя и адрес электронной почты автора:​+При внесении ​заплаты обязательно следует ​указать имя и адрес электронной 
 +почты автора:​ 
   $ git commit --author "​Здесь должно быть имя автора <​author@example.com>"​   $ git commit --author "​Здесь должно быть имя автора <​author@example.com>"​
  
-Альтернативно можно установить переменные окружения ''​GIT_AUTHOR_NAME''​ и +Как вариант, если заранее настроить переменные окружения ''​GIT_AUTHOR_NAME''​ 
-''​GIT_AUTHOR_EMAIL'' ​перед обычным запуском ​команды **''​git commit''​**.+и ''​GIT_AUTHOR_EMAIL''​команду **''​git commit''​** ​можно запускать как 
 +обычно.
  
  
-==== Написание хороших сообщений о внесении изменений ==== +==== Написание хороших сообщений о вносимых ​изменениях ====
-Формат сообщения о внесении изменений следующий:​ **строго** однострочное +
-изложение сути заплаты,​ за которым следует пустая строка,​ а затем длинное +
-описание. Если можно уместить полное описание заплаты в одной строке,​ --- +
-прекрасно,​ --- и не забивайте голову насчёт длинного описания.+
  
-Однострочное описание используется для создания темы электронного письма и для 
-отображения в журналах **gitk** и **gitweb**. Однострочное описание в самом 
-деле полезно,​ потому что с его помощью можно быстро находить интересные 
-изменения в этих программах. 
  
-**Не добавляйте** перечень изменённых ​файлов в сообщения о внесении изменений. +Формат сообщения о вносимых изменениях ["​commit message"​] следующий:​ 
-Эта информация очень просто ​добывается ​с помощью инструментария **git**.+**строго** однострочное изложение сути заплаты, за которым следует пустая 
 +строка,​ а затем длинное описание. Если можно уместить полное описание 
 +заплаты в одной строке, --- прекрасно, --- тогда и не стоит забивать голову 
 +насчёт длинного описания. 
 + 
 +Однострочные описания используются для создания темы электронного письма и 
 +для отображения в журналах **gitk** и **gitweb**. Очень удобно,​ когда они 
 +написаны хорошо, потому что это значит, что пользователь этих программ 
 +сможет быстро находить интересные изменения. 
 + 
 +**Не добавляйте** ​в сообщения о вносимых изменениях перечни изменённых файлов Эту информацию очень просто ​извлечь с помощью инструментария **git**.
  
 Пример:​ Пример:​
 +
 <​code>​ <​code>​
 Added new GedaList class derived from GObject Added new GedaList class derived from GObject
  
 This abstracts a GList with API for write access. Its main use is in list This abstracts a GList with API for write access. Its main use is in list
-change notification,​ as it emits a "​changed"​ g_signal when modified. +change notification,​ as it emits a "​changed"​ g_signal when modified. ​ Read 
-Read only access to the underlying GList is provided by an accessor, +only access to the underlying GList is provided by an accessor, ​currenly 
-currenly ​implemented as a macro. +implemented as a macro. ​ </​code>​
-</​code>​+
  
 +==== Операция push - разрушительна ====
  
-==== Операция push - разрушительна ​ ==== +**Предупреждение:​ добавление изменений с помощью //push// в удалённый репозиторий разрушительно** 
-**Предупреждение:​ добавление изменений с помощью //push// в удалённый репозиторий + 
-разрушительно**+В отличие от CVS, командой **''​git-push''​** изменения не просто добавляются 
 +в основной репозиторий,​ но «продвигается» локальная версия. Всегда нужно 
 +дважды (или даже трижды) проверить,​ что «продвигаемые» вами изменения в 
 +самом деле предназначены для основного репозитория.
  
-В отличие от CVS, командой **''​git-push''​** изменения не просто добавляются в 
-основной репозиторий,​ но "​продвигается"​ локальная версия. Всегда нужно 
-дважды (или даже трижды) проверить,​ что "​продвигаемые"​ вами изменения в самом деле 
-предназначены для основного репозитория. 
  
  
 ===== Как мне ... ? ===== ===== Как мне ... ? =====
 +
 Более подробную информацию можно найти в Более подробную информацию можно найти в
 [[http://​wiki.sourcemage.org/​Git_Guide|Руководстве по Git]]. [[http://​wiki.sourcemage.org/​Git_Guide|Руководстве по Git]].
  
 +==== ... получить копию репозитория git проекта gEDA/gaf? ====
  
-==== ... получить копию репозитория gEDA/gaf git? ==== 
 При анонимном доступе только на чтение:​ При анонимном доступе только на чтение:​
 +
   $ git clone git://​git.geda-project.org/​geda-gaf   $ git clone git://​git.geda-project.org/​geda-gaf
  
 Для разработчиков с доступом на чтение и запись:​ Для разработчиков с доступом на чтение и запись:​
-  $ git clone ssh://​git@git.geda-project.org/​geda-gaf 
  
 +  $ git clone ssh://​git@git.geda-project.org/​geda-gaf
  
 ==== ... поддерживать соответствие своей локальной копии текущей версии?​ ==== ==== ... поддерживать соответствие своей локальной копии текущей версии?​ ====
 +
 Те, кто не собирается отправлять свои изменения в центральный репозиторий Те, кто не собирается отправлять свои изменения в центральный репозиторий
 **git**, могут запустить:​ **git**, могут запустить:​
 +
   $ git pull   $ git pull
  
-Однако тем из вас, кто собирается ​"продвигать" ​свои изменения в центральный+Однако тем из вас, кто собирается ​«продвигать» свои изменения в центральный
 репозиторий **git**, использование **''​git pull''​** испортит историю репозиторий **git**, использование **''​git pull''​** испортит историю
-сообщениями об объединении ("​Merge ​branch '​master'​"). Чтобы избежать этого, +сообщениями об объединении ​веток ​(«Merge ​branch '​master'​»). Чтобы избежать 
-нужно запустить:​+этого, нужно запустить:​ 
   $ git fetch   $ git fetch
   $ git rebase origin   $ git rebase origin
- 
  
 ==== ... внести свои изменения в локальный репозиторий git? ==== ==== ... внести свои изменения в локальный репозиторий git? ====
 +
   $ git commit -a   $ git commit -a
  
-Эта команда найдёт все изменённые файлы, о которых знает **git** (добавленные +Эта команда найдёт все изменённые файлы, о которых знает **git** 
-с помощью **''​git-add''​**) и запросит у вас сообщение о внесении изменений. +(добавленные с помощью **''​git-add''​**) и запросит у вас сообщение о 
-Непременно следуйте указанному выше соглашению по написанию таких сообщений,​ +вносимых ​изменениях Непременно следуйте указанному выше соглашению по 
-если планируете отправлять свои изменения в центральный репозиторий.+написанию таких сообщений,​ если планируете отправлять свои изменения в 
 +центральный репозиторий.
  
 Если вы хотите внести файлы из текущего каталога,​ или хотите внести только Если вы хотите внести файлы из текущего каталога,​ или хотите внести только
 явно определённые файлы, не указывайте флаг ''​-a''​ и (или) укажите имена явно определённые файлы, не указывайте флаг ''​-a''​ и (или) укажите имена
 выбранных файлов в командной строке,​ например:​ выбранных файлов в командной строке,​ например:​
 +
   $ git commit filename1 filename2   $ git commit filename1 filename2
  
  
-==== ... отменить все невнесённые локальные изменения?​ ====+ 
 +==== ... отменить все локальные изменения, ещё не внесённые в репозиторий? ==== 
   $ git checkout -f   $ git checkout -f
  
Line 219: Line 284:
 **git**-репозитории,​ будут отвергнуты. **git**-репозитории,​ будут отвергнуты.
  
 +Если нужно отменить изменения только в одном файле, достаточно запустить:​
  
-==== ... исправить/изменить моё последнее внесение изменений?​ ==== +  $ git checkout ​путь/к/нужному/файлу
-  $ Редактирование каких-то ​файлов +
-  $ git commit --amend filename1..filenameN+
  
-Этой командой ​все ​сделанные вами ​изменения ​собираются и повторно вносятся в +Если нужно отменить ​все изменения ​в текущем каталоге и рекурсивно во всех 
-репозиторий со старым сообщением.+его подкаталогах, достаточно запустить:
  
 +  $ git checkout .
 +
 +
 +==== ... исправить/​отредактировать изменения,​ внесённые последний раз? ====
 +
 +  $ ... изменение каких-то файлов ...
 +  $ git commit --amend filename1..filenameN
 +
 +Этой командой все новые изменения объединяются с внесёнными в последний раз
 +и заново вносятся в репозиторий со старым сообщением.
  
 ==== ... отслеживать ветку? ==== ==== ... отслеживать ветку? ====
-  $ git checkout --track -b <​локальное имя> origin/<​удалённое имя> 
  
-Этой командой создаётся ветка ​//<локальное имя>//,​ которая отслеживает +  $ git checkout --track -b <локальная_ветка> origin/<​удалённая_ветка>​
-удалённую ветку //<удалённое имя>//.+
  
 +Этой командой создаётся ветка //<​локальная_ветка>//,​ в которой отслеживается
 +удалённая ветка //<​удалённая_ветка>//​.
  
 ==== ... создать ветку (начиная с определённого тега)? ==== ==== ... создать ветку (начиная с определённого тега)? ====
-Запустите следующие команды (для примера используется ветка //​stable-1.4//​):​+ 
 +Нужно запустить следующие команды (для примера используется ветка 
 +//​stable-1.4//​):​ 
    $ git branch stable-1.4 1.4.0-20080127    $ git branch stable-1.4 1.4.0-20080127
    $ git checkout stable-1.4    $ git checkout stable-1.4
-   <сделать изменения>+   <что-то редактируем>
    $ git commit -a    $ git commit -a
  
 Чтобы опубликовать эту ветку в центральном репозитории (требуется доступ в Чтобы опубликовать эту ветку в центральном репозитории (требуется доступ в
 него на запись):​ него на запись):​
-   $ git push origin stable-1.4 
  
 +   $ git push origin stable-1.4
  
 ==== ... получить ветку разработки другого разработчика?​ ==== ==== ... получить ветку разработки другого разработчика?​ ====
-Кроме репозитория [[http://​git.geda-project.org/​]],​ у нас есть его зеркало на +Кроме репозитория [[http://​git.geda-project.org/​]],​ у нас есть его зеркало 
-[[http://​repo.or.cz/​w/​geda-gaf.git]]. Некоторые разработчики имеют свои +на [[http://​repo.or.cz/​w/​geda-gaf.git]]. Некоторые разработчики имеют свои 
-ответвления (fork) данного репозитория с ветками разработки новых +ответвления («fork») данного репозитория с ветками ​(«branch») ​разработки 
-возможностей.+новых возможностей.
  
 Если вы хотите попробовать одну из веток с новыми возможностями,​ нужно Если вы хотите попробовать одну из веток с новыми возможностями,​ нужно
-получить её из их репозитория. Самый лёгкий способ получения ветки --- +получить её из репозитория ​разработчика. Самый лёгкий способ получения ветки 
-использовать команду **''​git fetch''​**.+--- использовать команду **''​git fetch''​**. 
     $ git fetch ссылка_на_репозиторий название_удалённой_ветки:​название_локальной_ветки     $ git fetch ссылка_на_репозиторий название_удалённой_ветки:​название_локальной_ветки
  
 **Примеры:​** **Примеры:​**
-Получение ветки //​cairo_experiment//​ от Peter C. выглядело бы так:+Получение ветки //​cairo_experiment//​ от //Peter C.// выглядело бы так: 
     $ git fetch git://​repo.or.cz/​geda-gaf/​pcjc2.git cairo_experiment:​peters_cairo_experiment     $ git fetch git://​repo.or.cz/​geda-gaf/​pcjc2.git cairo_experiment:​peters_cairo_experiment
  
Line 265: Line 344:
 //​peters_cairo_experiment//​ и поиграться с ней. //​peters_cairo_experiment//​ и поиграться с ней.
  
 +Более того, в локальный репозиторий можно добавить несколько удалённых ответвлений:​
 +    $ git remote add <​название>​ <url>
 +    $ git fetch <​название>​
 +При условии,​ что <​название>​ уникально,​ у вас появится возможность следить за
 +их развитием,​ не создавая локальных веток. С помощью таких
 +программ,​ как **gitk**, можно следить за прогрессом в ветках разработки различных возможностей в разных ответвлениях:​
 +    $ gitk --all
  
 +**Примеры:​**
 +    $ git remote add peter-b https://​github.com/​peter-b/​geda-gaf.git
 +    $ git fetch peter-b
 +    $ git remote add gareth8118 https://​github.com/​gareth8118/​geda-gaf.git
 +    $ git fetch gareth8118
 +    $ git remote add bert https://​github.com/​bert/​geda-gaf.git
 +    $ git fetch bert
 +    $ gitk --all
 +
 +Теперь gitk будет забит до отказа,​ но с помощью **//​Файл//​** -> **//​Список
 +ссылок//​** [**//​File//​** -> **//List references//​**] (<​key>​F2</​key>​) можно
 +открыть диалоговое окно для более лёгкой навигации.
 +
 +Обновление любимых веток сократится тогда до:
 +    $ git fetch --all
 ==== ... сделать заплату,​ чтобы отправить её разработчикам?​ ==== ==== ... сделать заплату,​ чтобы отправить её разработчикам?​ ====
-Самый простой способ,​ в котором в заплату включаются все изменения с тех пор, +Самый простой способ,​ в котором в заплату включаются все изменения с тех пор, как локальный репозиторий синхронизировался с репозиторием на geda-project.org:​
-как локальный репозиторий синхронизировался с репозиторием на geda-project.org:​+
   $ git diff > имя_файла_заплаты   $ git diff > имя_файла_заплаты
  
-Более сложный способ с большим контролем над содержимым заплаты:​+Более сложный способ с бóльшим контролем над содержимым заплаты:​
   $ git add -i           # выбрать файлы для внесения изменений   $ git add -i           # выбрать файлы для внесения изменений
   $ git status ​          # проверить,​ что будут внесены именно те изменения,​   $ git status ​          # проверить,​ что будут внесены именно те изменения,​
Line 277: Line 377:
   $ git commit ​          # внести изменения   $ git commit ​          # внести изменения
   $ git format-patch -1  # сделать файл заплаты,​ основанный на данных изменениях   $ git format-patch -1  # сделать файл заплаты,​ основанный на данных изменениях
-Последняя команда выведет имя файла, содержащего заплату. ​Обязательно +Последняя команда выведет имя файла, содержащего заплату. ​Чтобы больше узнать об этой команде,​ обязательно ​взгляните ​на документацию по **git-format-patch**. Полученный файл можно отправить ​по электронной почте разработчикам,​ имеющим доступ на запись,​ и они смогут ​наложить заплату ​с помощью **''​git apply''​**.
-посмотрите документацию по **git-format-patch**, чтобы получить больше +
-информации по этой команде. Полученный файл может быть ​отправлен ​по +
-электронной почте разработчикам,​ имеющим доступ на запись,​ и наложен ими с +
-помощью **''​git apply''​**. +
  
 ==== ... восстановить на самом деле испорченный локальный репозиторий?​ ==== ==== ... восстановить на самом деле испорченный локальный репозиторий?​ ====
-Прежде всего не "продвигайте" с помощью ​**''​push''​** никакой репозиторий, если вы + 
-думаете,​ что ​он как-то испорчен. Спросите сначала кого-нибудь более опытного в +Прежде всегоне вздумайте никуда «продвигать» командой **''​git push''​** 
-**git**.+никаких изменений из локального ​репозитория, если вы думаете,​ что ​в нём 
 +что-то испорчено. Спросите сначала кого-нибудь более опытного в **git**.
  
 Во-вторых,​ команда,​ которая в самом деле спасёт вашу шкуру --- это Во-вторых,​ команда,​ которая в самом деле спасёт вашу шкуру --- это
 **git-reflog**. Она используется примерно так: **git-reflog**. Она используется примерно так:
 +
    $ git reflog    $ git reflog
    ​086908e... HEAD@{0}: cherry-pick:​ Last minute updates to the READMEs for all pro    ​086908e... HEAD@{0}: cherry-pick:​ Last minute updates to the READMEs for all pro
Line 298: Line 395:
    $ git reset --hard HEAD@{1}    $ git reset --hard HEAD@{1}
  
-Последняя команда (**''​%%git reset --hard ...%%''​**) откатит все ваши изменения к +Последняя команда (**''​%%git reset --hard ...%%''​**) откатит все ваши 
-шагу ​"​checkout: moving to master"​.  Помните:​ не паникуйте! С помощью **git** +изменения к шагу ​«checkout: moving to master».  Помните:​ не паникуйте! С 
-многое ​можно ​починить.+помощью **git** ​можно ​многое починить.
  
geda/scm.ru.txt · Last modified: 2014/04/24 16:02 by vzh