Продолжаю открывать для себя возможности системы Git и сервиса GitHub.
Уже сейчас, обладая минимальными базовыми знаниями Git и владея учетной записью на сервере GitHub, я не представляю, как я мог жить раньше без обоих этих вещей. Это действительно удобно и надежно!
Благодаря им я знаю, что у меня никогда и ничто не потеряется; и все, что нужно - у меня всегда под рукой. На работе поработал над чем-либо - отправил на GitHub; домой пришел - “стянул” наработки с GitHub и продолжил работу с прерванного места.
Вот на последнем я хотел бы остановиться подробнее. Конечно, веб-разработчик, давно и хорошо знакомый с Git и GitHub, может только улыбнуться насчет того, чем я собираюсь поделиться. Настолько все это просто и понятно. Но это просто и понятно для него, опытного web-разработчика. А для начинающего веб-программиста - это новое и неизведанное. Впрочем, достаточно лирики - переходим к практике.
GitHub - команда push
В предыдущей статье я познакомился с возможностью создания репозитория на сервисе GitHub. И возможностью клонирования этого репозитория на локальную машину - “GitHub и Git - создание и работа с репозиторием”.
Напомню, что в том примере было произведено клонирование репозитория с помощью команды:
$ git clone git@github.com:gearmobile/arbeit.git
Другими словами, было произведено копирование существующего репозитория с удаленного сервера на локальную машину. Причем, копирование как есть - полностью весь репозиторий, со всеми его файлами, коммитами, индексами и тому подобным.
После внесений изменений в локальный репозиторий - индексации и фиксации - необходимо было отправить произведенные изменения на удаленный сервер, на GitHub.
Для этой цели существует (и я ею воспользовался) команда push
(отправить). К примеру, давайте я внесу еще кое-какие изменения в
локальном репозитории, затем проиндексирую и зафиксирую их, а затем
отправлю на GitHub:
$ git add .
$ git commit -m Continue write article about push and pull in GitHub
[master 5af3abc] Continue write article about push and pull in GitHub
1 file changed, 18 insertions(+)
$ git status
On branch master
Your branch is ahead of origin/master by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working directory clean
$ git push
...
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 1.65 KiB | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
To git@github.com:semenencko/articles
022b756..5af3abc master -> master
Вот - все наработки, которые я сделал на домашнем компьютере, оказались с считанные секунды помещенными на сервере GitHub, под бдительным оком Git.
GitHub - команда pull
Продолжим логическую картину моего рабочего процесса (workflow). На
следующий день я прихожу на работу и у меня есть время и возможность
поработать над своим проектом. Естественно, я хочу продолжить с того
места, на котором остановился дома. Для этого я воспользуюсь командой pull
, чтобы “стянуть” с GitHub последние изменения.
В данном случае команда pull
будет выглядеть так:
В выводе консоли (на картинке) видно, что было произведено добавление одного измененного файла по имени README.md, в котором были добавлены две строки.
Обратите внимание на разницу между командами clone
и pull
в данном случае. Команда clone
копирует весь репозиторий целиком, как есть - со всеми его файлами. Команда pull
копирует разницу между удаленным и локальным репозиторием. Эту разницу можно назвать дельта или patch.
В результате вышеприведенной команды в считанные секунды я получаю на рабочем компьютере точную копию того проекта, над которым работал дома. И могу продолжать с того места, на котором остановился.
GitHub - команда fetch
Существует разновидность команды pull
- это команда fetch
. И одна, и вторая команда выполняют одинаковые задачи - получение patch удаленного репозитория. Но делают они это по разному.
Команда pull
получает patch репозитория и автоматически
производит слияние удаленной и локальной ветвей репозитория. Если
произойдет конфликт слияния, то только в этом случае слияния не
произойдет и решать конфликт придется вручную.
Команда fetch
также производит получение patch
удаленного репозитория. Но при этом автоматического слияния ветвей
удаленного и локального репозиториев не происходит:
На картинке выше показано, что была выполнена команда git fetch
после того, как на стороне сервиса GitHub было произведено редактирование файла README.md. Однако, последующая команда git status
показала, что изменения есть, но они не слиты с локальной ветвью репозитория. И порекомендовала выполнить команду git pull
, чтобы произвести такое слияние.
Помимо этого, имеются изменения в локальном репозитории, которые не проиндексированы и не зафиксированы. Что же, исправляю ситуацию - последовательно ввожу команды:
$ git pull
$ git add .
$ git commit -m Added fetch image
$ git push
Производить слияние и разрешение конфликтов при слиянии я еще не
умею, поэтому вопрос, как произвести слияние ветвей после команды git fetch
я опущу в данной статье.
Вернувшись к вышесказанному, можно сделать вывод, что команда pull
более универсальная, нежели команда fetch
. Именно команду pull
имеет смысл применять в практической работе.
Комментарии