{"id":26287242,"url":"https://github.com/alei1180/open-source-contributor-guide","last_synced_at":"2025-08-19T01:08:00.951Z","repository":{"id":281678702,"uuid":"945390172","full_name":"alei1180/open-source-contributor-guide","owner":"alei1180","description":"Open Source Contributor Guide. Руководство для контрибьюторов в проекты с открытым исходным кодом.","archived":false,"fork":false,"pushed_at":"2025-04-28T12:56:07.000Z","size":152,"stargazers_count":24,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-07T18:39:19.695Z","etag":null,"topics":["1c","1c-enterprise","bsl","contributor","github","guide","hacktoberfest","open-source","opensource"],"latest_commit_sha":null,"homepage":"https://alei1180.github.io/open-source-contributor-guide/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alei1180.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-09T10:02:03.000Z","updated_at":"2025-04-28T13:23:21.000Z","dependencies_parsed_at":"2025-03-10T15:41:42.049Z","dependency_job_id":"c5de6fc8-2f43-48d8-b328-bc246eef2ffe","html_url":"https://github.com/alei1180/open-source-contributor-guide","commit_stats":null,"previous_names":["alei1180/open-source-contributor-guide"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/alei1180/open-source-contributor-guide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alei1180%2Fopen-source-contributor-guide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alei1180%2Fopen-source-contributor-guide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alei1180%2Fopen-source-contributor-guide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alei1180%2Fopen-source-contributor-guide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alei1180","download_url":"https://codeload.github.com/alei1180/open-source-contributor-guide/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alei1180%2Fopen-source-contributor-guide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271083666,"owners_count":24696342,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["1c","1c-enterprise","bsl","contributor","github","guide","hacktoberfest","open-source","opensource"],"created_at":"2025-03-14T21:19:14.272Z","updated_at":"2025-08-19T01:08:00.942Z","avatar_url":"https://github.com/alei1180.png","language":null,"readme":"![](img/oscg-logo-readme.png)\n\n# Руководство для контрибьюторов в проекты с открытым исходным кодом\n\nПошаговое руководство для желающих внести свои изменения в открытый проект и правильно оформить запрос на слияние (`Pull Request`).\n\n## Зависимости\n\n* Скачать и установить [git](https://git-scm.com/downloads) под вашу ОС\n\n## Минимальная настройка git для работы\n\n* Установить Имя автора, от которого будут совершаться изменения\n\n  ```shell\n  git config --global user.name \"Ivan Ivanov\"\n  ```\n\n* Установить email, от которого будут совершаться изменения\n\n  ```shell\n  git config --global user.email ivan-ivanov@gmail.com\n  ```\n\n* Установить имя интеграционной ветки по умолчанию\n\n  ```shell\n  git config --global init.defaultBranch main\n  ```\n\n* Установить настройку корректного отображения кириллицы в путях\n\n  ```shell\n  git config --global core.quotePath false\n  ```\n\n* При необходимости изменить редактор по умолчанию вместо стандартного редактора `vim`, на тот который вам по душе (редактор используется для ввода сообщений коммитов)\n\n  ```shell\n  git config --global core.editor code\n  ```\n\n* Посмотреть текущие настройки `git`\n\n  ```shell\n  git config --list --show-origin\n  ```\n\n## Найдите проект на GitHub\n\n* Найти интересущий вас проект на [GitHub](https://github.com/)\n* Изучить документацию проекта и правила по его доработке (если таковые есть)\n\n## Создайте issue под задачу\n\n\u003e Каждая новая функция или исправление бага должны быть привязаны к `issue` (задаче, тикету). Это помогает организовать работу в одном месте: там можно найти всю историю запросов на слияние (`Pull Request`), комментарии участников и принять участие в обсуждении задачи.\n\n* В оригинальном проекте автора на `GitHub` зайти в раздел `issue`\n* Убедиться, что под задачу, над которой вы собираетесь работать есть `issue`\n* Если `issue` существует - убедиться, что никто не взял его в работу\n* Если `issue` не существует - создать, перед этим ознакомится с кратким руководством [GitHub issues](https://docs.github.com/ru/issues/tracking-your-work-with-issues/configuring-issues/quickstart/)\n* Оставить комментарий, чтобы другие участники знали, что вы работаете над этой задачей\n\n## Сделайте Fork репозитория проекта\n\n\u003e `Fork` - это не команда `Git`, это функция хостингов репозитория (например `GitHub`). `Fork` делает копию проекта из профиля автора в ваш профиль. При этом адрес репозитория,  в который вы будете вносить доработки физически меняется - он теперь в вашем профиле. Эта технология позволяет легко производить доработки проекта, отправляя их затем в ваши форк-репозитория, так как вам не потребуется запрашивать права, чтобы внести изменения в оригинальный репозиторий автора.\n\n* В оригинальном репозитории автора в правом верхнем углу страницы нажать на меню `Fork` и выбрать `Create a new fork`\n\nЕсли форк репозитория уже был создан ранее перейдите к следующему шагу.\n\n## Синхронизируйте Fork из веб интерфейса GitHub\n\n\u003e Синхронизировать ваш fork-репозиторий необходимо чтобы поддерживать его в актуальном состоянии относительно оригинального репозитория автора. Синхронизируя fork-репозиторий мы догоняем по изменениям оригинальный репозиторий проекта.\n\n* Из своего профиля на `GitHub` перейдите к `fork-репозиторию`, который вы создали на прошлом шаге\n* Над списком файлов нажмите на меню `Sync fork` затем `Update branch`\n* Если синхронизация выполнена успешно или `fork-репозиторий` содержит последние изменения из оригинальногое репозитория, то при последующем нажатии на `Sync fork` вы увидите надпись `This branch is not behind the upstream`\n\n## Склонируйте Fork на локальную машину\n\n\u003e Клонирование на локальную машину необходимо для непосредственного внесения доработок по вашей задаче (`issue`)\n\n* В вашем `fork-репозитрии` на `GitHub` нажмите на кнопку `Code` (находится над кнопкой `Sync fork`) и скопируйте ссылку на закладке `HTTPS`, обычно она имеет вид `https://github.com/ваш-профиль/форк-репозиторий.git`\n* Откройте консоль на вашей локальной машине\n* Перейдите в папку где хранятся (или планируете хранить) `git` проекты\n* Склонируйте `fork-репозиторий` с помощью команды\n\n  ```shell\n  git clone https://github.com/ваш-профиль/fork-репозиторий.git\n  ```\n\n* При успешном клонировании вы увидите созданную директорию с названием проекта\n\nЕсли клон репозитория уже был создан ранее перейти к следующему шагу.\n\n## Создайте функциональную ветку под задачу в локальном репозитории\n\n\u003e Ветки позволяют разработчику сохранять разные изменения полностью независимо друг от друга. Вы можете работать над разными вещами одновременно, не смешивая изменения между собой. Ветка отражает историю коммитов. Ветки - это разные истории коммитов. Ветка - это просто ссылка на коммит по его ID, эта ссылка каждый раз обновляется когда вы делаете новый коммит. В любой момент времени можно создать новую ветку, переключиться между ветками, отказаться от ветки (т.е. отказаться от всей работы, которую вы в неё вложили), объединить ветки.\n\n* Перейти в рабочий каталог (локальный репозиторий)\n\n  ```shell\n  cd projects/название-склонированного-репозитрия\n  ```\n\n* Переключиться на ветку `main`\n\n  ```shell\n  git checkout main\n  ```\n\n* Догнать в локальном репозитории изменения `fork-репозитория`\n\n  ```shell\n  git pull\n  ```\n\n* Создать локальную ветку под задачу\n\n  ```shell\n  git checkout -b feat/37/issue-name\n  ```\n\n  * `feat` - тип коммита ([соглашение о коммитах](https://www.conventionalcommits.org/ru/v1.0.0/))\n  * `37` - номер задачи `issue` в основном репозитории проекта на `GitHub`, позволяет при использовании команды `git status` сразу держать его перед глазами не тратя времени на поиски задачи\n  * `issue-name` - наименование задачи, обычно просто берется название задачи (`issue`) на `GitHub` переводится в нижний регистр, пробелы заменяются на дефисы и осталвяют только значимые слова. Помните давая четкое, но краткое описание задачи, вы облегчаете себе понимание о чем это задача, или на каком моменте вы остановились, переключаясь между ветками\n\n## Внесите изменения в локальный репозиторий по задаче\n\n* Напишите код, который решает вашу задачу\n* Проверьте, что ваш код работает и ничего не ломает (проведите unit-тестирование)\n* При необходимости дополните документацию проекта описывающую ваши изменения\n\n## Добавьте ваши изменения по задаче в локальном репозитории в индекс\n\n\u003e Команда `git add` создаёт копию файла, помещает его в индекс (специальную область для временного хранения данных) и начинает отслеживать все последующие изменения. Файлу присваивается статус \"подготовленный\" (`staged`), что означает его готовность к фиксации в коммите. Индекс можно сравнить с черновиком, где вы можете вносить правки до момента, пока не решите зафиксировать изменения. Каждый зафиксированный коммит сохраняет состояние файлов таким, каким оно было на момент добавления в индекс.\n\n* После изменений проверьте состояние вашего репозитория, и убедитесь что изменения коснулись только файлов над которыми вы работали\n\n  ```shell\n  git status\n  ```\n\n* При необходимости посмотрите детали по вашим изменениям (разницу между текущим состоянием репозитория и последним коммитом)\n\n  ```shell\n  git diff\n  ```\n\n* Добавьте изменения в индекс\n\n  ```shell\n  git add file-1 file-2\n  ```\n\n  * Можно добавить все измененные файлы в индекс в текущей директории без ручного перечисления командой `git add .`\n\n## Зафиксируйте ваши изменения по задаче в локальном репозитории\n\n\u003e Команда `git commit` фиксирует все изменения в файлах, предварительно добавленных в индекс (`git add`), сохраняя их в объектной базе `Git` и помечая как неизменяемые. Каждый коммит представляет собой фиксацию состояния файлов на определённый момент времени. По сути, коммит — это снимок всех изменений, которые были включены в индекс. Он сохраняет состояние индекса в тот момент, когда вы решили зафиксировать изменения. Важно сопровождать коммит пояснительным сообщением, описывающим внесённые изменения. В процессе создания коммита формируется объект, который содержит метаданные, такие как ссылка на зафиксированные файлы, имя и электронная почта автора, временная метка коммита и текстовое сообщение.\n\n* Проверьте состояния репозитория после добавления измененных файлов в индекс, текст вывода должен содержать сообщение `Changes to be commited` под которым будет список файлов, которые были добавлены в индекс\n\n  ```shell\n  git status\n  ```\n\n* Зафиксируйте (`commit`) изменения\n\n  ```shell\n  git commit\n  ```\n\n* После ввода команды откроется встроенный редактор для редактирования сообщения коммита\n* Введите сообщение коммита\n\n  ```shell\n  feat: добавить обработчик редактирования текста (#37)\n  ```\n  \n  * `feat` - тип коммита ([соглашение о коммитах](https://www.conventionalcommits.org/ru/v1.0.0/))\n  * `37` - номер задачи `issue` в основном репозитории, необходимо чтобы привязать коммит к `issue` на `GitHub`\n\n\u003e #### Правила написания хороших сообщений коммитов\n\u003e\n\u003e * Всегда пишите осмысленные сообщения коммитов, это позволит вам легко понять цель внесённых изменений, если в будущем потребуется вернуться к этому коммиту в истории проекта\n\u003e * Рекомендуется использовать повелительное наклонение в сообщениях коммитов. Вместо фраз вроде \"обновлена документация проекта\" или \"исправлена ошибка авторизации\", формулируйте сообщения так, будто вы даёте команду компьютеру. Например, напишите \"обновить документацию проекта\" или \"исправить ошибку авторизации\".\n\u003e * Используйте команду `git commit` без флага `-m` и каких либо флагов вообще - это вызовет открытие вашего редактора для сообщения коммита по умолчанию, где вы можете написать осмысленное хорошее сообщение коммита. Плюс данного подхода так же в том, что в редакторе можно вводить спец символы, которые достаточно сложно бывает экранировать при вводе сообщение коммита прямо в командной строке\n\u003e * Пишите сообщение коммита так же, как вы пишите электронное письмо - с заголовком и, необязательно, с телом\n\u003e * Заголовок коммита от тела отделяется пустой строкой\n\u003e * В заголовке коммита постарайтесь кратко описать, о чем этот коммит\n\u003e * Если вам нужно уточнить, почему было сделано это изменение опишите это в теле коммита\n\u003e * Сообщение коммита должно фокусироваться на \"причинах\" изменения, а не на том \"как\" или \"что\" сделано. Конечно, это не всегда возможно, но об этом стоит помнить\n\u003e * Тип коммита обычное следует из типа задачи, которую вам поставили, лучше заранее посоветоваться с командой и задокументировать список типов, чтобы использовать их единообразно\n\u003e * Помните что опечатку в тексте коммита, можно исправить применением флага `--amend`\n\n## Отправьте свои изменения из локального репозитория в удаленный Fork репозиторий на GitHub\n\n* Отправьте изменения в ваш удаленный `fork-репозиторий` на `GitHub`\n\n  ```shell\n  git push -u origin feat/37/issue-name\n  ```\n\n## Создайте запрос на слияние (Pull Request) из Fork репозитория в оригинальный репозиторий проекта\n\n\u003e `Pull Request` позволяет создать запрос на слияние одной ветки в другую (в обычном случае запрос на слияние рабочей ветки в интеграционную) в удаленном репозитории. Создавая `pull request` мы показываем коллегам свои намерения выгрузить свою работу в интеграционную ветку, и они видят какие изменения будут внесены.\nЗапрос на слияние также дает возможность вашим коллегам предложение о том, как бы вы могли улучшить или изменить вашу работу.\nМожно назначать конкретных рецендентов, отвественных за просмотр запроса и принятия решения о том, что работа выполнена качественно и точно.\nВы можете рассматривать запрос на слияние, как публичное слияние с голосованием - ваши коллеги получат возможность просмотреть вашу работу, прежде чем она станет частью целого.\n\n* Перейдите в свой `fork-репозиторий` на `GitHub` и нажмите `Pull Request`\n* Выберите свою ветку\n* В комментарии напишите `Close #37` - это позволит связать запрос на слияние (`Pull Request`) и задачу (`issue`) по ее номеру, и если ваши дороботки будут слиты с интеграционной веткой - задача будет автоматически закрыта благодаря такому связыванию\n\n\u003e Если после запроса на слияние вам делают замечание, которое надо исправить, вы можете открыть свою локальную ветку внести в нее требуемые изменения сделать коммит и повторно выгрузить ветку в удаленный репозиторий, и снова подать запрос на слияние, при этом старый запрос (`pull request`) будет автоматически обновлен, чтобы отразить все коммиты в вашей ветке, и ваши коллеги могут посмотреть его повторно, чтобы убедиться что замечание было устранено.\n\n## Ожидайте реакции автора оригинального репозитория\n\n* В идеальном случае ваши доработки будут одобрены и слиты в интеграционную ветку оригинального проекта\n* Автор так же вправе сделать вам предложения доработать ваши изменения, если он посчитает, что изменения в них нуждаются\n\n## Удалите функциональную ветку\n\n\u003e Удаление функциональных веток после слияния не приносит никакого вреда - история коммитов остаётся. Удаление функциональной ветки до слияния завершится ошибкой.\n\n* После слияния вашей функциональной ветки с интеграционной веткой автора, [синхронизируйте](#синхронизируйте-fork-из-веб-интерфейса-github) (догоните) эти изменения в вашем `fork-репозитории`\n* Удалите функциональную ветку в `fork-репозитории` в разделе `branches` (`https://github.com/имя-профиля/проект/branches`)\n* Обновите ваш локальный репозиторий из `fork-репозитория`:\n  * переключитесь на интеграционную ветку\n    \n  ```shell\n    git checkout main\n  ```\n\n  * обновите локальный репозиторий\n\n  ```shell\n    git pull\n  ```\n\n* Так как теперь интеграционная ветка содержит все последние изменения, включая ваши доработки, удалите функциональную ветку\n\n```shell\n  git branch -d имя-функциональной-ветки\n```\n\n## Обновить ветки слежения\n\n* Очистите все [ветки слежения](https://git-scm.com/book/ru/v2/Ветвление-в-Git-Удалённые-ветки) (`remote`), у которых больше нет объекта в удаленном репозитории и получите все новые ветки и коммиты, которые отображаются на удаленном сервере следующей командой:\n\n```shell\n  git fetch --prune\n```\n\n## Ссылки на полезные материалы\n\n* [Pro Git](https://git-scm.com/book/ru/v2)\n* [Head First Git](https://i-love-git.com/)\n* [Conventional Commits](https://www.conventionalcommits.org/ru/v1.0.0/)\n* [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/)\n* [Oh Shit, Git!?!](https://ohshitgit.com/ru)\n* [email + git = \u003c3](https://git-send-email.io/)\n* [Learn Git Branching](https://learngitbranching.js.org/)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falei1180%2Fopen-source-contributor-guide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falei1180%2Fopen-source-contributor-guide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falei1180%2Fopen-source-contributor-guide/lists"}