Загрузил(а) файлы в ''

main
Козлов Данил 4 недель назад
Родитель b32db7ab46
Сommit 398d874e9f

@ -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 <file>..." 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 <file>..." to update what will be committed)
(use "git restore <file>..." 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 <file>..." 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) <KozlovDanD@mpei.ru>
Date: Mon Apr 21 12:07:35 2025 +0300
git: .gitignore
.gitignore | 3 +++
1 file changed, 3 insertions(+)
commit 443aaffefbeeef811db009094d50167ccecfa122
Author: Alice(KozlovDD) <KozlovDanD@mpei.ru>
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) <KozlovDanD@mpei.ru>
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) <KozlovDanD@mpei.ru>
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) <KozlovDanD@mpei.ru>
Date: Mon Apr 21 11:57:02 2025 +0300
build: Добавлен файл проекта
```
- Команда `log -- project.cbp` выводит историю коммитов, связанных только с файлом `project.cbp`. Это полезно для отслеживания изменений в конкретном файле без просмотра всей истории репозитория.
### Основные моменты из вывода:
- Коммит 09eacb1ca6:
- Автор: Alice(KozlovDD) <KozlovDanD@mpei.ru>
- Дата: 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) <KozlovDanD@mpei.ru>
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) <KozlovDanD@mpei.ru>
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) <KozlovDanD@mpei.ru>
- Дата: 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) <KozlovDanD@mpei.ru>
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) <KozlovDanD@mpei.ru>
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 <conflicted_files>", 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: заготовка программы
```
Загрузка…
Отмена
Сохранить