Азы работы с git или как скачать себе livestreet с github
В этой статье я расскажу про азы использования git'a на примере установки livestreet с github.
У нас будет основной репозиторий на сервере в дев папке и версии проекта на локальных машиных у нескольких разработчиков.
Почему так?
Наш проект не открытый, поэтому бесплатно его на github выкладывать не получится. Поэтому принято решение держать общий репозиторий проекта на сервере, доступном всем работающим над проектом программистам.
Прежде всего ставим сам git (и на сервер и на машины разработчиков), это команда:
Плюс очень полезной для просмотров коммитов и веток будет программа tig:
Перейдем к установке livestreet с github'а на наш сервер (лично у нас есть отдельная дев папка со своим поддоменом).
Теперь в папке dev мы можем ввести команду tig и посмотреть историю коммитов в livestreet и имена их авторов.
В git-папке есть файл .gitignore — в нем указаны пути к папкам и файлам, изменения в которых git'ом будут игнорироваться, соответственно не попадут в дальнейшие коммиты.
На локальной машине делаем себе копию этого репозитория.
Я хочу, чтобы в ветке master у меня всегда лежала последняя ревизия livestreet'а с gitgub'а, а свой проект я бы вел в отдельной ветке.
Поэтому от ветки 'master' я создаю ветку 'steampunker', на локальной машине пишу:
Можем набрать
Дальше надо на сервер передать, что у нас есть новая ветка. Пишем:
Их может быть несколько.
Теперь на сервере у нас есть две ветки. Чтобы переключиться на ветку 'steampunker' делаем на сервере:
Просто ради интереса, давайте подключим livestreet к локальному компу напрямую с github'а. Мне лично такой функционал не нужен, т.к. в нашем случае все обновления версий livestreet'а будут проходить через наш общий с другими программистами сервер.
Итак, на локальной машине пишем:
git branch -a покажет, что удаленная livestr пустая.
Особенность git в том, что он не знает, какие изменения произошли в репозиториях, пока мы не спросим с репозиториев эту информацию.
После создания ссылки livestr у нас как раз такая ситуация — наш локальный git не знает ничего о последних изменениях в репозитории.
Надо их запросить.
Для этого используем команду:
Если вы работаете командой над одной веткой с разных машин, не забывайте перед push'ем делать
Набираем
Попробуем коммитеть.
На локальной машине меняем что-либо.
Пишем
Там файлы могут быть трех типов:
Changed but not updated — файлы, которые были изменены, но не дабавлены к апдейту. При простом коммите эти изменения учтены не будут, однако будут учтены при
Changes to be committed — файлы, которые были изменены и добавлены к апдейту. При коммите их изменения войдут в коммит.
Untracked files — файлы, которые были созданы. Чтобы они попали в коммит их надо добавить командой git add.
Посмотреть изменения до коммита можно через
Коммитеть можно условно двумя способами:
1. Сначал все нужные файлы добавлять через
2. Если не создавались новые файлы, а только менялись уже существующие, можно обойтись git commit -a
Итак, мы закоммители и можем увидеть наш коммит через tig
Давайте запушим его на сервер:
Еще парочка полезных команд:
На этот раз все. Дальше мне предстоит переводить свой проект с SVN на git, соответственно постараюсь описать, как это можно сделать наиболее безболезненно.
П. С. Данная заметка писалась для себя, чтоб не забыть и закрепить основные моменты работы с git'ом. Но по просьбе была целиком размещена тут.
П. П. С. Задавайте вопросы, если есть, постараюсь ответить. Сам я изучаю git и пока не могу себя назвать guru. Так что буду рад, если к теме присоединяться мастера git'a.
UPD Комментарий от verdet , потерявшийся при переносе поста:
У нас будет основной репозиторий на сервере в дев папке и версии проекта на локальных машиных у нескольких разработчиков.
Почему так?
Наш проект не открытый, поэтому бесплатно его на 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 commit2. Если не создавались новые файлы, а только менялись уже существующие, можно обойтись git commit -a
Итак, мы закоммители и можем увидеть наш коммит через tig
Давайте запушим его на сервер:
git push origin steampunker
и посмотрим через tig
что получилосьЕще парочка полезных команд:
git pull origin steampunker
забрать изменения с репозитория себе в веткуgit checkout -b origin/имя_ветки имя_ветки
создать у себя локально ветку, взяв за основу ветку с репозитория origingit 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 комментариев
githowto.com
Pull request'ы на GitHub или Как мне внести изменения в чужой проект
Git Wizardry