This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
geda:scm.ru [2012/11/29 04:56] vzh Fixed a header |
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** (или любого другого репозитория, поддерживаемого на | + | Клонирование (создание точной локальной копии) репозитория **geda-gaf.git** |
- | [[http://git.geda-project.org|git.geda-project.org]]) с использованием анонимного доступа | + | (или любого другого репозитория, поддерживаемого на |
- | **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 | ||
Line 81: | Line 105: | ||
Если для доступа к **git** вы отдали администратору ключ, специально | Если для доступа к **git** вы отдали администратору ключ, специально | ||
- | созданный для gEDA, вам может быть также нужно добавить к своим | + | созданный для gEDA, вам может быть также нужно добавить к своим настройкам |
- | настройкам ещё одну строку, где указать этот дополнительный ключ: | + | ещё одну строку, где указать этот дополнительный ключ: |
Host git.geda-project.org | Host git.geda-project.org | ||
Line 89: | Line 113: | ||
Учтите, что файл, на который вы ссылаетесь здесь, это ваш закрытый ключ | Учтите, что файл, на который вы ссылаетесь здесь, это ваш закрытый ключ | ||
- | ("private key"), а файл, который нужно послать на сервер, | + | («private key»), а файл, который нужно послать на сервер, это |
- | это соответствующий ему открытый ключ ("public 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''), следует иметь в виду некоторые моменты. Для | + | При наложении чужой заплаты (например, из записи о заплате в ''launchpad''), |
- | вносимых изменений **git** сохраняет по два имени и по два адреса | + | следует иметь в виду некоторые моменты. Для вносимых изменений **git** |
- | электронной почты: "автора" заплаты ("author") и "вносящего" заплату | + | сохраняет по два имени и по два адреса электронной почты: «автора» заплаты |
- | ("committer"), и при внесении изменений эти данные должны быть | + | («author») и «вносящего» заплату («committer»), и при внесении изменений эти |
- | правильными. | + | данные должны быть правильными. |
Прежде всего, убедитесь, что: | Прежде всего, убедитесь, что: | ||
Line 118: | Line 147: | ||
Заплата накладывается обычным способом (как этом в примере): | Заплата накладывается обычным способом (как этом в примере): | ||
+ | |||
$ patch -p1 < example_changes.patch | $ patch -p1 < example_changes.patch | ||
Можно также использовать команду **''git apply''**: | Можно также использовать команду **''git apply''**: | ||
+ | |||
$ git apply example_changes.patch | $ git apply example_changes.patch | ||
Если перед внесением в репозиторий заплату нужно чуть подкорректировать | Если перед внесением в репозиторий заплату нужно чуть подкорректировать | ||
- | (например, поправить пробелы), проинформируйте об этом автора. Может | + | (например, поправить пробелы), проинформируйте об этом автора. Может быть на |
- | быть на основе этой заплаты он делает | + | основе этой заплаты он делает что-то другое, и тогда он должен знать, какие |
- | что-то другое, и тогда он должен знать, какие изменения появились в | + | изменения появились в наложенной версии. |
- | наложенной версии. | + | |
Примечание: //очень легко допустить случайную ошибку, если ваш редактор | Примечание: //очень легко допустить случайную ошибку, если ваш редактор | ||
Line 133: | Line 163: | ||
Прежде чем вносить изменения, **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 146: | 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''** можно запускать как |
- | можно запускать как обычно. | + | обычно. |
==== Написание хороших сообщений о вносимых изменениях ==== | ==== Написание хороших сообщений о вносимых изменениях ==== | ||
+ | |||
+ | |||
Формат сообщения о вносимых изменениях ["commit message"] следующий: | Формат сообщения о вносимых изменениях ["commit message"] следующий: | ||
- | **строго** однострочное изложение сути заплаты, за которым следует | + | **строго** однострочное изложение сути заплаты, за которым следует пустая |
- | пустая строка, а затем длинное описание. Если можно уместить полное | + | строка, а затем длинное описание. Если можно уместить полное описание |
- | описание заплаты в одной строке, --- прекрасно, --- тогда и не стоит | + | заплаты в одной строке, --- прекрасно, --- тогда и не стоит забивать голову |
- | забивать голову насчёт длинного описания. | + | насчёт длинного описания. |
- | Однострочные описания используются для создания темы электронного письма | + | Однострочные описания используются для создания темы электронного письма и |
- | и для отображения в журналах **gitk** и **gitweb**. Очень удобно, когда | + | для отображения в журналах **gitk** и **gitweb**. Очень удобно, когда они |
- | они написаны хорошо, потому что это значит, что пользователь этих | + | написаны хорошо, потому что это значит, что пользователь этих программ |
- | программ сможет быстро находить интересные изменения. | + | сможет быстро находить интересные изменения. |
- | **Не добавляйте** в сообщения о вносимых изменениях перечни изменённых файлов. | + | **Не добавляйте** в сообщения о вносимых изменениях перечни изменённых файлов. Эту информацию очень просто извлечь с помощью инструментария **git**. |
- | Эту информацию очень просто извлечь с помощью инструментария **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? ==== | ==== ... получить копию репозитория git проекта gEDA/gaf? ==== | ||
+ | |||
При анонимном доступе только на чтение: | При анонимном доступе только на чтение: | ||
+ | |||
$ 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 236: | Line 284: | ||
**git**-репозитории, будут отвергнуты. | **git**-репозитории, будут отвергнуты. | ||
- | Если нужно отменить изменения только в одном файле, достаточно | + | Если нужно отменить изменения только в одном файле, достаточно запустить: |
- | запустить: | + | |
$ git checkout путь/к/нужному/файлу | $ git checkout путь/к/нужному/файлу | ||
- | Если нужно отменить все изменения в текущем каталоге и рекурсивно во | + | Если нужно отменить все изменения в текущем каталоге и рекурсивно во всех |
- | всех его подкаталогах, достаточно запустить: | + | его подкаталогах, достаточно запустить: |
$ git checkout . | $ git checkout . | ||
Line 248: | Line 295: | ||
==== ... исправить/отредактировать изменения, внесённые последний раз? ==== | ==== ... исправить/отредактировать изменения, внесённые последний раз? ==== | ||
+ | |||
$ ... изменение каких-то файлов ... | $ ... изменение каких-то файлов ... | ||
$ git commit --amend filename1..filenameN | $ 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 | ||
Line 271: | Line 321: | ||
Чтобы опубликовать эту ветку в центральном репозитории (требуется доступ в | Чтобы опубликовать эту ветку в центральном репозитории (требуется доступ в | ||
него на запись): | него на запись): | ||
+ | |||
$ 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") данного репозитория с ветками ("branch") разработки новых | + | ответвления («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 292: | Line 344: | ||
//peters_cairo_experiment// и поиграться с ней. | //peters_cairo_experiment// и поиграться с ней. | ||
- | Более того, в локальный репозиторий можно добавить несколько удалённых | + | Более того, в локальный репозиторий можно добавить несколько удалённых ответвлений: |
- | ответвлений: | + | |
$ git remote add <название> <url> | $ git remote add <название> <url> | ||
$ git fetch <название> | $ git fetch <название> | ||
При условии, что <название> уникально, у вас появится возможность следить за | При условии, что <название> уникально, у вас появится возможность следить за | ||
их развитием, не создавая локальных веток. С помощью таких | их развитием, не создавая локальных веток. С помощью таких | ||
- | программ, как **gitk**, можно следить за прогрессом в ветках разработки | + | программ, как **gitk**, можно следить за прогрессом в ветках разработки различных возможностей в разных ответвлениях: |
- | различных возможностей в разных ответвлениях: | + | |
$ gitk --all | $ gitk --all | ||
Line 311: | Line 361: | ||
$ gitk --all | $ gitk --all | ||
- | Теперь gitk будет забит до отказа, но с помощью **//Файл//** -> | + | Теперь gitk будет забит до отказа, но с помощью **//Файл//** -> **//Список |
- | **//Список ссылок//** [**//File//** -> **//List references//**] | + | ссылок//** [**//File//** -> **//List references//**] (<key>F2</key>) можно |
- | (<key>F2</key>) можно открыть диалоговое окно для более лёгкой | + | открыть диалоговое окно для более лёгкой навигации. |
- | навигации. | + | |
Обновление любимых веток сократится тогда до: | Обновление любимых веток сократится тогда до: | ||
$ git fetch --all | $ git fetch --all | ||
- | |||
==== ... сделать заплату, чтобы отправить её разработчикам? ==== | ==== ... сделать заплату, чтобы отправить её разработчикам? ==== | ||
- | Самый простой способ, в котором в заплату включаются все изменения с тех пор, | + | Самый простой способ, в котором в заплату включаются все изменения с тех пор, как локальный репозиторий синхронизировался с репозиторием на geda-project.org: |
- | как локальный репозиторий синхронизировался с репозиторием на geda-project.org: | + | |
$ git diff > имя_файла_заплаты | $ git diff > имя_файла_заплаты | ||
Line 330: | Line 377: | ||
$ git commit # внести изменения | $ git commit # внести изменения | ||
$ git format-patch -1 # сделать файл заплаты, основанный на данных изменениях | $ git format-patch -1 # сделать файл заплаты, основанный на данных изменениях | ||
- | Последняя команда выведет имя файла, содержащего заплату. Чтобы больше | + | Последняя команда выведет имя файла, содержащего заплату. Чтобы больше узнать об этой команде, обязательно взгляните на документацию по **git-format-patch**. Полученный файл можно отправить по электронной почте разработчикам, имеющим доступ на запись, и они смогут наложить заплату с помощью **''git apply''**. |
- | узнать об этой команде, обязательно взгляните на документацию по | + | |
- | **git-format-patch**. Полученный файл можно отправить по | + | |
- | электронной почте разработчикам, имеющим доступ на запись, и они смогут | + | |
- | наложить заплату с помощью **''git apply''**. | + | |
==== ... восстановить на самом деле испорченный локальный репозиторий? ==== | ==== ... восстановить на самом деле испорченный локальный репозиторий? ==== | ||
- | Прежде всего, не вздумайте никуда "продвигать" командой **''git push''** | + | |
+ | Прежде всего, не вздумайте никуда «продвигать» командой **''git push''** | ||
никаких изменений из локального репозитория, если вы думаете, что в нём | никаких изменений из локального репозитория, если вы думаете, что в нём | ||
что-то испорчено. Спросите сначала кого-нибудь более опытного в **git**. | что-то испорчено. Спросите сначала кого-нибудь более опытного в **git**. | ||
Line 343: | Line 387: | ||
Во-вторых, команда, которая в самом деле спасёт вашу шкуру --- это | Во-вторых, команда, которая в самом деле спасёт вашу шкуру --- это | ||
**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 350: | 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** можно многое починить. |