Видео ролики бесплатно онлайн

Смотреть уз видео

Официальный сайт медиатэк 24/7/365

Смотреть видео бесплатно

13.10.10 13:17 Dem0n3D

Переводы10 советов по использованию Git для новичков

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

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

1. Добавляйте файлы автоматически во время коммита.

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

1
2
%>git add .
%>git commit -m "Последнее собщение изменений"

Для начала сохраните файлы, затем добавьте и подтвердите их одновременно используя ключ -a:

%>git commit -a -m "Последние изменения"

Однако, во многих случаях, не следует прибегать к короткому пути. Позже я приведу вам пример, который продемонстрирует почему так делать не стоит.

2. Aliases в Git -- меньше телодвижений.
(прим.пер.: alias - псевдоним, сокращение)

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

1
2
3
4
5
[alias]
st = status
co = checkout
cm = commit
pom = push origin master

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

%>git config -l

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

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

%>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*

*примечание:
****Команды**** 1: статус 2: обновить 3:вернуть(отменить последние изменения) 4: добавить не отслеживаемые(файлы) 5: патч 6: разница 7: выход 8: помощь

При выборе 4, вы можете выбрать файлы для добавления:

What now> 4 1: application/controllers/ForumController.php
*What now - Что дальше?


2: application/controllers/ShopController.php Add untracked>>
Add untracked - добавить не отсеживаемые файлы.

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

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

docs public/images notes.txt

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

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

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

Когда файл удалён из индекса, вы можете добавить его в .gitignore и начать процесс коммита заново.

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

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

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

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

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

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

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

7. Редактирование самого последнего сообщения коммита.

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

%>git commit --amend

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

8. Временное сохранение незафиксированных изменений

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

%>git stash save

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

%>git stash pop

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

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

%>git instaweb --httpd apache2

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

10. Ищем виновного

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

%>git blame application/controllers/AboutController.php

1
2
3
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) }

* Missing semicolon - пропущена "точка с запятой"

Упс! (вот беда: автор сам и допустил ошибку, прим. пер.)

Заключение


Воистину, Git - настоящий клад фантастических возможностей, делающих управление исходным кодом приятным занятием. Какие возможности Git'а, подсказки и трюки вы находите полезными? Расскажите нам о них в комментариях!

Об авторе

Jason Gilmore - основатель EasyPHPWebsites.com. Он так же автор нескольких популярных книг, включая "Easy PHP Websites with the Zend Framework", "Easy PayPal with PHP", и "Beginning PHP and MySQL, Third Edition".

Переведено инициативной группой переводчиков ZogG, Zereal, Dem0n3D с помощью сервиса translated.by, оригинал: 10 Git Tips and Tricks for Beginners



kstep 13.10.10 14:07 # +4
Поставьте теги "code", а то команды у вас сливаются в одну строчку.

Например у вас:

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


надо:

1
2
3
4
5
[alias]
st = status
co = checkout
cm = commit
pom = push origin master

Dem0n3D 13.10.10 18:10 # +0
Как пожелаете, хотя в оригинале было в 1 строчку.
kstep 13.10.10 22:04 # +1
В оригинале — это на translated.by? Так это не оригинал, это ограничения движка translated.by. А если в настоящем оригинале и правда в одну строчку, то это писец просто.
Dem0n3D 14.10.10 07:19 # +-2
А вам влом пройти по ссылке и проверить?
kstep 13.10.10 22:07 # +0
Ещё вот часть 10 про виноватого. Там лог покорёжен, в консоли информация об изменении на строках, авторе и содержимое строки выравнены по аккуратным столбцам, а здесь всё побито нафиг, т.к. шрифт не моноширинный. Поэтому любой вывод из консоли должен быть в тегах "code", иначе воспринимается как г*вн*.
wiz 13.10.10 14:45 # +-1
0. Надо было использовать bzr/hg.
kstep 13.10.10 15:33 # +3
Не надо. Вот не надо здесь холиваров. Пожалуйста.
wiz 13.10.10 15:44 # +-1
а я между тем вполне серьёзно. git - нечеловеческая система и такие советы этому доказательство.
kstep 13.10.10 15:47 # +1
Я вот уже несколько лет работаю с гитом и ничего нечеловеческого в ней не нашёл. Не буду говорить о радиусе кривизны рук и неосиляторах гита (хотя очень хочется), но в общем и целом не стоит забывать о фломастерах и привычках. Для меня вот ветвления в bzr делали ненатуралы, а hg вообще воспринимаю с трудом.
m0nhawk 13.10.10 18:13 # +0
Пробовал и bzr, и git. Последним остался доволен в отличие от bzr.

