Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Программирование и алгоритмические языки в Linux

10 советов и приемов для начинающих по использованию Git

Оригинал: "10 Git Tips and Tricks for Beginners"
Автор: Jason Gilmore
Дата публикации: June 4, 2010
Перевод: Н.Ромоданов
Дата перевода: 15 июня 2010 г.

Существует тенденция, благодаря которой новые технологии становятся катализатором внедрения в основное русло технологического развития конкретных парадигм разработок и лучших практических приемов. Назовем этот феномен "Can't Buy Me Love" ("Любовь не купить") в честь фильма 80-х годов, в котором один школьный умник для повышения собственной популярности нанимает понравившуюся ему девушку для того, чтобы она изображала его подружку. Возможно, что последним примером такого феномена является появление и использование Git - системы управления версиями, имеющей открытый код и существенно повышающей уровень формализации при управлении версиями исходного кода. Я в течение нескольких лет пользовался другими решениями, такими как системы контроля версий CVS и Subversion, но Git, как средство управления исходным кодом, более естественно вписался в мой технологический процесс.

И, хотя подобно многим другим технологиям, не требуется сразу много знать для начала работы с Git, в нем есть так много возможностей и вариантов, что это ошеломляет начинающих. Когда я стал лучше разбираться в системе Git, я составил список советов и приемов, которые помогли мне лучше управлять моими Git проектами. В этой статье я хочу рассказать от тех из них, которые, как я думаю, будут наиболее полезны для новичков.

1. Добавление файлов одновременно с выполнением операции commit

В Git вы должны сначала явно подтвердить ваш запрос на добавление в репозитарий новых файлов, версии которых будут в дальнейшем отслеживаться (tracked files), и только потом фиксировать (командой commit) последние изменения. Поэтому типичная последовательность команд при подтверждении изменений выглядит следующим образом:

%>git add . %>git commit -m "Latest commit message" 

Сохраняем предыдущее состояние и с помощью флага -a выполняем одновременное добавление файлов и подтверждение изменения:

%>git commit -a -m "Latest commit message" 

Однако в большинстве случаев вам не следует пользоваться таким сокращением. Далее в этой статье я приведу вам, по крайней мере один пример, показывающий, почему этого не следует делать (по-видимому, это совет 5 – прим.пер.).

2. Сохраняем команды вместе с Git - алиасами

Подобно многим популярным утилитам, работающим из командной строки, Git позволяет сохранять пользовательские настройки в конфигурационном файле, имеющим название .gitconfig. В этом файле вы обычно указываете ваше имя и адрес электронной почты, поскольку это связано с вашим взаимодействием с репозитарием, но вы также можете определить здесь алиасы, которые сэкономят вам время. Например, в моем файле .gitconfig содержатся несколько алиасов для наиболее часто используемых команд:

[alias] st = status co = checkout cm = commit pom = push origin master

Если случится, что забыли созданные вами алиасы, вы можете с помощью следующей команды быстро просмотреть настройки вашего конфигурационного файла:

%>git config -l 

3. Выборочная подготовка файлов к выполнению операции commit

Иногда вы можете работать с несколькими файлами одновременно, но при выполнении ближайшей операции commit хотите добавить в репозитарий только некоторые из них. Для того, чтобы это сделать, вы можете воспользоваться интерактивной операцией добавления. Например, предположим, я создал два новых файла, ShopController.php и ForumController.php, но хочу добавить и зафиксировать (с помощью команды commit) добавление только первого файла. Я могу запустить процедуру интерактивного добавления, указав параметр -i для команды git add:

%>git add -i 

В ответ вы получите меню, в котором вам будет предложено выбрать один из нескольких вариантов:

*** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp 

Выбрав вариант 4, вы можете интерактивно указать, какие файлы вы хотите добавить:

What now> 4 1: application/controllers/ForumController.php 
2: application/controllers/ShopController.php Add untracked>> 

4. Игнорирование файлов и директорий с помощью .gitignore

Самое первое, что мне следует сделать после инициализации нового Git репозитория, это - создать файл .gitignore. Файл .gitignore используется для того, чтобы отфильтровывать те файлы и каталоги, изменение которых вы не хотите отслеживать в Git репозитарии. Когда, например, работа ведется над новым проектом Zend Framework, я обычно не оправляю в репозитарий проектную документацию, изображения, предназначенные для показа на сайте, а также файл, имеющий имя notes.txt, подразумевается, что мой файл .gitignore выглядит следующим образом:

docs public/images notes.txt 

5. Удаление из списка зафиксированных новых только что добавленных файлов

В процесс разработки вы можете забыть добавить в ваш файл .gitignore имена тех файлов, которые только что создали, но не хотите добавлять в ваш репозитарий. Вы можете с помощью команды rm удалить эти файлы из списка изменений, которые были уже зафиксированы (это действие называется unstaging или удаление файла из группы индексируемых файлов):

