Отчет по лабораторной работе № 2 "Система контроля версий Git" Выполнил: Баранов Э. К. Группа: А-01-23 Проверил: Примечание: работа выполнялась на Windows. 1. Создал на рабочем столе каталог lab02 и запустил в нем Git Bash, приглашение: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ 2. Просмотрел файлы в рабочем каталоге можно командой "ls" --- пусто: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ ls lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ 3. Создал каталоги Алисы и Боба, создал каталог "project", изучил команду "cd" в процессе: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ mkdir alice lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ mkdir bob lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ cd alice lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice $ mkdir project lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice $ cd .. lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ cd project bash: cd: project: No such file or directory lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ cd alice project bash: cd: too many arguments lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02 $ cd alice lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice $ cd project 4. Инициализировал репозитарий: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project $ git init Initialized empty Git repository in C:/Users/lenov/Desktop/lab02/alice/project/.git/ lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git branch -m master lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (master) $ git branch -m main lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ У меня имя ветки по умолчанию настроено, как 'main', поэтому подсказки никакой не вылезло. Но я хотел изучить команду для смены имени ветки, поэтому сменил ее на 'master', а потом обратно на 'main' lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ ls -A .git/ С помощью команды 'ls -A' я увидел католог .git 5. Настроил репозитарий Алисы,чтобы коммиты были от ее имени : lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git config user.name 'Alice (BaranovEK)' lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git config user.email 'BaranovEK@mail.ru' 6. В CodeBlocks создал проект в репозитории Алисы со следущем конечным путем: C:\Users\lenov\Desktop\lab02\alice\project\project.cbp 7. Вернувшись в Git Bash, просмотрел состояние рабочей копии, добавил файл в отслеживаемые Git-ом, выполнил коммит: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main - мы находимся на ветке main No commits yet - коммитов еще не было Untracked files: - перечислен перечень не отслеживемых Git-ом файлов (use "git add ..." to include in what will be committed) bin/ main.cpp obj/ project.cbp nothing added to commit but untracked files present (use "git add" to track)- Нобходимости в коммите нет(ничего не изменилось/добавилось), но присутствуют неотслеживаемые файлы (используйте "git add" для отслеживания) Добавил файл main.cpp в индекс, то есть в набор изменений, который войдет в очередной коммит: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp Просмотрел сосотояние рабочей копии: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main - мы находимся на ветке main No commits yet - коммитов еще не было Changes to be committed: - Изменения(добавление файла в отслеживание), которые необходимо закоммититьж (use "git rm --cached ..." to unstage) new file: main.cpp Untracked files: - перечислен перечень не отслеживемых Git-ом файлов (use "git add ..." to include in what will be committed) bin/ obj/ project.cbp Выполнил коммит с файлом main.cpp и коротким сообщением: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'code: заготовка программы' [main (root-commit) 01a4a8f] code: заготовка программы 1 file changed, 9 insertions(+) create mode 100644 main.cpp lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ 8 добавил еще однин файл в индеккс и сделал коммит с ним. lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git add project.cbp warning: in the working copy of 'project.cbp', LF will be replaced by CRLF the next time Git touches it lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m 'build: добавлен файл проекта' [main a5895dd] build: добавлен файл проекта 1 file changed, 40 insertions(+) create mode 100644 project.cbp lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Changes not staged for commit: git отлеживает и хранит эти файлы. Сейчас эти файлы изменены, но git не будет сохранять эти изменения при фиксации. (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) bin/ obj/ project.layout no changes added to commit (use "git add" and/or "git commit -a") 9 сделал коммиты тремя разными способами 1-ый способ Сначала выбрать файлы, изменения которых должны войти в коммит, затем сделать коммит: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp git commit -m "..." [main aea20f6] ... 1 file changed, 4 insertions(+), 1 deletion(-) Я забыл прописать сообщение, поэтому пришлось удалить последний коммит(без удаления изменений в файле) и закоммитить заново lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git reset HEAD~ # Unstaged changes after reset: M main.cpp lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m "code: добавлен вывод суммы" [main 889d2b0] code: добавлен вывод суммы 1 file changed, 4 insertions(+), 1 deletion(-) Потом я понял, что вывод суммы не нужно было добавлять в коммит, поэтому я опять удалил последний коммит, но уже вместе с изменениями. И закоммитил все как положено. lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git reset --hard HEAD~ HEAD is now at a5895dd build: добавлен файл проекта lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git add main.cpp lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m"code: добавлен ввод чисел" [main beefe63] code: добавлен ввод чисел 1 file changed, 3 insertions(+), 1 deletion(-) 2-ой способ Добавить в индекс все изменения, затем сделать коммит: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git add -u lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m"code: добавлен вывод суммы" [main 1ab08b5] code: добавлен вывод суммы 1 file changed, 1 insertion(+) 3-ий способ Добавить все изменения в индекс и сделать коммит в один шаг: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -a -m"code: добавлен вывод суммы" [main 6dfd17a] code: добавлен вывод суммы 1 file changed, 2 insertions(+), 1 deletion(-) В сообщение допущена ошибка, поэтому я изменил сообщение коммита: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit --amend hint: Waiting for your editor to close the file... unix2dos: converting file C:/Users/lenov/Desktop/lab02/alice/project/.git/COMMIT_EDITMSG to DOS format... dos2unix: converting file C:/Users/lenov/Desktop/lab02/alice/project/.git/COMMIT_EDITMSG to Unix format... [main 88dc5ff] code: добавлен вывод разности Date: Mon Apr 1 12:44:27 2024 +0300 1 file changed, 2 insertions(+), 1 deletion(-) 9 занес в список игнорируемых каталоги bin и obj и файлы *.layout. Убедился, что это удалось. Создал коммит с .gitignore lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main Untracked files: (use "git add ..." to include in what will be committed) .gitignore nothing added to commit but untracked files present (use "git add" to track) lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git add .gitignore lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git commit -m"git: закоммичен .gitignore" [main 49ddca5] git: закоммичен .gitignore 1 file changed, 3 insertions(+) create mode 100644 .gitignore lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git status On branch main nothing to commit, working tree clean 10 Работа с журналом репозитория: попробовал каждую из приведенных команд: git log git log --stat git log --oneline --decorate git log --oneline --decorate --all --graph lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --stat commit 49ddca58e5e7c4948ca75195e919ec2e1dbc8d60 (HEAD -> main) - указан id коммита и показано,что ссылка направлена на данный коммит из ветки main Author: Alice (BaranovEK) Date: Mon Apr 1 12:58:00 2024 +0300 git: закоммичен .gitignore .gitignore | 3 +++ 1 file changed, 3 insertions(+) - указан файл который изменили в этом коммите, а также число добавленных строк(3 insertions(+)) ..... Нашел сначала коммиты по теме build, затем коммиты, затрагивающие project.cbp: lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git log --grep "build:" commit a5895ddd03a5b83b7a675aac252237effb6768f0 Author: Alice (BaranovEK) Date: Mon Apr 1 11:48:08 2024 +0300 build: добавлен файл проекта lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git log -- project.cbp commit a5895ddd03a5b83b7a675aac252237effb6768f0 Author: Alice (BaranovEK) Date: Mon Apr 1 11:48:08 2024 +0300 build: добавлен файл проекта 10 Просмотр коммитов просморел предпоследний коммит тремя разными способами(результат выписал единожды) lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git show main~1 commit 88dc5ff98c2f62369b37b50ee5e204af70247ea9 Author: Alice (BaranovEK) Date: Mon Apr 1 12:44:27 2024 +0300 code: добавлен вывод разности diff --git a/main.cpp b/main.cpp index 6de6dd2..5371b30 100644 --- a/main.cpp +++ b/main.cpp @@ -7,6 +7,7 @@ int main() cout << "Enter A and B: "; int a, b; cin >> a >> b; - cout << "A + B = " << a + b << '\n'; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; return 0; } 11 Просмотр изменений lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff diff --git a/main.cpp b/main.cpp index 5371b30..d323e9d 100644 --- a/main.cpp +++ b/main.cpp @@ -8,6 +8,7 @@ int main() int a, b; cin >> a >> b; cout << "A + B = " << a + b << '\n' - до этой строки включительно указаны совпадающие строки - << "A - B = " << a - b << '\n'; - тут строка которую поменяли(git считает,что удалили) + << "A - B = " << a - b << '\n'-* + << "A*B=" << a*b << '\n';-*= тут строки которые добавили return 0; } 12 Просмотрите изменения между самым первым коммитом и коммитом, добавляющим вывод разности. lenov@LAPTOP-4D9QBHOE MINGW64 ~/Desktop/lab02/alice/project (main) $ git diff 01a4a8f 88dc5ff diff --git a/main.cpp b/main.cpp index b4392ec..5371b30 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,10 @@ using namespace std; int main() { - cout << "Hello world!" << endl; + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; + cout << "A + B = " << a + b << '\n' + << "A - B = " << a - b << '\n'; return 0; } diff --git a/project.cbp b/project.cbp new file mode 100644 index 0000000..99bb702 --- /dev/null +++ b/project.cbp @@ -0,0 +1,40 @@ + + + + + + (END)