Хотя в любом случае -- "На вкус и цвет все..."
TiGR 13.10.10 14:56 # +2
amend позволяет не только отредактировать сообщение последнего коммита, но и его содержимое. То есть, какая-то мелкая дополнительная правка порой по логике должна попасть в предыдущий коммит, и делать ради неё новый - нет смысла. Вот тогда и можно использовать amend.
$ git show HEAD^^^
А разве нельзя сделать git show HEAD~3?
kstep 13.10.10 15:33 # +1
Можно. И нужно.
kstep 13.10.10 15:38 # +1
Строго говоря циркумфлекс означает не просто предыдущий (родительский) коммит, а первый из предыдущих коммитов, что актуально при рассмотрении коммита-мержа. Можно написать HEAD^2 и это будет второй родительский коммит. Это работает именно если данный коммит является мержем нескольких других коммитов.

А вообще:
HEAD^ == HEAD^1 == HEAD~1

Или иными словами циркумфлекс идёт вширь, тильда — вглубь.
kstep 13.10.10 15:38 # +0
И вообще man git-rev-parse.
vkotovv 13.10.10 21:34 # +0
До этого поста не знал слово "Циркумфлекс"
kstep 13.10.10 22:08 # +1
Его ещё иногда называют «крышечка» и «карет».
Zereal 13.10.10 23:09 # +0
в оригинале кстати caret и есть:)
le087 13.10.10 15:41 # +0
Спасибо!

P.S. Добавил в избранное.
Zereal 13.10.10 15:57 # +0
если команда переводчиков будет не против, то может добавим в журнал?
Dem0n3D 13.10.10 18:10 # +1
Я не против.
razum2um 16.10.10 12:40 # +1
Открыл для себя git blame - только вчера искали виноватых...
Стыдно, но и про git instaweb --httpd apache2 не знал..

Вот только кто подскажет, что сделать чтобы оно так же легко как и после hg serve раздавало для clone и принимало коммиты?
Dem0n3D 16.10.10 17:22 # +1
git-daemon, в Ubuntu нужно ставить отдельно (git-daemon-run).
kstep 25.10.10 19:45 # +1
А ещё очень крута опция -S для git-log и git-diff:

1
2
3
4
5
6
7

$ git log --oneline -S"return" HEAD~2500..HEAD -- controllers/blog/blog.py
xxxxa5e New blogs tag filter
xxxxa48 Bug #xxx: blog & album controllers lock hooks
xxxx5d5 Bug #xxx fixed: additional checks in blogs controller
xxxxa5e removed purl validation handlers from controllers
 

Ищет все коммиты (опционально затрагивающие данный файл/файлы) в данном диапазоне, которые меняют строку с данной подстрокой.

В примере команда нашла все коммиты из последних 2500 коммитов, в которых менялась строка, содержащая "return", в файле controllers/blog/blog.py.

kstep 25.10.10 19:46 # +1
Да и про git-bisect не забывайте! Это моя любимая плюшка.

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 149)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 2959 из 222 городов)
            Топ пользователей Топ блогов

            Новенькие: jigglypuff, usr, Holeech, mvlbrn, arg0
            welinux.ru

            Смотреть видео онлайн

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн