В этой статье я поясню как осуществить первые шаги к работе с Git на Ubuntu. Ниже на изображении показано взаимодействие локальной копии репозитория с удаленной при использовании тех или иных команд.
Первым делом установим git в свою систему
$ sudo apt-get install git-core git-gui git-doc
Теперь пришло время сгенерировать ssh ключ, а после этого персонализировать свой git.
$ ssh-keygen -t rsa -C "your_email@gmail.com" Generating public/private rsa key pair. Enter file in which to save the key (/home/username/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/username/.ssh/id_rsa. Your public key has been saved in /home/username/.ssh/id_rsa.pub. The key fingerprint is: 43:a2:d2:a5:c3:bb:dd:17:43:ad:8a:93:b2:a2:9b:5b your_email@gmail.com The key's randomart image is: +--[ RSA 2048]----+> | .. | | + .. | | + o ++ | | .o ++ ..| | R .=o + +| | ...o * | | .. + .| | ... . | | E+o | +-----------------+ $ git config --global user.name "Firstname Lastname" $ git config --global user.email "your_email@gmail.com"
Следующим шагом будет добавление нашего закрытого ключа в аккаунт на Github для авторизации и работой со своими репозиториями. Содержимое файла /home/username/.ssh/id_rsa необходимо добавить в список авторизированых ключей в настройках своего аккаунта Github на вкладке SSH Keys.
Теперь можно пробовать подключатся к Github и произвести инициализацию git’a в текущей директории.
$ ssh -T git@github.com $ git init
Если все удалось — клонируем на локальную машину репозиторий (ссылка для клонирования находится в правой боковой панели на главной странице репозитория «SSH clone URL»)
Учтите что при клонировании репозитория на локальную машину, в той директории в которой вы сейчас находитесь и будет создана поддиректория с данным репозиторием, потому если вы сейчас находитесь в каком то /etc/ntpd/ или /home/username/.ssh/ — перейдите сразу в /home/username/ для удобства.
git clone git@github.com:username/TEST-REPO.git
Теперь перейдем в папку нашей локальной копии репозиротия, отдкуда мы уже сможем полноценно работать с git.
cd TEST-REPO
Можно посмотреть статус репозитория командой
git status
Вот собственно и все, работу мы начали, а далее дело опыта. Приведу несколько основных команд для работы с git (который собственно и изображены на картинке в начале поста)
Допустим мы внесли правки в файлах проекта и теперь хотим подтвердить их, этим самым внести в репозиторий. Выполняем коммит.
$ git commit -m "Произвольный комментарий о внесенных правках в проект"
Локальных коммит сделали, а теперь необходимо отправить его в удаленный репозиторий (команда push)
$git push
Для того что бы получить обновления файлов внесенные например вашим коллегой в репозиторий (или вами же, на другом ПК) используем pull.
$git pull
Создадим ветку (branch). Используется для того, что бы вести разработку в dev ветке, при этом не заливая непроверенный код в master ветку.
$ git branch dev
Переключимся на ветку dev.
$ git checkout dev
Сольем в текущую ветку, все содержимое ветки master (и начнем работать с кодом начиная с последней версии но в отдельной ветке, а когда разработка будет завершена и код оттестирован — мы зальем содержимое ветки dev обратно в master.
$ git merge master
Вот собственно и все. Ниже приведу еще несколько команд, без подробных пояснений.
Отмена локальных изменений
$ git checkout .
Добавить в индекс
$ git add .
Удалить из индекса
$ git reset HEAD^
Откатится до определенного коммита
$ git reset --hard b05a808
Переименовать вертку (branch)
$ git branch -m new-branch-name old-branch-name
Удалить ветку
$ git branch -d
Показать все бранчи
git branch -a
Так же, хочу отметить. При разработке на 2 ПК (один Windows, другой Linux или MacOS) — появляется проблема с переносами ‘CRLF’, и сделать чистый pull не всегда удается, git ругается на то, что локальные файлы были изменены и Pull затрет эти изменения, просит выполнить git stash. Так вот, можно выполнять git stash перед каждым pull’ом, а можно воспользоватся следующей командой.
git config --global core.safecrlf true
Если после этого возникнут проблемы с push операциями — верните все обратно, сменив в команде значение true на false и ищите другое решение.