Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Фонов А. Д. Группа: А-01-22 Проверил: Козлюк Д. А. Примечание: работа выполнялась на macOS. 1. Создал на рабочем столе каталог lab02. Перешел к папке через cd: (base) aleksandr@MacBook-Pro-Aleksandr ~ % cd /Users/aleksandr/Desktop/labs/lab02 2. Просмотрел файлы в рабочем каталоге можно командой "ls" --- пусто: (base) aleksandr@MacBook-Pro-Aleksandr lab02 % ls (base) aleksandr@MacBook-Pro-Aleksandr lab02 % 3. Создал каталоги Алисы и Боба, создал каталог "project", изучил команду "cd" в процессе: (base) aleksandr@MacBook-Pro-Aleksandr lab02 % mkdir alice (base) aleksandr@MacBook-Pro-Aleksandr lab02 % mkdir bob (base) aleksandr@MacBook-Pro-Aleksandr lab02 % cd bob (base) aleksandr@MacBook-Pro-Aleksandr bob % cd .. (base) aleksandr@MacBook-Pro-Aleksandr lab02 % cd alice (base) aleksandr@MacBook-Pro-Aleksandr alice % mkdir project (base) aleksandr@MacBook-Pro-Aleksandr alice % ls project (base) aleksandr@MacBook-Pro-Aleksandr alice % cd project 4. Инициализировал репозитарий: (base) aleksandr@MacBook-Pro-Aleksandr project % git init hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in /Users/aleksandr/Desktop/labs/lab02/alice/project/.git 5. Переименовал ветку на main: (base) aleksandr@MacBook-Pro-Aleksandr project % git branch -m 'main' 6. Настроил репозиторий Алисы (base) aleksandr@MacBook-Pro-Aleksandr project % git config user.name 'Alice (FonovAD)' aleksandr@MacBook-Pro-Aleksandr project % git config user.email 'fonovad@mpei.ru' 7. Создал файлы проекта: aleksandr@MacBook-Pro-Aleksandr project % ls -a . .. .git main.cpp project.cbp 8. Занесение файлов под контроль версий: (base) aleksandr@MacBook-Pro-Aleksandr project % git status On branch main No commits yet Untracked files: (use "git add ..." to include in what will be committed) main.cpp project.cbp nothing added to commit but untracked files present (use "git add" to track) (base) aleksandr@MacBook-Pro-Aleksandr project % git add main.cpp (base) aleksandr@MacBook-Pro-Aleksandr project % git status On branch main No commits yet Changes to be committed: (use "git rm --cached ..." to unstage) new file: main.cpp Untracked files: (use "git add ..." to include in what will be committed) project.cbp После добавления файла в индекс, git указывает этот файл в "Изменения, которые необходимо внести:" project.cbp остается неотслеживаемым. (base) aleksandr@MacBook-Pro-Aleksandr project % git commit -m 'code: заготовка программы' [main (root-commit) 7fe833c] code: заготовка программы 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 main.cpp 9.Добавление изменений в main и коммит их: (base) aleksandr@MacBook-Pro-Aleksandr project % git status On branch main Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: main.cpp Untracked files: (use "git add ..." to include in what will be committed) project.cbp no changes added to commit (use "git add" and/or "git commit -a") (base) aleksandr@MacBook-Pro-Aleksandr project % git add main.cpp (base) aleksandr@MacBook-Pro-Aleksandr project % git commit -m "..." [main 4e0ecf8] ... 1 file changed, 10 insertions(+) 10. Добавление изменений в main и коммит: (base) aleksandr@MacBook-Pro-Aleksandr project % git status On branch main Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore ..." to discard changes in working directory) modified: main.cpp Untracked files: (use "git add ..." to include in what will be committed) .vscode/ main.dSYM/ project.cbp no changes added to commit (use "git add" and/or "git commit -a") (base) aleksandr@MacBook-Pro-Aleksandr project % git commit -a -m "..." [main fb1c217] ... 1 file changed, 3 insertions(+), 1 deletion(-) 11. Игнорирование файлов. Создал папку bin и файл .gitignore % git status On branch main Untracked files: (use "git add ..." to include in what will be committed) .DS_Store .gitignore .vscode/ main main.dSYM/ project.cbp nothing added to commit but untracked files present (use "git add" to track) Папка bin не отображается 12. Работа с журналом репозитория: aleksandr@MacBook-Pro-Aleksandr project % git log commit fb1c2170039ff464c2f689a712738532a0561765 (HEAD -> main) Author: Alice (FonovAD) Date: Mon Mar 13 10:22:48 2023 +0300 ... commit 4e0ecf82b57d65e924181ecb02c75e61c7a0dc4f Author: Alice (FonovAD) Date: Mon Mar 13 10:16:45 2023 +0300 ... commit 7fe833c324315f8a864a948f882f89764df0ab38 Author: Alice (FonovAD) Date: Mon Mar 13 10:08:12 2023 +0300 code: заготовка программы (base) aleksandr@MacBook-Pro-Aleksandr project % git log --stat commit fb1c2170039ff464c2f689a712738532a0561765 (HEAD -> main) Author: Alice (FonovAD) Date: Mon Mar 13 10:22:48 2023 +0300 ... main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 4e0ecf82b57d65e924181ecb02c75e61c7a0dc4f Author: Alice (FonovAD) Date: Mon Mar 13 10:16:45 2023 +0300 ... main.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 7fe833c324315f8a864a948f882f89764df0ab38 Author: Alice (FonovAD) Date: Mon Mar 13 10:08:12 2023 +0300 code: заготовка программы main.cpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) Команда git log --stat показывает количество добавленных и удаленных строк, дату изменения и автора. Так же показывает сколько и какие файлы изменены. 12. Просмотр предпоследнего коммита: (base) aleksandr@MacBook-Pro-Aleksandr project % git show 4e0ecf8 commit 4e0ecf82b57d65e924181ecb02c75e61c7a0dc4f Author: Alice (FonovAD) Date: Mon Mar 13 10:16:45 2023 +0300 ... diff --git a/main.cpp b/main.cpp index e69de29..eb7dcff 100644 --- a/main.cpp +++ b/main.cpp @@ -0,0 +1,10 @@ +#include + +using namespase std; + +int main(){ + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + return 0; +} 13. Просмотр изменений (base) aleksandr@MacBook-Pro-Aleksandr project % git diff diff --git a/main.cpp b/main.cpp index 6b7cc10..f6ba761 100644 --- a/main.cpp +++ b/main.cpp @@ -6,7 +6,8 @@ int main(){ cout << "Enter A and B: "; int a, b; cin >> a >> b; - return 0; cout << "A + B = " << a + b << '\n' << "A - B = " << a - b << '\n'; + cout << 1; + return 0; } Команда показывает изменённый файл и часть кода, которая претерпела изменения. Изменения между самым первым коммитом и коммитом, добавляющим вывод разности: (base) aleksandr@MacBook-Pro-Aleksandr project % git diff 7fe833c fb1c217 diff --git a/main.cpp b/main.cpp index e69de29..6b7cc10 100644 --- a/main.cpp +++ b/main.cpp @@ -0,0 +1,12 @@ +#include + +using namespace std; + +int main(){ + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + return 0; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; +} 14. Откат изменений: (base) aleksandr@MacBook-Pro-Aleksandr project % git reset --hard HEAD~1 HEAD is now at fb1c217 ... (base) aleksandr@MacBook-Pro-Aleksandr project % git checkout HEAD -- main.cpp 15. Настройка SSH (base) aleksandr@MacBook-Pro-Aleksandr project % ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/aleksandr/.ssh/id_rsa): Created directory '/Users/aleksandr/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /Users/aleksandr/.ssh/id_rsa Your public key has been saved in /Users/aleksandr/.ssh/id_rsa.pub The key fingerprint is: SHA256:BSL8yEn4NZB7RQ7Xgxh8rqgcueObtkRui6QEWHFWUxo aleksandr@MacBook-Pro-Aleksandr.local The key's randomart image is: +---[RSA 3072]----+ | .o==E==o | | .++.=O+.o | | .+ *.=. .. | |.. * o .. | |o .. o .S | |.oo . . | | +++ | |++*o | |oo*+ | +----[SHA256]-----+ (base) aleksandr@MacBook-Pro-Aleksandr project % eval `ssh-agent -s` Agent pid 91639 (base) aleksandr@MacBook-Pro-Aleksandr project % ssh-add Enter passphrase for /Users/aleksandr/.ssh/id_rsa: Identity added: /Users/aleksandr/.ssh/id_rsa (aleksandr@MacBook-Pro-Aleksandr.local) (base) aleksandr@MacBook-Pro-Aleksandr project % cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCqTjyqz+vTiJ3yTilqhd9fRbX92JRUo7UjqsTJZRtXzTiKxidi5FrYxTPFxcvZQhwWLYoUXmcfp2CCjGT51NA73ISF94brAJF9ZmvohDYjJrQQvvy9wYQa2+WO3lR/9L/v7PZCN++kR2P/3H+ptj69NKNaMQvR7tA4kRGyHzqDm2cvqszVyRQOfajqerFUVJN9V6odElt0mjOoSU4Xz7RkzxOB33ChPUDTHTxoGXCCsyOn/vxOzFJVXsa5tULKqCqTIFbYfnGraPbTf7MosjqLQ7tWpRapZnpjbwZKxA+07CCqpf+vlp0FerzQbU9ppJWMA1uP8jIwN3bAOVQRHHAzC6ASUt2pUrrX17eJdl4uFI5vw+z/HFO/LSbV6aVCLGS442gMpcuSyyHiMi8oaxqACpSKTFsQ0hAyicJ6DcW/4gxK7dptUo3iZ20/PAyEZDWiVY/W9Mptez6/Dh17oLAcXlR2EVVpeobEsuM8tOiazo3E5fWOSVaODrW+uYHGju0= aleksandr@MacBook-Pro-Aleksandr.local 16. Отправка проекта на сервер: Создал проект cs-lab02 на http://uit.mpei.ru Ввел ключ SSH, выполнил команды (base) aleksandr@MacBook-Pro-Aleksandr project % git remote add origin git@uit.mpei.ru:Fonov_Alexandr/cs-lab02.git (base) aleksandr@MacBook-Pro-Aleksandr project % git push -u origin main Enumerating objects: 9, done. Counting objects: 100% (9/9), done. Delta compression using up to 8 threads Compressing objects: 100% (5/5), done. Writing objects: 100% (9/9), 818 bytes | 818.00 KiB/s, done. Total 9 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:Fonov_Alexandr/cs-lab02.git * [new branch] main -> main Branch 'main' set up to track remote branch 'main' from 'origin'. 17. Получение проекта с сервера Создал папку project в папку bob, инициализоровал git. (base) aleksandr@MacBook-Pro-Aleksandr project % git clone git@uit.mpei.ru:Fonov_Alexandr/cs-lab02.git /Users/aleksandr/Desktop/labs/lab02/bob/project Cloning into '/Users/aleksandr/Desktop/labs/lab02/bob/project'... remote: Enumerating objects: 9, done. remote: Counting objects: 100% (9/9), done. remote: Compressing objects: 100% (5/5), done. remote: Total 9 (delta 1), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (9/9), done. Resolving deltas: 100% (1/1), done. В папке project появился файл main.cpp (base) aleksandr@MacBook-Pro-Aleksandr project % git config user.name 'BOB (FonovAD)' (base) aleksandr@MacBook-Pro-Aleksandr project % git config user.email 'fonovad@mpei.ru' (base) aleksandr@MacBook-Pro-Aleksandr project % git log --stat commit 23bf55b7deae6431b3923b87827251bdc4fcab85 (HEAD -> main) Author: BOB (FonovAD) Date: Mon Mar 13 11:40:21 2023 +0300 bob`s commit main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit fb1c2170039ff464c2f689a712738532a0561765 (origin/main, origin/HEAD) Author: Alice (FonovAD) Date: Mon Mar 13 10:22:48 2023 +0300 ... main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 4e0ecf82b57d65e924181ecb02c75e61c7a0dc4f Author: Alice (FonovAD) Date: Mon Mar 13 10:16:45 2023 +0300 ... (base) aleksandr@MacBook-Pro-Aleksandr project % git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 8 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 324 bytes | 324.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:Fonov_Alexandr/cs-lab02.git fb1c217..23bf55b main -> main (base) aleksandr@MacBook-Pro-Aleksandr project % git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 304 bytes | 101.00 KiB/s, done. From uit.mpei.ru:Fonov_Alexandr/cs-lab02 fb1c217..23bf55b main -> origin/main (base) aleksandr@MacBook-Pro-Aleksandr project % git log --oneline --decorate --all --graph * 23bf55b (origin/main) bob`s commit * fb1c217 (HEAD -> main) ... * 4e0ecf8 ... * 7fe833c code: заготовка программы (base) aleksandr@MacBook-Pro-Aleksandr project % git pull --ff-only Updating fb1c217..23bf55b Fast-forward main.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 18. Добавление на машину Alice деления: (base) aleksandr@MacBook-Pro-Aleksandr project % git add main.cpp (base) aleksandr@MacBook-Pro-Aleksandr project % git commit -m 'add division' (base) aleksandr@MacBook-Pro-Aleksandr project % git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 8 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 315 bytes | 315.00 KiB/s, done. Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 remote: . Processing 1 references remote: Processed 1 references in total To uit.mpei.ru:Fonov_Alexandr/cs-lab02.git 23bf55b..1602e9b main -> main (base) aleksandr@MacBook-Pro-Aleksandr project % git fetch remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), 295 bytes | 98.00 KiB/s, done. From uit.mpei.ru:Fonov_Alexandr/cs-lab02 23bf55b..1602e9b main -> origin/main (base) aleksandr@MacBook-Pro-Aleksandr project % git pull --ff-only Updating 23bf55b..1602e9b Fast-forward main.cpp | 1 + 1 file changed, 1 insertion(+) 19. Конфликт (base) aleksandr@MacBook-Pro-Aleksandr project % git push To uit.mpei.ru:Fonov_Alexandr/cs-lab02.git ! [rejected] main -> main (fetch first) error: failed to push some refs to 'uit.mpei.ru:Fonov_Alexandr/cs-lab02.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. (base) aleksandr@MacBook-Pro-Aleksandr project % git log --stat commit 6fd9ced1dfbbb9a45fa8d40def9860632cb727a5 (HEAD -> main) Author: BOB (FonovAD) Date: Mon Mar 13 11:56:18 2023 +0300 add min main.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) commit 92fad59ca0ed2d9612793fa5fdb2604548301501 Author: BOB (FonovAD) Date: Mon Mar 13 11:50:48 2023 +0300 ... main.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 1602e9bddc7e0060cb15d1f70d1c55d0b3ed393f Author: Alice (FonovAD) Date: Mon Mar 13 11:46:42 2023 +0300 add division (base) aleksandr@MacBook-Pro-Aleksandr project % git rebase origin/main Auto-merging main.cpp CONFLICT (content): Merge conflict in main.cpp error: could not apply 6fd9ced... add min Resolve all conflicts manually, mark them as resolved with "git add/rm ", then run "git rebase --continue". You can instead skip this commit: run "git rebase --skip". To abort and get back to the state before "git rebase", run "git rebase --abort". Could not apply 6fd9ced... add min Команда оповещает об ошибке изменения коммита 6fd9ced, т.к он (коммит Боба) основан не на последнем существующем коммите. (base) aleksandr@MacBook-Pro-Aleksandr project % git add main.cpp (base) aleksandr@MacBook-Pro-Aleksandr project % git rebase --continue [detached HEAD 5fa6a1b] add min 1 file changed, 9 insertions(+) Successfully rebased and updated refs/heads/main. 20.Использование веток: (base) aleksandr@MacBook-Pro-Aleksandr project % git branch double (base) aleksandr@MacBook-Pro-Aleksandr project % git checkout double Switched to branch 'double' (base) aleksandr@MacBook-Pro-Aleksandr project % git commit -m 'double' [double c103a7e] double 1 file changed, 1 insertion(+), 1 deletion(-) (base) aleksandr@MacBook-Pro-Aleksandr project % git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. (base) aleksandr@MacBook-Pro-Aleksandr project % git push Everything up-to-date (base) aleksandr@MBP-Aleksandr project % git merge double Updating c8e9efd..c103a7e Fast-forward main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) История всех веток: (base) aleksandr@MBP-Aleksandr project % git log --oneline --decorate --all --graph * c103a7e (HEAD -> main, double) double * c8e9efd (origin/main) add max * 92fad59 ... * 1602e9b add division * 23bf55b bob`s commit * fb1c217 ... * 4e0ecf8 ... * 7fe833c code: заготовка программы