Азы работы с git или как скачать себе livestreet с github

В этой статье я расскажу про азы использования git'a на примере установки livestreet с github.
У нас будет основной репозиторий на сервере в дев папке и версии проекта на локальных машиных у нескольких разработчиков.
Почему так?
Наш проект не открытый, поэтому бесплатно его на github выкладывать не получится. Поэтому принято решение держать общий репозиторий проекта на сервере, доступном всем работающим над проектом программистам.

Прежде всего ставим сам git (и на сервер и на машины разработчиков), это команда:
sudo apt-get install git-core


Плюс очень полезной для просмотров коммитов и веток будет программа tig:
sudo apt-get install tig


Перейдем к установке livestreet с github'а на наш сервер (лично у нас есть отдельная дев папка со своим поддоменом).
git clone https://github.com/livestreet/livestreet dev
git clone создает git-папку (имя папки dev), и копирует туда livestreet с github'а.

Теперь в папке dev мы можем ввести команду tig и посмотреть историю коммитов в livestreet и имена их авторов.

В git-папке есть файл .gitignore — в нем указаны пути к папкам и файлам, изменения в которых git'ом будут игнорироваться, соответственно не попадут в дальнейшие коммиты.

На локальной машине делаем себе копию этого репозитория.
git clone ssh://user_name@host/var/www/steampunker.ru/dev steampunker.ru


Я хочу, чтобы в ветке master у меня всегда лежала последняя ревизия livestreet'а с gitgub'а, а свой проект я бы вел в отдельной ветке.
Поэтому от ветки 'master' я создаю ветку 'steampunker', на локальной машине пишу:
git checkout -b steampunker
Это значит, от текущей ветки создать новую ветку (-b) с именем steampunker и переключиться на неё (checkout)

Можем набрать
git branch
и посмотреть наши локальные ветки.

Дальше надо на сервер передать, что у нас есть новая ветка. Пишем:
git push origin steampunker
origin — название удаленного репозитория у нас на машине.
Их может быть несколько.


Теперь на сервере у нас есть две ветки. Чтобы переключиться на ветку 'steampunker' делаем на сервере:
git checkout stampunker
Обратно на 'master'
git checkout mster


Просто ради интереса, давайте подключим livestreet к локальному компу напрямую с github'а. Мне лично такой функционал не нужен, т.к. в нашем случае все обновления версий livestreet'а будут проходить через наш общий с другими программистами сервер.
Итак, на локальной машине пишем:
git remote add livestr git://github.com/livestreet/livestreet.git
Создаем ссылку на новый репозиторий, которая ведет на git://github.com/livestreet/livestreet.git и называется livestr. С помощью
git remote -v
можем посмотреть список подключенных репозиториев.


git branch -a покажет, что удаленная livestr пустая.
Особенность git в том, что он не знает, какие изменения произошли в репозиториях, пока мы не спросим с репозиториев эту информацию.
После создания ссылки livestr у нас как раз такая ситуация — наш локальный git не знает ничего о последних изменениях в репозитории.
Надо их запросить.
Для этого используем команду:
git fetch livestr

Если вы работаете командой над одной веткой с разных машин, не забывайте перед push'ем делать
git fetch имя_репозитория
и
git pull
в текущей ветке.

Набираем
git branch -a
и смотрим все ветки, включая ветки удаленных репозиториев.

Попробуем коммитеть.
На локальной машине меняем что-либо.
Пишем
git status

Там файлы могут быть трех типов:
Changed but not updated — файлы, которые были изменены, но не дабавлены к апдейту. При простом коммите эти изменения учтены не будут, однако будут учтены при
git commit -a
.
Changes to be committed — файлы, которые были изменены и добавлены к апдейту. При коммите их изменения войдут в коммит.
Untracked files — файлы, которые были созданы. Чтобы они попали в коммит их надо добавить командой git add.

Посмотреть изменения до коммита можно через
git diff


Коммитеть можно условно двумя способами:
1. Сначал все нужные файлы добавлять через
git add имя_файла
, потом делать git commit
2. Если не создавались новые файлы, а только менялись уже существующие, можно обойтись git commit -a

Итак, мы закоммители и можем увидеть наш коммит через tig

Давайте запушим его на сервер:
git push origin steampunker
и посмотрим через
tig
что получилось

Еще парочка полезных команд:
git pull origin steampunker
забрать изменения с репозитория себе в ветку

git checkout -b origin/имя_ветки имя_ветки
создать у себя локально ветку, взяв за основу ветку с репозитория origin

git help
без комментариев

На этот раз все. Дальше мне предстоит переводить свой проект с SVN на git, соответственно постараюсь описать, как это можно сделать наиболее безболезненно.

П. С. Данная заметка писалась для себя, чтоб не забыть и закрепить основные моменты работы с git'ом. Но по просьбе была целиком размещена тут.
П. П. С. Задавайте вопросы, если есть, постараюсь ответить. Сам я изучаю git и пока не могу себя назвать guru. Так что буду рад, если к теме присоединяться мастера git'a.

UPD Комментарий от verdet , потерявшийся при переносе поста:
Для удобства работы с git'ом можно еще создать алиасы и подсветку:
habrahabr.ru/blogs/Git/78058/
Можно еще почитать книжку progit.org/book/ru/ и на самом GitHub очень хороший хелпник: help.github.com/

7 комментариев

avatar
Перенес
avatar
Еще один неплохой сайт по изучению GIT
githowto.com
avatar
я оставлю только 2 ссылки, которых хватит с головой что бы разобраться во всех аспектах git'a и github'a
Pull request'ы на GitHub или Как мне внести изменения в чужой проект
Git Wizardry
avatar
в обоих случаях Страница не найдена (404-я ошибка) :(
avatar
хабр сегодня не в адеквате из-за открытия свободной регистрации
avatar
Не в регистрации дело, они еще на jQ перешли. Сейчас там вообще хаос.
avatar
Спасибо, почитаем! А вот как деплоить из гита и гитхаба? Никак не могу такую инфу найти в инете:( Люди, как вы деплоите обычно?
  • joyd
  • 0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.