9. Зміни, а не файли

Цілі

  • Зрозуміти, що git працює зі змінами, а не файлами.

Більшість систем версіонного контролю працюють з файлами. Ви додаєте файл в версіонний контроль і з цього моменту система відслідковує зміни файлу.

Git фокусується на змінах у файлі, а не на самому файлі. Коли ви виконуєте команду git add file, ви не кажете git додати файл у репозиторій. Скоріше ви кажете, що git має помітити поточний стан файлу, коміт якого буде виконано пізніше.

Ми спробуємо дослідити цю різницю в цьому уроці.

01 Перша зміна: Додайте стандартні теги сторінок

Змініть сторінку «Hello, World» так, щоб вона містила стандартні теги <html> й <body>.

Файл: hello.html

<html>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

02 Додайте ці зміни

Тепер додайте ці зміни в індекс git.

Виконайте:

git add hello.html

03 Друга зміна: Додайте заголовок HTML

Тепер додайте заголовок HTML (секцію <head>) до сторінки «Hello, World».

Файл: hello.html

<html>
  <head>
  </head>
  <body>
    <h1>Hello, World!</h1>
  </body>
</html>

04 Перевірте поточний статус

Виконайте:

git status

Ви побачите…

Результат:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.html
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   hello.html
#

Зверніть увагу, що hello.html згадано двічі. Перша зміна (додавання стандартних тегів) проіндексирована і готова до коміту. Друга зміна (додавання заголовків HTML) є непроіндексована. Якщо б ви робили коміт зараз, заголовки не було б збережено у репозиторій.

Давайте перовіримо.

05 Коміт

Зробіть коміт проіндексованих змін (значення за замовчуванням), а потім ще раз перевірте стан.

Виконайте:

git commit -m "Added standard HTML page tags"
git status

Ви побачите…

Результат:

$ git commit -m "Added standard HTML page tags"
[master 8c32287] Added standard HTML page tags
 1 files changed, 3 insertions(+), 1 deletions(-)
$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   hello.html
#
no changes added to commit (use "git add" and/or "git commit -a")

Стан команди говорить про те, що hello.html має незафіксовані зміни, але вже не в буферній зоні.

06 Додайте другу зміну

Тепер додайте другу зміну в індекс, потім перевірте стан за допомогою команд git status.

Виконайте:

git add .
git status

Примітка: У якості файлу для додавання, ми використовували поточний каталог («.»). Це самий коротший і зручний шлях для додавання всіх змін у файли поточного каталогу та його підкаталогів. Але оскільки git додає все, не зайвим буде перевірити стан перед запуском add, просто щоб впевнетися, що ви не додали якийсь файл, який не треба було додавати.

Я хотів показати вам трюк з add, надалі ми будемо про всяк випадок продовжувати додавати явні файли.

Ви побачите…

Результат:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   hello.html
#

Другу зміну було проіндексовано й приготовлено до коміту.

07 Зробіть коміт другої зміни

Виконайте:

git commit -m "Added HTML header"