diff --git a/README.md b/README.md new file mode 100644 index 0000000..6465908 --- /dev/null +++ b/README.md @@ -0,0 +1,948 @@ +# Вход в терминал и создание структуры каталогов + +1. +``` +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02 +$ mkdir alice +``` + +- **`mkdir alice`**: Создает директорию `alice`. + +`Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02 $ mkdir bob` + +- **`mkdir bob`**: Создает директорию `bob`. + +**Объяснение вывода:** + +- **`Admin@DESKTOP-M49TLCR`**: Имя пользователя и компьютера. +- **`MINGW64`**: Используемая среда MinGW для 64-бит Windows. +- **`/e/Разработка ПО. 2ой семестр/lab02`**: Текущий рабочий каталог. + +2. +``` +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02 +$ cd alice +``` + +- **`cd alice`**: Переходит в директорию `alice`. + +`Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice $ mkdir project` + +- **`mkdir project`**: Создает директорию `project` внутри `alice`. + +`Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice $ cd project/` + +- **`cd project/`**: Переходит в директорию `project`. + +3. + + +# Инициализация репозитария и настройка GIT + +1. + ``` + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project + + $ git initInitialized empty Git repository in E:/Разработка ПО. 2ой семестр/lab02/alice/project/.git/ + ``` + +**Действие:** Инициализация нового локального репозитория Git в текущей директории. +**Результат:** Создана скрытая служебная папка .git, начата история версий. Ветка по умолчанию получила имя "main". + + + +2. Настройка конфигурации пользователя +```bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master) +$ git config user.name 'Alice(KozlovDD)' + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master) + $ git config user.email 'KozlovDanD@mpei.ru' +``` +`git config user.name 'Alice(KozlovDD)'` + + +- Объяснение: Эта команда устанавливает имя пользователя для текущего репозитория Git. Имя пользователя будет отображаться в информации о коммитах, которые вы создаете. + +`git config user.email 'KozlovDanD@mpei.ru' + + +- Объяснение: Эта команда устанавливает адрес электронной почты пользователя для текущего репозитория Git. Адрес электронной почты также будет отображаться в информации о коммитах. +# Создание коммитов +## Занесение файлов под контроль версий +1. Проверка состояния репозитория + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master) +$ git status +On branch master + +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) + +``` +- Объяснение: Эта команда отображает текущее состояние рабочего каталога и области индексирования. Она показывает, что вы находитесь на ветке `master`, и сообщает, что в репозитории еще нет коммитов. Также указывает на наличие неотслеживаемых файлов, таких как `main.cpp` и `project.cbp`, которые можно добавить в индекс для последующего коммит +## Составление сообщений к коммитам +1. Добавление и фиксация изменений +``` bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master) +$ git add main.cpp + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master) +$ git commit -m 'code: заготовка программы' +[master (root-commit) 5693668] code: заготовка программы + 1 file changed, 9 insertions(+) + create mode 100644 main.cpp + + +``` +- Команда `git add main.cpp` добавляет файл `main.cpp` в индекс (стейджинг) для подготовки к коммиту. Теперь main.cpp будет отслеживаться Git и включен в следующий коммит. +- Команда `git commit -m 'code: заготовка программы'` создает новый коммит с сообщением `"code: заготовка программы"`. В коммит включены изменения, подготовленные с помощью `git add`. В данном случае, это добавление файла `main.cpp` с девятью новыми строками кода. Команда также создает корневой коммит (root-commit), так как это первый коммит в репозитории. + + + +2. Переименование ветки + ``` bash + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (master) +$ git branch -m main + + +``` +- Команда `branch` переименовывает текущую ветку с `master` на `main`. + + +3. Добавление и коммит файла проекта + ``` bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/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 + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git commit -m 'build: Добавлен файл проекта' +[main 09eacb1] build: Добавлен файл проекта + 1 file changed, 40 insertions(+) + create mode 100644 project.cbp + + +``` +- Команда создает новый коммит с сообщением `"build: Добавлен файл проекта"`, включая изменения, связанные с добавлением файла `project.cbp`, в котором было добавлено 40 строк. +## Создание коммитов с изменениями +1. Проверка статуса изменений + ``` bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ 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 + +no changes added to commit (use "git add" and/or "git commit -a") + + +``` +- Команда показывает текущее состояние рабочего каталога и индексной области. Вы находитесь на ветке `main`, и Git указывает, что файл `main.cpp` был изменен, но изменения не подготовлены для коммита. Команда также предлагает использовать `git add` для подготовки изменений к коммиту + +2. Один из видос коммита + ``` bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git add main.cpp +git +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git commit -m "code: способ коммита #1 (ввод двух чисел)" +[main 5a49659] code: способ коммита #1 (ввод двух чисел) + 1 file changed, 4 insertions(+), 2 deletions(-) + + +``` +- Команда создает новый коммит с сообщением `"code: способ коммита #1 (ввод двух чисел)"`. В коммит включены изменения в `main.cpp`, где было добавлено 4 строки и удалено 2 строки. + +3. Один из видов коммита + ``` bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git add -u + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git commit -m "code: способ коммита #2 (вывод суммы)" +[main daf8dc3] code: способ коммита #2 (вывод суммы) + 1 file changed, 1 insertion(+), 1 deletion(-) +``` +- Команда `add -u` обновляет индекс, добавляя изменения в уже отслеживаемых файлах. Она не добавляет новые файлы, а только фиксирует изменения, такие как модификация или удаление. + +4. Один из видов коммита + ```bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git commit -a -m "code: вывод разности(способ коммита №3)" +[main 443aaff] code: вывод разности(способ коммита №3) + 1 file changed, 3 insertions(+), 1 deletion(-) +``` +Команда `git commit -a -m` создает коммит с сообщением `"code: вывод разности(способ коммита №3)"`. Опция `-a` автоматически индексирует все измененные и удаленные файлы, которые уже отслеживаются, перед созданием коммита. В результате, коммит включает изменения в одном файле, где было добавлено 3 строки и удалено 1 строка. +# Игнорирование файлов + ```bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git status +On branch main +Untracked files: + (use "git add ..." to include in what will be committed) + .gitignore + project.depend + +nothing added to commit but untracked files present (use "git add" to track) + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git add .gitignore + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git commit -m "git: .gitignore" +[main 21c0a2b] git: .gitignore + 1 file changed, 3 insertions(+) + create mode 100644 .gitignore + + +``` + +- Команда `status` отображает состояние рабочего каталога и индексной области. Она указывает, что в репозитории есть неотслеживаемые файлы: `.gitignore` и `project.depend`. +- Команда добавляет файл `.gitignore` в индекс, чтобы начать отслеживать его изменения. Этот файл используется для указания файлов или каталогов, которые Git должен игнорировать. + + +# Просмотр истории +## Работа с журналом репозитария +1. git log --stat + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git log --stat +commit 21c0a2b88e9b0e642ce274af2153b97061e8e977 (HEAD -> main) +Author: Alice(KozlovDD) +Date: Mon Apr 21 12:07:35 2025 +0300 + + git: .gitignore + + .gitignore | 3 +++ + 1 file changed, 3 insertions(+) + +commit 443aaffefbeeef811db009094d50167ccecfa122 +Author: Alice(KozlovDD) +Date: Mon Apr 21 12:03:15 2025 +0300 + + code: вывод разности(способ коммита №3) + + main.cpp | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +commit daf8dc35a657a397544aceacad8b762566b739b7 +Author: Alice(KozlovDD) +Date: Mon Apr 21 12:01:07 2025 +0300 + + code: способ коммита #2 (вывод суммы) + + main.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 5a496592182d7d655efc6ae3f86880d208a05eb7 +Author: Alice(KozlovDD) +Date: Mon Apr 21 11:59:55 2025 +0300 + + +``` +- Команда `git log --statgit log --stat` отображает историю коммитов с детальной статистикой изменений. Она показывает каждый коммит с указанием автора, даты, сообщения и статистики изменений, таких как количество измененных файлов, добавленных и удаленных строк. + +### Основные моменты из вывода: +- Последний коммит: `"git: .gitignore"` — добавлен файл .gitignore с 3 новыми строками. +- Предыдущий коммит: `"code: вывод разности(способ коммита №3)"` — изменения в main.cpp с 3 добавлениями и 1 удалением. +- Ранее: `"code: способ коммита #2 (вывод суммы)"` — изменения в `main.cpp` с 1 добавлением и 1 удалением. + + + +2. git log --oneline --decorate + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git log --oneline --decorate +21c0a2b (HEAD -> main) git: .gitignore +443aaff code: вывод разности(способ коммита №3) +daf8dc3 code: способ коммита #2 (вывод суммы) +5a49659 code: способ коммита #1 (ввод двух чисел) +09eacb1 build: Добавлен файл проекта +5693668 code: заготовка программы + +``` +- Команда `git log --oneline --decorate` предоставляет краткий обзор истории коммитов в упрощенном виде. Каждый коммит отображается в одной строке с его хешем, сообщением и дополнительной информацией о ветках и указателях. + +### Основные моменты из вывода: +- `21c0a2b (HEAD -> main):` Последний коммит с сообщением "git: .gitignore". +- `443aaff:` Коммит "code: вывод разности(способ коммита №3)". +- `daf8dc3:` Коммит "code: способ коммита #2 (вывод суммы)". +- `5a49659:` Коммит "code: способ коммита #1 (ввод двух чисел)". +- `09eacb1:` Коммит "build: Добавлен файл проекта". +- `5693668:` Коммит "code: заготовка программы". + + + + + + +3. git log --oneline --decorate --all --graph + ```bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git log --oneline --decorate --all --graph + +* 21c0a2b (HEAD -> main) git: .gitignore +* 443aaff code: вывод разности(способ коммита №3) +* daf8dc3 code: способ коммита #2 (вывод суммы) +* 5a49659 code: способ коммита #1 (ввод двух чисел) +* 09eacb1 build: Добавлен файл проекта +* 5693668 code: заготовка программы + +``` + +- Команда `git log --oneline --decorate --all --graph` выводит историю коммитов в виде графа, что позволяет визуально отслеживать структуру веток и их историю. Каждый коммит отображается в одной строке, включая хеш, сообщение и декорации, такие как указатели веток. + +### Основные моменты из вывода: +- Графическое представление: Звездочки (*) перед каждым коммитом показывают их взаимосвязи и последовательность. +- Коммиты: + - `21c0a2b (HEAD -> main):` Последний коммит "git: .gitignore". + - `443aaff`: "code: вывод разности(способ коммита №3)". + - `daf8dc3: `"code: способ коммита #2 (вывод суммы)". + - `5a49659: `"code: способ коммита #1 (ввод двух чисел)". + - `09eacb1:` "build: Добавлен файл проекта". + - `5693668:` "code: заготовка программы". + + + +4. git log -- project.cbp + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git log -- project.cbp +commit 09eacb1ca614507e6e79ff061247967d01eb3d2f +Author: Alice(KozlovDD) +Date: Mon Apr 21 11:57:02 2025 +0300 + + build: Добавлен файл проекта + + +``` + +- Команда `log -- project.cbp` выводит историю коммитов, связанных только с файлом `project.cbp`. Это полезно для отслеживания изменений в конкретном файле без просмотра всей истории репозитория. + +### Основные моменты из вывода: +- Коммит 09eacb1ca6: + - Автор: Alice(KozlovDD) + - Дата: Mon Apr 21 11:57:02 2025 +0300 + - Сообщение: "build: Добавлен файл проекта" + + + + + +5. git log --grep "build: + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git log --grep "build:" +commit 09eacb1ca614507e6e79ff061247967d01eb3d2f +Author: Alice(KozlovDD) +Date: Mon Apr 21 11:57:02 2025 +0300 + + build: Добавлен файл проекта + +``` + +- Команда ищет и выводит коммиты, сообщение которых содержит ключевое слово "build:". Это полезно для быстрого нахождения коммитов, связанных с определенной темой или изменением в проекте. + + +## Просмотр коммитов +1. Просмотр изменений способом 1 + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git show HEAD~1 +commit 443aaffefbeeef811db009094d50167ccecfa122 +Author: Alice(KozlovDD) +Date: Mon Apr 21 12:03:15 2025 +0300 + + code: вывод разности(способ коммита №3) + +diff --git a/main.cpp b/main.cpp +index 2fbd623..3ec5517 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -7,5 +7,7 @@ int main() + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; +- cout << a+b; ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n'; ++ + } + +``` +- Команда отображает подробную информацию о коммите, который находится на один шаг назад от текущего (HEAD~1). Она показывает детали коммита и изменения, которые были внесены в файлы. + +### Основные моменты из вывода: +- Коммит 443aaffefb: + - Автор: Alice(KozlovDD) + - Дата: Mon Apr 21 12:03:15 2025 +0300 + - Сообщение: "code: вывод разности(способ коммита №3)" + +- Изменения в файле main.cpp: + - Было добавлено: + - "A + B = " << a + b << '\n' + - "A - B = " << a - b << '\n'; + - Изменения в строках ввода-вывода для отображения суммы и разности двух чисел. + + + + + +2. Просмотр изменений способом 2 + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git show main~1 +commit 443aaffefbeeef811db009094d50167ccecfa122 +Author: Alice(KozlovDD) +Date: Mon Apr 21 12:03:15 2025 +0300 + + code: вывод разности(способ коммита №3) + +diff --git a/main.cpp b/main.cpp +index 2fbd623..3ec5517 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -7,5 +7,7 @@ int main() + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; +- cout << a+b; ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n'; ++ + } + + +``` +- Команда показывает изменения в коммите, который находится на один шаг назад от текущего состояния ветки `main (main~1)`. Она аналогична `git show HEAD~1` и отображает детали коммита и изменения в файлах. + + + +3. Просмотр изменений способом 3 + ```bash + $ git show 443aaff +commit 443aaffefbeeef811db009094d50167ccecfa122 +Author: Alice(KozlovDD) +Date: Mon Apr 21 12:03:15 2025 +0300 + + code: вывод разности(способ коммита №3) + +diff --git a/main.cpp b/main.cpp +index 2fbd623..3ec5517 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -7,5 +7,7 @@ int main() + cout << "Enter A and B: "; + int a, b; + cin >> a >> b; +- cout << a+b; ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n'; ++ + } + + +``` + +- Команда отображает полную информацию о коммите с указанным хешем `443aaff`. Вывод включает в себя детали автора, дату, сообщение коммита, а также изменения, внесенные в код. + + +## Просмотр изменений +1. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git diff +diff --git a/main.cpp b/main.cpp +index 3ec5517..11e84f5 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'; ++ << "A - B = " << a - b << '\n' ++ << "A * B = " << a * b << '\n'; + + } + +``` + +- Команда показывает различия между текущими изменениями в рабочем каталоге и последним коммитом. Она позволяет увидеть, какие изменения были внесены в код, но еще не зафиксированы в коммите. + + + +2. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git diff 5693668 HEAD +diff --git a/.gitignore b/.gitignore +new file mode 100644 +index 0000000..e607464 +--- /dev/null ++++ b/.gitignore +@@ -0,0 +1,3 @@ ++bin ++obj ++*.layout +diff --git a/main.cpp b/main.cpp +index b4392ec..3ec5517 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -4,6 +4,10 @@ using namespace std; + + int main() + { +- cout << "Hello world!" << endl; +- return 0; ++ cout << "Enter A and B: "; ++ int a, b; ++ cin >> a >> b; ++ cout << "A + B = " << a + b << '\n' ++ << "A - B = " << a - b << '\n'; ++ + } +diff --git a/project.cbp b/project.cbp +new file mode 100644 +index 0000000..99bb702 +--- /dev/null + +``` + +- Команда сравнивает изменения между двумя коммитами: 5693668 (первоначальный коммит) и HEAD (последний коммит). Она показывает, какие изменения были внесены в файлы между этими двумя состояниями репозитория. + +# Откат изменений +1. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git add main.cpp + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git commit -m "code: вывод произведения" +[main e895221] code: вывод произведения + 1 file changed, 2 insertions(+), 1 deletion(-) + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git reset --hard HEAD~1 +HEAD is now at 21c0a2b git: .gitignore + + +``` +- Команда `git reset --hard` откатывает репозиторий к предыдущему коммиту, удаляя все изменения, сделанные в последнем коммите. Теперь HEAD указывает на коммит с сообщением "git: .gitignore", и изменения, связанные с выводом произведения, были потеряны. + + + +2. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git checkout HEAD -- main.cpp + +``` + +- Команда `git checkout `восстанавливает файл `main.cpp` из последнего коммита, отменяя все незакоммиченные изменения в рабочем каталоге. Это полезно, если вы хотите отбросить изменения в конкретном файле и вернуть его к состоянию последнего коммита. +# Обмен через удаленное хранилище +1. +```bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git remote add origin git@uit.mpei.ru:KozlovDanD/cs-lab02.git + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git push -u origin main +Enumerating objects: 18, done. +Counting objects: 100% (18/18), done. +Delta compression using up to 16 threads +Compressing objects: 100% (16/16), done. +Writing objects: 100% (18/18), 2.36 KiB | 241.00 KiB/s, done. +Total 18 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) +remote: . Processing 1 references +remote: Processed 1 references in total +To uit.mpei.ru:KozlovDanD/cs-lab02.git + * [new branch] main -> main +branch 'main' set up to track 'origin/main'. +``` +- команда `git remote add origin` добавляет удаленный репозиторий с именем origin по указанному адресу. Это позволяет взаимодействовать с удаленным репозиторием для обмена данными. +- команда `git push -u origin main` отправляет локальные изменения на удаленный репозиторий `origin`, в ветку `main`. Опция `-u` устанавливает отслеживание для локальной ветки `main` и удаленной ветки `origin`/`main`. Это облегчает последующие `push` и `pull` команды. +# Отправка на сервер + Совместная работа без конфликтов правок + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob +$ cd project/ + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git config user.name 'Bob(KozlovDD)' + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git config user.email 'KozlovDanD@mpei.ru' + + + + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git add main.cpp + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git commit -m "code: Bob вывод произведения" +[main 2b3f606] code: Bob вывод произведения + 1 file changed, 2 insertions(+), 1 deletion(-) + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 16 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 417 bytes | 208.00 KiB/s, done. +Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) +remote: . Processing 1 references +remote: Processed 1 references in total +To uit.mpei.ru:KozlovDanD/cs-lab02.git + 21c0a2b..2b3f606 main -> main + +``` + +- Команда отправляет все закоммиченные изменения из локальной ветки `main` на удаленный репозиторий `origin`, в ветку `main`. Процесс включает подсчет и сжатие объектов, а также их запись на удаленный сервер. + +2. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git fetch +remote: Enumerating objects: 5, done. +remote: Counting objects: 100% (5/5), done. +remote: Compressing objects: 100% (3/3), done. +remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 +Unpacking objects: 100% (3/3), 397 bytes | 49.00 KiB/s, done. +From uit.mpei.ru:KozlovDanD/cs-lab02 + 21c0a2b..2b3f606 main -> origin/main + + +``` + +- команда `git fetch` загружает последние изменения из удаленного репозитория `origin`, но не объединяет их с локальной веткой. Она обновляет локальный репозиторий информацией о новых коммитах, доступных на удаленном сервере. + +3. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git log --oneline --decorate --all --graph +* 2b3f606 (origin/main) code: Bob вывод произведения +* 21c0a2b (HEAD -> main) git: .gitignore +* 443aaff code: вывод разности(способ коммита №3) +* daf8dc3 code: способ коммита #2 (вывод суммы) +* 5a49659 code: способ коммита #1 (ввод двух чисел) +* 09eacb1 build: Добавлен файл проекта +* 5693668 code: заготовка программы + + +``` + +4. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git pull --ff-only +Updating 21c0a2b..2b3f606 +Fast-forward + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + + +``` +- Команда обновляет локальную ветку main до состояния удаленной ветки `origin/main`, используя `"fast-forward"` слияние. Параметр `--ff-only` гарантирует, что операция завершится успехом только в том случае, если изменения могут быть применены посредством простого продвижения указателя ветки без создания нового коммита слияния. + + +5. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git add main.cpp + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git commit -m "code: alice добавила деление" +[main 8dc069e] code: alice добавила деление + 1 file changed, 2 insertions(+), 1 deletion(-) + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 16 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 411 bytes | 411.00 KiB/s, done. +Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) +remote: . Processing 1 references +remote: Processed 1 references in total +To uit.mpei.ru:KozlovDanD/cs-lab02.git + 2b3f606..8dc069e main -> main + + +``` + +6. + +```bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git fetch +remote: Enumerating objects: 5, done. +remote: Counting objects: 100% (5/5), done. +remote: Compressing objects: 100% (3/3), done. +remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 +Unpacking objects: 100% (3/3), 391 bytes | 30.00 KiB/s, done. +From uit.mpei.ru:KozlovDanD/cs-lab02 + 2b3f606..8dc069e main -> origin/main +g +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git pull --ff-only +Updating 2b3f606..8dc069e +Fast-forward + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + + +``` + +# Разрешение конфликтов правок при совместной работе +1. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git add main.cpp + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git commit -m "code: alice максимум добавила" +[main 6d4cf45] code: alice максимум добавила + 1 file changed, 1 insertion(+), 1 deletion(-) + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 16 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 409 bytes | 204.00 KiB/s, done. +Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) +remote: . Processing 1 references +remote: Processed 1 references in total +To uit.mpei.ru:KozlovDanD/cs-lab02.git + 8dc069e..6d4cf45 main -> main + + +``` + +2. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git add main.cpp + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git commit -m "code: bob добавил минимум" +[main c3bd657] code: bob добавил минимум + 1 file changed, 1 insertion(+), 1 deletion(-) + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git push +To uit.mpei.ru:KozlovDanD/cs-lab02.git + ! [rejected] main -> main (fetch first) +error: failed to push some refs to 'uit.mpei.ru:KozlovDanD/cs-lab02.git' +hint: Updates were rejected because the remote contains work that you do not +hint: have locally. This is usually caused by another repository pushing to +hint: the same ref. If you want to integrate the remote changes, use +hint: 'git pull' before pushing again. +hint: See the 'Note about fast-forwards' in 'git push --help' for details. + + +``` + +**Проблема:** Отказ в отправке изменений на сервер. +**Причина:** +- Удаленный репозиторий содержит коммиты, отсутствующие локально у Боба +- Конфликт истории версий (Алиса уже обновила `main` на сервере) + +3. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git fetch +remote: Enumerating objects: 5, done. +remote: Counting objects: 100% (5/5), done. +remote: Compressing objects: 100% (3/3), done. +remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 +Unpacking objects: 100% (3/3), 389 bytes | 21.00 KiB/s, done. +From uit.mpei.ru:KozlovDanD/cs-lab02 + 8dc069e..6d4cf45 main -> origin/main + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git pull --ff-only +hint: Diverging branches can't be fast-forwarded, you need to either: +hint: +hint: git merge --no-ff +hint: +hint: or: +hint: +hint: git rebase +hint: +hint: Disable this message with "git config advice.diverging false" +fatal: Not possible to fast-forward, aborting. + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git log --oneline --decorate --all --graph +* c3bd657 (HEAD -> main) code: bob добавил минимум +| * 6d4cf45 (origin/main, origin/HEAD) code: alice максимум добавила +|/ +* 8dc069e code: alice добавила деление +* 2b3f606 code: Bob вывод произведения +* 21c0a2b git: .gitignore +* 443aaff code: вывод разности(способ коммита №3) +* daf8dc3 code: способ коммита #2 (вывод суммы) +* 5a49659 code: способ коммита #1 (ввод двух чисел) +* 09eacb1 build: Добавлен файл проекта +* 5693668 code: заготовка программы + + +``` +- Подсказки указывают на то, что локальная ветка и удаленная ветка разошлись, и fast-forward слияние не может быть выполнено. В таких случаях предлагается использовать git merge --no-ff для создания нового коммита слияния или git rebase для переноса локальных коммитов на вершину удаленной ветки. + + +4. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git rebase origin/main +Auto-merging main.cpp +CONFLICT (content): Merge conflict in main.cpp +error: could not apply c3bd657... code: bob добавил минимум +hint: Resolve all conflicts manually, mark them as resolved with +hint: "git add/rm ", then run "git rebase --continue". +hint: You can instead skip this commit: run "git rebase --skip". +hint: To abort and get back to the state before "git rebase", run "git rebase --abort". +Could not apply c3bd657... code: bob добавил минимум + + +``` +- команда пытается перенести текущие изменения из локальной ветки main на вершину удаленной ветки origin/main. Это позволяет интегрировать изменения из удаленной ветки, сохраняя линейную историю коммитов. +- Система автоматически пытается объединить изменения, но в файле main.cpp возник конфликт, который необходимо разрешить вручную. +- сообщение об ошибке указывает на то, что не удалось применить коммит с хешем c3bd657, так как возник конфликт. + + + +5. + ```bash +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main|REBASE 1/1) +$ git add main.cpp + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main|REBASE 1/1) +$ git rebase --continue +hint: Waiting for your editor to close the file... + +``` + +- команда продолжает процесс ребейза после того, как все конфликты были разрешены. Git применяет оставшиеся коммиты на вершину текущей ветки. + +6. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git log --oneline --decorate --all --graph +* 4612506 (HEAD -> main) code: bob добавил минимум code: Добавили максимум и минимум +* 6d4cf45 (origin/main, origin/HEAD) code: alice максимум добавила +* 8dc069e code: alice добавила деление +* 2b3f606 code: Bob вывод произведения +* 21c0a2b git: .gitignore +* 443aaff code: вывод разности(способ коммита №3) +* daf8dc3 code: способ коммита #2 (вывод суммы) +* 5a49659 code: способ коммита #1 (ввод двух чисел) +* 09eacb1 build: Добавлен файл проекта +* 5693668 code: заготовка программы +--- +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/bob/project (main) +$ git push +Enumerating objects: 5, done. +Counting objects: 100% (5/5), done. +Delta compression using up to 16 threads +Compressing objects: 100% (3/3), done. +Writing objects: 100% (3/3), 435 bytes | 435.00 KiB/s, done. +Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0) +remote: . Processing 1 references +remote: Processed 1 references in total +To uit.mpei.ru:KozlovDanD/cs-lab02.git + 6d4cf45..4612506 main -> main + + +``` + +- В выводе отображается новый коммит с хешем 4612506, который содержит объединенные изменения, а также показываются коммиты из удаленной ветки. + + +# Использование веток + +1. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git branch double + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git checkout double +Switched to branch 'double' + + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git fetch +remote: Enumerating objects: 5, done. +remote: Counting objects: 100% (5/5), done. +remote: Compressing objects: 100% (3/3), done. +remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 +Unpacking objects: 100% (3/3), 367 bytes \| 7.00 KiB/s, done. +From uit.mpei.ru:KozlovDanD/cs-lab02 +88609ec..04f3153 main -> origin/main + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git merge double +Updating 88609ec..00a3f48 +Fast-forward +main.cpp \| 2 +- +1 file changed, 1 insertion(+), 1 deletion(-) + + +Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git push +Enumerating objects: 10, done. +Counting objects: 100% (10/10), done. +Delta compression using up to 16 threads +Compressing objects: 100% (6/6), done. +Writing objects: 100% (6/6), 767 bytes | 383.00 KiB/s, done. +Total 6 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0) +remote: . Processing 1 references +remote: Processed 1 references in total +To uit.mpei.ru:KozlovDanD/cs-lab02.git + 4612506..b32db7a main -> main + + + +``` + +- команда `git branch double` создает новую ветку с именем double. Ветка может использоваться для разработки новых функций или для внесения изменений без влияния на основную ветку. +- команда `git checkout double` переключает текущую рабочую ветку на double. Теперь все коммиты будут добавляться в эту ветку. +- команда `merge` объединяет изменения из ветки double в текущую ветку, которая должна быть main. + + + +2. + ```bash + Admin@DESKTOP-M49TLCR MINGW64 /e/Разработка ПО. 2ой семестр/lab02/alice/project (main) +$ git log --oneline --decorate --all --graph +* b32db7a (HEAD -> main, origin/main) Merge branch 'double' code: слияник веток +|\ +| * 5d053ca (double) code: int -> double +* | 4612506 code: bob добавил минимум code: Добавили максимум и минимум +|/ +* 6d4cf45 code: alice максимум добавила +* 8dc069e code: alice добавила деление +* 2b3f606 code: Bob вывод произведения +* 21c0a2b git: .gitignore +* 443aaff code: вывод разности(способ коммита №3) +* daf8dc3 code: способ коммита #2 (вывод суммы) +* 5a49659 code: способ коммита #1 (ввод двух чисел) +* 09eacb1 build: Добавлен файл проекта +* 5693668 code: заготовка программы + +``` \ No newline at end of file