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
geda:scm.ru [2012/02/27 16:52]
vzh Updated
geda:scm.ru [2014/04/24 16:02] (current)
vzh
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 184:
 метасимволов. метасимволов.
  
-Внесите заплату, убедившись, что указаны имя и адрес электронной почты автора:​+При внесении ​заплаты обязательно следует ​указать имя и адрес электронной 
 +почты автора:​ 
   $ 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 286:
 **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 346:
 //​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 379:
   $ 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 397:
    $ 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.1330379560.txt.gz · Last modified: 2012/02/27 16:52 by vzh