Как работать с Git #1
Я работаю менеджером проектов и маркетёром-аналитиком. Но у меня есть хобби: я люблю программировать и верстать.
Совсем недавно я научился работать с Git. Я напишу несколько статей про, то как работать с системой контроля версий — «Git»
Git — мощная и сложная распределенная система контроля версий. Понимание всех возможностей git открывает для разработчика новые горизонты в управлении исходным кодом. Самый верный способ обучиться владению Git — испытать его своими руками.
0. Для начала установите Git-клиент
для Debian/Ubuntu
apt-get install git
1. Подготовка к работе
Установка имени и электронной почты
git config --global user.name "Your Name"
git config --global user.email "your_email@whatever.com"
2. Создание проекта
Сейчас мы научимся создавать git репозиторий с нуля.
Создайте страницу «Hello, World»
Начните работу в пустом рабочем каталоге с создания пустого каталога с именем «hello», затем войдите в него и создайте там файл с именем hello.html с таким содержанием.
Выполните:
mkdir hello
cd hello
touch hello.html
Файл: hello.html
Hello, World
Создайте репозиторий
Теперь у вас есть каталог с одним файлом. Чтобы создать git репозиторий из этого каталога, выполните команду git init.
Выполните:
git init
Результат:
$ git init
Инициализированный пустой репозиторий Git в /home/isaevdimka/PhpstormProjects/git_tutorial/work/hello/.git/
Добавьте страницу в репозиторий
Теперь давайте добавим в репозиторий страницу «Hello, World».
Выполните:
git add hello.html
git commit -m "First Commit"
Результат:
$ git commit -m "First Commit"
[master (root-commit) 79959ff] First Commit
1 file changed, 1 insertion(+)
create mode 100644 hello.html
4. Проверка состояния
Научимся проверять состояние репозитория
Проверьте состояние репозитория
Выполните:
git status
Результат:
$ git status
В ветке master
нечего фиксировать, рабочая директория пуста
Команда проверки состояния сообщит, что коммитить нечего. Это означает, что в репозитории хранится текущее состояние рабочего каталога, и нет никаких изменений, ожидающих записи.
Мы будем использовать команду git status, чтобы продолжать отслеживать состояние репозитория и рабочего каталога.
5. Внесение изменений
Сейчас научимся отслеживать состояние рабочего каталога
Измените страницу «Hello, World»
Добавим кое-какие HTML-теги к нашему приветствию. Измените содержимое файла на:
Файл: hello.html
<h1>Hello, World!</h1>
Проверьте состояние
Теперь проверьте состояние рабочего каталога.
Выполните:
git status
Результат:
$ git status
В ветке master
Changes not staged for commit:
(используйте "git add <file>..." чтобы обновить данные для закрепления)
(используйте "git checkout -- <file>..." чтобы отменить изменения в рабочей директории)
modified: hello.html
нет изменений, добавленных в коммит (используйте "git add" и/или "git commit -a")
Первое, что нужно заметить, это то, что git знает, что файл hello.html был изменен, но при этом эти изменения еще не зафиксированы в репозитории.
Также обратите внимание на то, что сообщение о состоянии дает вам подсказку о том, что нужно делать дальше. Если вы хотите добавить эти изменения в репозиторий, используйте команду git add. В противном случае используйте команду git сheckout для отмены изменений.
6. Индексация изменений
Сейчас научимся индексировать изменения для последующих коммитов
Добавьте изменения
Выполните:
git add hello.html
git status
Результат:
$ git status
В ветке master
Изменения для закрепления:
(используйте "git reset HEAD <file>..." чтобы убрать из буфера)
modified: hello.html
Изменения файла hello.html были проиндексированы. Это означает, что git теперь знает об изменении, но изменение пока не перманентно записано в репозиторий. Следующий коммит будет включать в себя проиндексированные изменения.
Если вы решили, что не хотите коммитить изменения, команда состояния напомнит вам о том, что с помощью команды git reset можно снять индексацию этих изменений.
7. Индексация и коммит
Отдельный шаг индексации в git позволяет вам продолжать вносить изменения в рабочий каталог, а затем, в момент, когда вы захотите взаимодействовать с версионным контролем, git позволит записать изменения в малых коммитах, которые фиксируют то, что вы сделали.
Предположим, что вы отредактировали три файла (a.html, b.html, and c.html). Теперь вы хотите закоммитить все изменения, при этом чтобы изменения в a.html и b.html были одним коммитом, в то время как изменения в c.html логически не связаны с первыми двумя файлами и должны идти отдельным коммитом.
В теории, вы можете сделать следующее:
git add a.html
git add b.html
git commit -m "Changes for a and b"
git add c.html
git commit -m "Unrelated change to c"
Разделяя индексацию и коммит, вы имеете возможность с легкостью настроить, что идет в какой коммит.
8. Коммит изменений
Сейчас научимся коммитить изменения в репозиторий
Закоммитьте изменения
Достаточно об индексации. Давайте сделаем коммит того, что мы проиндексировали, в репозиторий.
Когда вы ранее использовали git commit для коммита первоначальной версии файла hello.html в репозиторий, вы включили метку -m, которая делает комментарий в командной строке. Команда commit позволит вам интерактивно редактировать комментарии для коммита. Теперь давайте это проверим.
Если вы опустите метку -m из командной строки, git перенесет вас в редактор по вашему выбору.
Сделайте коммит сейчас и проверьте состояние.
Выполните:
git commit
Результат:
$ git commit
В ветке master
Changes not staged for commit:
modified: hello.html
нет изменений, добавленных в коммит
Когда вы ранее использовали git commit для коммита первоначальной версии файла hello.html в репозиторий, вы включили метку -m, которая делает комментарий в командной строке. Команда commit позволит вам интерактивно редактировать комментарии для коммита. Теперь давайте это проверим.
Если вы опустите метку -m из командной строки, git перенесет вас в редактор по вашему выбору.
Сделайте коммит сейчас и проверьте состояние.
Выполните:
git commit
Результат:
$ git commit
В ветке master
Changes not staged for commit:
modified: hello.html
нет изменений, добавленных в коммит
Выполните:
git commit -a
В первой строке введите комментарий: «Added h1 tag». Сохраните файл и выйдите из редактора. Вы увидите…
Результат:
$ git commit -a
[master 807fc00] Added h1 tag
1 file changed, 1 insertion(+), 1 deletion(-)
Проверьте состояние
В конце давайте еще раз проверим состояние.
Выполните:
git status
Результат:
$ git status
В ветке master
нечего фиксировать, рабочая директория пуста
Рабочий каталог чистый, можете продолжить работу.
9. Изменения, а не файлы
Цели
Понять, что git работает с изменениями, а не файлами.
Большинство систем версионного контроля работают с файлами. Вы добавляете файл в версионный контроль, а система отслеживает изменения файла с этого момента.
Git фокусируется на изменениях в файле, а не самом файле. Когда вы осуществляете команду git add file, вы не говорите git добавить файл в репозиторий. Скорее вы говорите, что git надо отметить текущее состояние файла, коммит которого будет произведен позже.
Мы попытаемся исследовать эту разницу в следующем посте…