%>git rm --cached schema-notes.txt

После того, как эта команда будет выполнена, вы можете добавить эти файлы в ваш файл .gitignore и снова вернутся к выполнению операции commit.

6. Просмотр содержимого предыдущих версий зафиксированных файлов

Мне часто бывает нужно просмотреть более ранние версии файла уже после того, как я внес изменение в текущей версии и не восстанавливать предыдущие версии. Вы можете легко сделать это с помощью команды show, добавив аргумент, указывающий на файл:

%>git show HEAD^:application/controllers/AboutController.php 

Символ "^" указывает количество предыдущих версий, на которое при просмотре файла надо вернуться назад (число шагов "отката" -прим.пер.). Таким образом, приведенный выше пример команды покажет предыдущую версию файла AboutController.php. Если вы хотите посмотреть на три версии назад, вы должны использовать три символа "^", например:

%>git show HEAD^^^:application/controllers/AboutController.php 

В качестве альтернативы вы можете при указании ссылки на файл воспользоваться хэш значением операции commit. Например, если вы хотите просмотреть содержимое AboutConroller.php в том виде, как оно было перед пятью последними изменениями, вы можете выполнить команду git log и получить хеш значение, а затем использовать первые пять символов этого хеш значения для просмотра содержимого файла:

%>git show 23aa985:application/controllers/AboutController.php 

7. Редактирование ваших последних зафиксированных сообщений в журнале

Я приверженец правильной орфографии, но в своей спешке зафиксировать (с помощью команды commit) последние изменения я могу случайно набрать в своем сообщении одну или пару неверных букв. Вы легко можете легко отредактировать самые последние зафиксированные сообщения с помощью команды amend:

%>git commit --amend 

Исполнение этой команды позволит вам загрузить в текстовый редактор самое последнее зафиксированное (с помощью команды commit) сообщение и вы сможете отредактировать сообщение и сохранить исправленный вариант.

8. Сохранение текущего состояния без фиксации изменений

Случайное прерывание вашего обычного процесса программирования является неизбежным и часто ставит вас в положение, когда вы не совсем готовы вносить в репозитарий изменения, а вам вдруг необходимо что-то исправить и зафиксировать, что не связанно с текущей работой. Вы можете сохранить ваши текущие изменения с помощью команды stash, это позволит вам вернуться к предыдущей точке фиксации, после чего вы можете сделать и зафиксировать (с помощью команды commit) другие изменения. Затем вы можете вернуться к сохраненному состоянию. Например, предположим, я работал на проектным документом README и вдруг обнаружил вопиющую орфографическую ошибку. Я могу сохранить мои текущие изменения следующим образом:

%>git stash save

Если я открою документ README заново, я увижу, что новый раздел исчез, поскольку я вернулся к предыдущей точке фиксации. Затем я могу исправить орфографическую ошибку и зафиксировать (с помощью команды commit) изменения. Затем выполню следующую команду, чтобы вернуться к моему исходному состоянию:

%>git stash pop

9. Просмотр вашего репозитария

Есть немало веб-интерфейсов, предназначенных для просмотра Git репозитория, но знаете ли вы о том, что один из них, называемый instaweb, интегрирован в дистрибутив Git? Для того, чтобы с помощью браузера подробно рассмотреть содержимое репозитария, выполните следующую команду:

%>git instaweb --httpd apache2 

С помощью переключателя —httpd передается параметр apache2, указывающий Git, что на данной машине работает веб сервер Apache. По умолчанию это - lighthttpd, хотя поддерживаются также и несколько других серверов.

10. Находим причину проблемы

Иногда кто-нибудь из команды (но не вы, конечно) может добавить в репозитарий не совсем отлаженный код и испортить ваш билд. Естественно, вы захотите, чтобы кто-то взял на себя вину за эту проблему, но кто внес ошибку? Используйте команду blame для того, чтобы это узнать:

%>git blame application/controllers/AboutController.php 
23aa9852 (Jason Gilmore 2010-06-03 12:34:04 -0400 11) public function indexAction() 
23aa9852 (Jason Gilmore 2010-06-03 12:34:04 -0400 12) { 0e9e9f49 (Jason Gilmore 2010-06-03 13:32:47 -0400 13) 
echo "Missing semicolon" 23aa9852 (Jason Gilmore 2010-06-03 12:34:04 -0400 14) } 

Уфф!

Статьи по данной тематике

Заключение

Git воистину является сокровищницей с фантастическими возможностями, что делает управление исходным кодом столь приятным, как легкий морской бриз. Какие функции Git, советы и рекомендации вы считаете полезными? Расскажите нам о них в комментариях!