This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
geda:scm.ru [2012/02/20 15:14] 127.0.0.1 external edit |
geda:scm.ru [2014/04/24 16:02] 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]], для работы с наборами заплат | ||
- | Если вы собираетесь отправлять изменения в центральный репозиторий **git**, | ||
- | убедитесь, что у вас установлена по крайней мере версия **git** 1.5.x. | ||
- | Для дистрибутивов, созданных на основе 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 | ||
- | Учтите, что на 25.06.2007 г. стабильный Debian (Etch) и тестируемый | ||
- | Debian (Lenny) имели **git** версии 1.4.x. В нестабильном Debian (Sid) | ||
- | --- 1.5.2.2. | ||
- | **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**. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
===== Анонимный доступ к репозиторию ===== | ===== Анонимный доступ к репозиторию ===== | ||
- | Точная копия репозитория **gaf.git** (или любого репозитория, поддерживаемого на | ||
- | [[http://git.gpleda.org|git.gpleda.org]]) с использованием анонимного доступа | ||
- | **git**: | ||
- | git clone git://git.gpleda.org/gaf.git | ||
- | или | ||
- | git clone git://git.gpleda.org/pcb.git | ||
- | Для других репозиториев, поддерживаемых на ''git.gpleda.org'', просто измените | + | Клонирование (создание точной локальной копии) репозитория **geda-gaf.git** |
- | последнюю часть вышеуказанной ссылки. | + | (или любого другого репозитория, поддерживаемого на |
+ | [[http://git.geda-project.org|git.geda-project.org]]) с использованием | ||
+ | анонимного доступа **git** производится так: | ||
- | Для репозиториев различных проектов существует | + | git clone git://git.geda-project.org/geda-gaf.git |
- | [[https://git.wiki.kernel.org/index.php/Gitweb|gitweb]]-интерфейс. Обратиться | + | |
- | к нему из браузера можно, набрав в строке адреса [[http://git.gpleda.org/]] . | + | |
+ | или | ||
+ | git clone git://git.geda-project.org/pcb.git | ||
+ | |||
+ | Для клонирования других репозиториев, поддерживаемых на | ||
+ | ''git.geda-project.org'', достаточно поправить последнюю часть вышеуказанной | ||
+ | ссылки. | ||
+ | |||
+ | Для репозиториев различных проектов существует | ||
+ | [[http://hjemli.net/git/cgit/about/|cgit]]-интерфейс. Открыть его можно, | ||
+ | просто набрав в строке адреса браузера [[http://git.geda-project.org/]]. | ||
===== Доступ к репозиторию с правами на запись ===== | ===== Доступ к репозиторию с правами на запись ===== | ||
- | Для доступа в **git** с правами разработчика вам нужно связаться с //Ales Hvezda//, | + | |
- | чтобы получить установленный публичный ключ SSH и учётную запись; после этого | + | Для доступа в **git** с правами разработчика вам нужно связаться с //DJ |
+ | Delorie//, чтобы он установил ваш открытый ключ SSH на сервере, после этого | ||
для отправки своих изменений можно использовать следующие адреса: | для отправки своих изменений можно использовать следующие адреса: | ||
- | ssh://git@git.gpleda.org/gaf.git | + | |
+ | ssh://git@git.geda-project.org/geda-gaf.git | ||
или | или | ||
- | ssh://git@git.gpleda.org/pcb.git | + | ssh://git@git.geda-project.org/pcb.git |
- | Если у вас есть доступ по **ssh**, вам также необходимо отредактировать свой | + | Вам также будет нужно отредактировать у себя файл //''~/.ssh/config''// |
- | файл //''~/.ssh/config''// (создать его, если он не существует) и вставить | + | (создать, если он ещё не существует) и вставить туда следующий текст: |
- | туда следующий текст: | + | |
- | Host git.gpleda.org | + | Host git.geda-project.org |
- | Port 5022 | + | Port 65 |
+ | |||
+ | Примечание: если у вас проблемы с отправкой изменений в основной репозиторий | ||
+ | проекта, убедитесь, что у вас используется **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 "Your Name Comes Here" | + | заданы ваше имя и ваш адрес электронной почты. |
- | $ git config --global user.email you@yourdomain.example.com | + | |
+ | $ git config --global user.name "Здесь должно быть ваше имя" | ||
+ | $ 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 135: | 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.gpleda.org/gaf | + | |
+ | $ git clone git://git.geda-project.org/geda-gaf | ||
Для разработчиков с доступом на чтение и запись: | Для разработчиков с доступом на чтение и запись: | ||
- | $ git clone git://git.gpleda.org/home/git/gaf.git | ||
+ | $ 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 223: | 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.gpleda.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 269: | 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: |
- | как локальный репозиторий синхронизировался с репозиторием на gpleda.org: | + | |
$ git diff > имя_файла_заплаты | $ git diff > имя_файла_заплаты | ||
- | Более сложный способ с большим контролем над содержимым заплаты: | + | Более сложный способ с бóльшим контролем над содержимым заплаты: |
$ git add -i # выбрать файлы для внесения изменений | $ git add -i # выбрать файлы для внесения изменений | ||
$ git status # проверить, что будут внесены именно те изменения, | $ git status # проверить, что будут внесены именно те изменения, | ||
Line 281: | 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 302: | 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** можно многое починить. |