From 79bdea3934a3e5169db13903ffa39ffb82a40a14 Mon Sep 17 00:00:00 2001 From: Dmitry Astankov Date: Sun, 27 Aug 2023 21:31:46 +0300 Subject: [PATCH 1/7] Update master.txt --- master.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/master.txt b/master.txt index e69de29..c150373 100644 --- a/master.txt +++ b/master.txt @@ -0,0 +1 @@ +This line was added in the master branch! From 5d3f66a6645b7f350485262a9205668b728a649b Mon Sep 17 00:00:00 2001 From: Dmitry Astankov Date: Sun, 27 Aug 2023 21:32:05 +0300 Subject: [PATCH 2/7] Update experiment.txt --- experiment.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/experiment.txt b/experiment.txt index e69de29..c150373 100644 --- a/experiment.txt +++ b/experiment.txt @@ -0,0 +1 @@ +This line was added in the master branch! From 3f8b18af1a25d7df864e5a8a930f1268d506934d Mon Sep 17 00:00:00 2001 From: Dmitry Astankov Date: Thu, 31 Aug 2023 16:18:11 +0300 Subject: [PATCH 3/7] Add hometask (#3) * Add hometask description * Remove obvious hints * Add images * Update rebase step hints * Update README.md --- README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/README.md b/README.md index 1353624..ba9eaab 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,25 @@ # Simulative Git Module Hello, GitHub! + +## Домашнее задание + +Вступление: дальше по тексту мы будем использовать термин «код», но подразумевать при этом будем любое содержимое файлов. Наша цель сейчас – научиться работать с Git, а не с каким-то языком программирования, поэтому на код отвлекаться не очень хочется. + +Итак, представьте себе: Вы – разработчик в IT-компании. Вместе с командой других разработчиков Вы делаете наикрутейший проект, в котором используется сторонняя библиотека с открытым исходным кодом. В какой-то момент работы над проектом вы замечаете, что ваш проект работает не так, как вы ожидаете - всему виной оказывается ошибка в коде сторонней библиотеки! Вы отправляетесь в [Issues](https://github.com/Illumaria/simulative-git/issues) репозитория библиотеки, чтобы завести сообщение об ошибке и попросить разработчиков библиотеки исправить её, но оказывается, что эту ошибку ранее уже заметил и решил исправить один из [мейнтейнеров](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D0%B9%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80) официального репозитория. К несчастью, этот мейнтейнер покинул команду, и задача осталась недоделанной. Вы решаете взять дело в свои руки, ведь так Вы и вклад в развитие библиотеки внесёте, и своему проекту поможете! + +Каков план действий? +1. Поскольку разработкой сторонней библиотеки занимается другая команда, коммитить напрямую в официальный репозиторий Вы не сможете. Не беда, ведь можно создать форк, сделать там нужную работу, а затем отправить изменения обратно в официальный репозиторий посредством [пулл-реквеста](https://github.com/Illumaria/simulative-git/pulls). Давайте начнём с первого пункта: создайте форк [репозитория](https://github.com/Illumaria/simulative-git) со всеми его ветками. +2. Отлично, Вы скопировали официальный репозиторий и теперь имеете свой собственный репозиторий, но удалённый. Качественно вести разработику в удалённом практически невозможно, поэтому теперь вам необходимо клонировать ваш удалённый репозиторий на рабочий компьютер. +3. Из описания проблемы в Issues вы увидели, что мейнтейнер работал в ветке `experiment` основного репозитория. Поскольку вы создали форк со всеми ветками основного репозитория, то у вас эта ветка тоже есть. Самое время на неё переключиться. +4. Изучив содержимое файлов и журнал коммитов этой ветки, вы поняли, что для решения задачи часть последних коммитов просто не нужна, а другая часть нуждается в минорных изменениях. Свою работу Вы решили начать с наиболее раннего коммита, где требуются исправления: это коммит с заголовком `"Update experiment.txt"`. Найдите в истории коммитов его идентификатор, переключитесь на него и создайте из него новую ветку с именем `homework`. +5. Теперь - самое главное: исправляем ошибку в коде. Для этого достаточно в файле `experiment.txt` заменить слово `experiment` на `homework`. +6. Вы всё протестировали и убедились в том, что ваши изменения действительно решают исходную проблему. Ура! Осталось проделать обратный путь и отправить изменения в официальный репозиторий. Но если вы прямо сейчас отправите свои текущие изменения в свой же удалённый репозиторий и откроете пулл-реквест в основную (`master`) ветку официального репозитория, то ничего не выйдет: + image + Причина в том, что пока тот мейнтейнер делал работу, ветка `master` убежала вперёд. Вам нужно нагнать изменения в ней, вмержив её изменения в свою ветку `homework`. Однако, использовав `git merge`, история вашей ветки будет не самой красивой: + image + Появился merge-коммит! Это не смертельно, но в данном случае можно обойтись и без него, немножко переписав историю: + image + Как этого добиться? Поскольку с вашей веткой, кроме вас, сейчас никто не работает, можно абсолютно безопасно использовать `git rebase`. Сделайте это: синтаксис команды запуска ребейза можно подсмотреть с помощью `git rebase --help`, а то, что делать после начала ребейза, вам подскажет сам git. Читайте _предельно_ внимательно, ничего не пропускайте. Это важно! И помните, что при разрешении конфликта вам нужно _просто выбрать_ ту версию изменений, которую вы хотите оставить, стерев всё ненужное и оставив только нужное. +8. Теперь, когда все изменения внесены, тесты проведены, а история ветки приняла окончательный вид, можно отправлять работу на проверку. Но сначала - в свой удалённый репозиторий. +9. Последний шаг: можно открывать пулл-реквест! Внимательно проверьте ветки - как исходную (то есть ветку в _своём_ удалённом репозитории, изменения _из_ которой вы хотите внести), так и конечную (ветку в _официальном_ репозитории, _в_ которую вы хотите внести ваши изменения). Всё проверили? Тогда остаётся только нажать `Create Pull-Request` и ждать ответа мейнтейнеров! From 2ccb25049beb463ba66a37da72bd1b4c46876a77 Mon Sep 17 00:00:00 2001 From: Illumaria Date: Tue, 22 Oct 2024 21:30:12 +0300 Subject: [PATCH 4/7] Clarify step 5 of the task --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ba9eaab..ca41ab2 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Hello, GitHub! 2. Отлично, Вы скопировали официальный репозиторий и теперь имеете свой собственный репозиторий, но удалённый. Качественно вести разработику в удалённом практически невозможно, поэтому теперь вам необходимо клонировать ваш удалённый репозиторий на рабочий компьютер. 3. Из описания проблемы в Issues вы увидели, что мейнтейнер работал в ветке `experiment` основного репозитория. Поскольку вы создали форк со всеми ветками основного репозитория, то у вас эта ветка тоже есть. Самое время на неё переключиться. 4. Изучив содержимое файлов и журнал коммитов этой ветки, вы поняли, что для решения задачи часть последних коммитов просто не нужна, а другая часть нуждается в минорных изменениях. Свою работу Вы решили начать с наиболее раннего коммита, где требуются исправления: это коммит с заголовком `"Update experiment.txt"`. Найдите в истории коммитов его идентификатор, переключитесь на него и создайте из него новую ветку с именем `homework`. -5. Теперь - самое главное: исправляем ошибку в коде. Для этого достаточно в файле `experiment.txt` заменить слово `experiment` на `homework`. +5. Теперь - самое главное: исправляем ошибку в коде. Для этого достаточно в содержимом файла `experiment.txt` заменить слово `experiment` на `homework`. 6. Вы всё протестировали и убедились в том, что ваши изменения действительно решают исходную проблему. Ура! Осталось проделать обратный путь и отправить изменения в официальный репозиторий. Но если вы прямо сейчас отправите свои текущие изменения в свой же удалённый репозиторий и откроете пулл-реквест в основную (`master`) ветку официального репозитория, то ничего не выйдет: image Причина в том, что пока тот мейнтейнер делал работу, ветка `master` убежала вперёд. Вам нужно нагнать изменения в ней, вмержив её изменения в свою ветку `homework`. Однако, использовав `git merge`, история вашей ветки будет не самой красивой: From d9e1b63765d9287bab70cf7591815c2f1770b182 Mon Sep 17 00:00:00 2001 From: Dmitry Astankov Date: Wed, 6 Aug 2025 15:56:26 +0300 Subject: [PATCH 5/7] Setup GitHub Actions (#146) * Add initial CI config * Add debug info for pull requests * Add checks to CI * Add conditions to steps * Add check for commit count * Add condition for check commit count * Add step to check changed files count * Add check for base commit SHA * Remove trigger on 'push' event --- .github/workflows/ci.yaml | 92 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 .github/workflows/ci.yaml diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..dcc17d9 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,92 @@ +name: Assignment Checking + +on: + pull_request: + branches: + - master + +jobs: + test: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check fork + if: ${{ !cancelled() }} + run: | + if [[ "${{ github.repository }}" != "${{ github.event.pull_request.head.repo.full_name }}" ]]; then + echo "Success: PR is created from a fork" + else + echo "Error: PR is created from '${{ github.event.pull_request.head.repo.full_name }}'" + exit 1 + fi + + - name: Check branch name + if: ${{ !cancelled() }} + run: | + if [[ "${{ github.event.pull_request.head.ref }}" == "homework" ]]; then + echo "Success: PR source branch is 'homework'" + else + echo "Error: PR source branch is '${{ github.event.pull_request.head.ref }}'" + exit 1 + fi + + - name: Check commit count + if: ${{ !cancelled() }} + run: | + # Получаем хэши базовой и головной веток PR + BASE_SHA=${{ github.event.pull_request.base.sha }} + HEAD_SHA=${{ github.event.pull_request.head.sha }} + + # Подсчитываем количество коммитов между базой и головой PR + COMMIT_COUNT=$(git rev-list --count $BASE_SHA..$HEAD_SHA) + + echo "Info: Number of commits in PR: $COMMIT_COUNT" + + # Проверяем, что количество коммитов равно 2 + if [ "$COMMIT_COUNT" -ne 2 ]; then + echo "Error: Commit count in PR is incorrect, excected 2 commits, got $COMMIT_COUNT" + exit 1 + else + echo "Success: Commit count is correct" + fi + + - name: Check changed files count + if: ${{ !cancelled() }} + run: | + # Получаем хэши базовой и головной веток PR + BASE_SHA=${{ github.event.pull_request.base.sha }} + HEAD_SHA=${{ github.event.pull_request.head.sha }} + + # Подсчитываем количество изменённых файлов + FILE_COUNT=$(git diff --name-only $BASE_SHA..$HEAD_SHA | wc -l) + + echo "Info: Number of changed files in PR: $FILE_COUNT" + + # Проверяем, что изменён ровно 1 файл + if [ "$FILE_COUNT" -ne 1 ]; then + echo "Error: Changed files count is incorrect, expected 1 changed file, got $FILE_COUNT" + exit 1 + else + echo "Success: Changed files count is correct" + fi + + - name: Check base commit SHA + if: ${{ !cancelled() }} + run: | + # Заданный SHA, из которого должна быть создана ветка + EXPECTED_SHA="e29acfeee8b29ec6b18d3f4cfa0c1833293a14ec" + + # SHA последнего коммита в ветке PR + HEAD_SHA=${{ github.event.pull_request.head.sha }} + + # Проверяем, содержит ли история ветки PR ожидаемый SHA + if git merge-base --is-ancestor "$EXPECTED_SHA" "$HEAD_SHA"; then + echo "Success: PR branch is based on expected commit SHA" + else + echo "Error: PR branch is not based on expected commit SHA" + exit 1 + fi From 1f121c456b1d3c26131e9fdcedc4ef871bb8979d Mon Sep 17 00:00:00 2001 From: Dmitry Astankov Date: Sun, 27 Aug 2023 21:33:17 +0300 Subject: [PATCH 6/7] Update experiment.txt update experiment2 --- experiment.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/experiment.txt b/experiment.txt index c150373..9ca3636 100644 --- a/experiment.txt +++ b/experiment.txt @@ -1 +1,2 @@ -This line was added in the master branch! +This line was added in the experiment branch! + From 9f2dc7742719b6c8d10c3ffcf158d6684bce741d Mon Sep 17 00:00:00 2001 From: Lera Date: Fri, 22 May 2026 11:43:09 +0800 Subject: [PATCH 7/7] This line was added in the homework branch! rebase2 --- experiment.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/experiment.txt b/experiment.txt index 9ca3636..ec42c20 100644 --- a/experiment.txt +++ b/experiment.txt @@ -1,2 +1 @@ -This line was added in the experiment branch! - +This line was added in the homework branch!