8 ответов
Лучший ответ
Это означает, что ветвь еще не защищена, потому что в пустом репо ее нет.
Чтобы «Включить / отключить защиту филиалов», необходимо быть главным или владельцем проект GitLab (которым вы являетесь).
Убедиться:
- ваш первый толчок — ;
- удаленный ссылается на правильный репо ();
- ваш локальный ключ ssh правильный ();
- Вы являетесь участником группы .
9
Community
23 Май 2017 в 12:26
Это означает, что у вас может быть ветка , но она защищена в настройках проекта. Видеть:
как это исправить: вам запрещено вставлять код в защищенные ветви этого проекта или https://gitlab.com/gitlab-com/support-forum/issues/207.
Чтобы получить доступ к настройкам проекта и снять защиту с ветки, вам необходимо иметь достаточные права.
4
CoolMind
30 Май 2017 в 10:56
Возможно, мастер ветка открывает защиту. Вам нужно выбрать разработчика, чтобы нажать в настройках ветки защиты.
-2
Depth Y
26 Июл 2018 в 08:46
12/17/2018
5. может добавить защиту
17
山茶树和葡萄树
17 Дек 2018 в 03:45
У меня была похожая проблема — конвейер / задание CI / CD для проекта жаловалось на то, что он не может извлечь код из защищенной ветви частного репозитория на автономном экземпляре GitLab.
В моем случае я мог манипулировать репозиториями и извлекать код напрямую с помощью git, потому что у меня были полные права администратора в GitLab. В итоге получается, что GitLab Runner не разрешили клонировать репозиторий, потому что мой пользователь не был прямым членом группы проекта.
zorlem
9 Июн 2020 в 13:44
Настройки> Репо> Развернуть .. работало для меня Несколько веток может быть защищено. Имейте в виду, что основная ветвь защищена по умолчанию. Само собой разумеется, что мастер сможет фиксировать защищенные ветви.
Проверьте: https://gitlab.com/gitlab-org/gitlab -foss / — / вопросы / 51741
vine_J
30 Май 2020 в 17:33
В GitLab некоторые ветки могут быть защищены. По умолчанию только «главный» пользователь может зафиксировать защищенные ветви, а главная ветка защищена по умолчанию.
Вы можете включить и выключить защиту для выбранных веток в настройках проекта (перейдите в проект: «Настройки» -> «Хранилище» -> «Развернуть» в «Защищенные ветки»).
На той же странице настроек вы также можете разрешить разработчикам проталкивать защищенные ветки. Если этот параметр включен, защита будет ограничена отклонением операций, требующих git push —force
4
7wick
9 Янв 2019 в 04:58
Проект: «Настройки» -> «Защищенные ветви» (если вы хотя бы «Мастер» данного проекта).
Затем нажмите «Снять защиту» или «Разработчики могут нажать»
1
aristotll
13 Сен 2018 в 07:17
Настройка GitLab
На стороне GitLab нам необходимо настроить runner и создать файл .gitlab-ci.yml. Подробно процесс описан в инструкции Настройка CI/CD в GitLab для синхронизации проекта с веб-серверами.
Теперь необходимома на компьютере с установленным раннером установить клиента vault. По сути, последний не подразделяется на сервер и клиента — подробнее читаем в инструкции . В случае использования Docker-контейнера как среды запуска pipeline, необходимо использовать образ с клиентом vault внутри — об этом также написано в вышеозвученной статье.
Акцентируем внимание на тестовом сценарии. И так, в корне проекта создаем файл .gitlab-ci.yml со следующим содержимым:. stages:
— test_vault
test:
stage: test_vault
script:
— echo $CI_COMMIT_REF_NAME
— export VAULT_SKIP_VERIFY=true
— export VAULT_ADDR=https://10.0.2.5:8200
— export VAULT_TOKEN=»$(vault write -field=token auth/jwt/login role=project-test jwt=$CI_JOB_JWT)»
— export LOGIN=»$(vault kv get -field=login secret/projects/test/mariadb)»
— export PASSWORD=»$(vault kv get -field=password secret/projects/test/mariadb)»
— echo $LOGIN
— echo $PASSWORD
stages:
— test_vault
test:
stage: test_vault
script:
— echo $CI_COMMIT_REF_NAME
— export VAULT_SKIP_VERIFY=true
— export VAULT_ADDR=https://10.0.2.5:8200
— export VAULT_TOKEN=»$(vault write -field=token auth/jwt/login role=project-test jwt=$CI_JOB_JWT)»
— export LOGIN=»$(vault kv get -field=login secret/projects/test/mariadb)»
— export PASSWORD=»$(vault kv get -field=password secret/projects/test/mariadb)»
— echo $LOGIN
— echo $PASSWORD
В нашем проекте переходим в раздел CI/CD — Pipelines и запускаем наш сценарий. После окончания его работы кликаем по значку зеленой галочки и в открывшейся странице кликаем по нашей единственной стадии:
Мы должны увидеть наши логин и пароль, которые GitLab запросил у Vault.
Requirements
To run Secret Detection jobs, by default, you need GitLab Runner with the
or
executor.
If you’re using the shared runners on GitLab.com, this is enabled by default.
cautionOur Secret Detection jobs expect a Linux container type. Windows containers are not supported.
cautionIf you use your own runners, make sure the Docker version installed
is not . See for details.
Making Secret Detection available to all GitLab tiers
To make Secret Detection available to as many customers as possible, we have enabled it for all GitLab tiers.
However not all features are available on every tier. See the breakdown below for more details.
Summary of features per tier
Different features are available in different GitLab tiers,
as shown in the following table:
Capability | In Free & Premium | In Ultimate |
---|---|---|
View | ||
Presentation of JSON Report in Merge Request | ||
View identified secrets in the pipelines’ Security tab | ||
Interaction with Vulnerabilities | ||
Access to Security Dashboard |
Настройка Vault
Разрешим механизм работы с секретами по пути secret:
vault secrets enable -path=secret/ kv
Создадим секрет по пути secret/projects/test/mariadb и добавим 2 записи:
vault kv put secret/projects/test/mariadb login=testuser password=testpassword
* в созданном секрете будет храниться две пары login=testuser и password=testpassword. Именно эти данные мы и должны будем получить в GitLab.
Разрешаем механизм JWT:
vault auth enable jwt
Создаем политику доступа к секрету:
vault policy write project-test — <<EOF
path «secret/projects/test/*» {
capabilities =
}
EOF
* политика с названием project-test описывает доступ только на чтение к секрету secret/projects/test.
Создаем роль:
* где обратим внимание на:
- role_type — роль типа jwt (JSON Web Token) для создания токенов доступа, основанный на формате JSON.
- policies — привязываем роль к ранее созданной политике.
- project_id — идентификатор проекта в GitLab, к которому будет привязана данная роль. Другие проекты не смогут взаимодействовать с ней и получать доступ к секретам.
Настраиваем конфигурацию для проверки запросов от гитлаба:
vault write auth/jwt/config jwks_url=»http://gitlab.dmosk.com/-/jwks» bound_issuer=»gitlab.dmosk.com»
* данная настройка скажет нашей системе Vault, что можно принимать запросы jwt от узла gitlab.dmosk.com.
Как перенести изменения из локального репозитория в удаленный репозиторий в Git
Чтобы протолкнуть некоторые изменения в удаленный репозиторий, этот репозиторий должен, прежде всего, содержать некоторые коммиты в локальной системе. Поэтому в этом разделе мы сначала создадим некоторые изменения в репозитории. Во-вторых, мы зафиксируем эти изменения и, наконец, отразим их в удаленном репозитории.
Перед созданием изменений в репозитории убедитесь, что вы выполнили следующие операции:
- У вас раздвоенный репозитория на GitHub.
- Вы клонировали один и тот же репозиторий на локальную машину.
В качестве хорошей практики сначала проверьте, что у вас есть чистый репозиторий с помощью команды git status (никаких ожидающих изменений для фиксации).
После выполнения команды git status появятся следующие строки:
On branch master: означает, что в данный момент мы находимся в главной ветви. Поскольку других ветвей пока нет, мы по умолчанию находимся в главной ветви.
Your branch is up to date with origin/master: Origin — это имя удаленного репозитория, которое мы дали при подключении локального репозитория к удаленному репозиторию.
Последовательность действий
- Перечислите все файлы с командой ls в репозитории.
Так как существует только один файл (README.md это всего лишь инструкция), давайте внесем некоторые изменения в его содержание.
- Откройте файл с помощью вашего любимого редактора и внесите в него любые изменения.
- Мы изменили файл на следующий код.
- Добавьте внесенные изменения в промежуточную область и зафиксируйте их.
Примечание: GitHub и Git распознают любые изменения только через коммиты (commits). Если пользователь не зафиксировал изменения и пытается протолкнуть их на GitHub, он отобразит сообщение “Everything is up-to-date”
- Введите следующую команду, чтобы перенести эти изменения в репозиторий GitHub, и нажмите клавишу enter.
git push origin master
- Пользователь получает приглашение предоставить учетные данные с помощью GitHub в качестве части безопасности. Введите свои учетные данные и нажмите на кнопку входа в систему.
- Как только пользователь получит одобрение и изменения объединятся, он получит следующее сообщение в Git Bash.
Примечание: последние две строки выглядят следующим образом:
https://github.com/harishrajora805/ToolsQA.git: URL-адрес репозитория, который отражает изменения.
1в4522а..285f559: показывает хэш-значение обеих ветвей. Таким образом, хэш-значение конечного коммита, отраженного на GitHub, равно 285f559.
master -> master: строка master — > master показывает исходную ветвь, из которой происходит слияние с целевой ветвью. В приведенном выше сценарии обе ветви являются главными.
Строка Writing Objects: 100% имеет важное значение. В Git можно сказать, была ли команда push выполнена успешно или нет, только взглянув на эту строку
Если она показывает 100%, то все изменения успешно перенесены в облако.
Наряду с простой и понятной командой, которую мы обсуждали выше, как и любую другую команду в Git, мы можем использовать параметры при выполнении команды для достижения конкретной задачи. Например, если вы хотите протолкнуть все ветви, вы будете использовать опцию all и так далее. Давайте рассмотрим некоторые из вариантов в Git.
Подмодули
Клонирование репозитория с подмодулями
При клонировании репозитория вам необходимо инициализировать и обновить подмодули:
Запуск данной команды эквивалентен запуску команды:
после обычного клонирования репозитория
Обновление подмодулей
Подмодуль ссылается на конкретную коммит в другом репозитории. Чтобы получить
точное состояние всех подмодулей необходимо запустить:
Для получения состояния последнего коммита всех подмодулей необходимо выполнить
следующую команду:
или использовать аргументы по умолчанию команды git pull:
Эта команда просто обновляет локальную рабочую копию. При запуске команды git status
каталоги подмодулей будут показаны изменёнными. Чтобы обновить репозиторий необходимо
зафиксировать изменения:
Для получения состояние последнего коммита конкретного подмодуля необходимо использовать команду:
Добавление подмодулей
В текущий проект можно включить другой репозиторий Git в качестве папки, отслеживаемый Git:
После этого необходимо добавить и зафиксировать новый файл .gitmodules. В нём описано
какие подмодули следует клонировать при запуске команды git submodule update
Что такое непрерывная интеграция?
Непрерывная интеграция, или CI, это техническая практика, которая заключается в том, что каждый член команды интегрирует свой код в общий репозиторий хотя бы раз в день, причём результирующий код при этом должен хотя бы собираться без ошибок.
Существуют разночтения по поводу этого термина
Предметом спора является частота интеграции. Некоторые утверждают, что объединять код лишь раз в день недостаточно на самом деле интегрироваться непрерывно. В пример приводится команда, где все берут свежий код утром и интегрируются один раз вечером. Хотя это и разумное возражение, всё же в целом считается, что вариант определения «раз в день» достаточно практичен, конкретен, и подходит для команд разных размеров.
Другое возражение состоит в том, что C++ давно не единственный язык, используемый при разработке, и простое требование сборки без ошибок, как способ валидации, слабовато. Некий набор тестов (например, модульных(unit), выполняемых локально) также должен завершиться успешно. В данный момент, сообщество тяготеет к тому, чтобы такое требование было обязательным, и, в будущем «сборка + модульные тесты», видимо, станет общепринятым, если это уже не произошло.
Непрерывная интеграция отличается от непрерывной поставки (Continuous Delivery, CD) тем, что не требует релиз-кандидата после каждого цикла интеграции.
Список шагов, который мы будем использовать на протяжении курса
- Pull in the latest code. Create a branch from . Start working.
- Create commits on your new branch. Build and test locally. Pass? Go to the next step. Fail? Fix errors or tests and try again.
- Push to your remote repository or remote branch.
- Create a pull request. Discuss the changes, add more commits as discussion continues. Make tests pass on the feature branch.
- Merge/rebase commits from master. Make tests pass on the merge result.
- Deploy from the feature branch to production.
- If everything is good in production for some period of time, merge changes to master.
How we define permissions
By basing permissions on simple principles and adding protected branches,
GitLab allows you to set up any type of workflow, while protecting your code from easily made mistakes.
Underlying this elegant scheme is a surprisingly simple authorization gem,
Six.
In a single class , we have defined a number of class methods to set the permissions.
For instance, for Developer:
Six has defined an method that check whether a permission exists for a certain object,
based on the abilities that you’ve defined for that class (such as above for Developer).
To make use of a similar syntax as the often-used Cancan authorization gem, you can define a similar method with Six:
Then all we have to do is check the permission wherever we need it.
For instance to check whether someone is allowed to destroy a snippet:
By using the plain-ruby approach of Six you get a very flexible
and expendable authorization solution.
In GitLab we leverage this to create easy to understand permissions
that reflect how most organisations use GitLab.
Create a protected branch
When a protected branch or wildcard protected branches are set to
,
Developers (and users with higher permission levels) are
allowed to create a new protected branch as long as they are
.
This can only be done by using the UI or through the API, to avoid creating protected
branches accidentally from the command line or from a Git client application.
To create a new branch through the user interface:
- Go to Repository > Branches.
- Click on New branch.
- Fill in the branch name and select an existing branch, tag, or commit to
base the new branch on. Only existing protected branches and commits
that are already in protected branches are accepted.
Конфликт слияния
Перейдите к запросу на внесение изменений Steps review.
Несмотря на то, что мы не сделали ничего плохого, и тесты для нашего кода прошли успешно, мы все еще не можем осуществить слияние ветки и . Это потому, что другая ветка была объединена с пока мы работали над этим PR.
Это создает ситуацию, когда удаленная ветка имеет более новую версию, чем та, на которой мы основывали ветку . Из-за этого мы не можем просто перемотать HEAD до конца ветки . В этой ситуации нам нужно либо осуществить слияние(merge), либо применить коммиты поверх(rebase) . GitHub на самом деле может выполнять автоматическое слияние, если нет конфликтов. Увы, в нашей ситуации обе ветки имеют конкурирующие изменения в файле . Эта ситуация известна как конфликт при слиянии(merge conflict), и нам нужно разрешить ее вручную.
Merge или rebase
Merge
- Создает дополнительный коммит слияния(merge commit) и сохраняет историю работы.
- Сохраняет исходные коммиты веток с исходными отметками времени и авторами.
- Сохраняет SHA коммитов и ссылки на них в обсуждениях запросов на изменения.
- Требует однократного разрешения конфликтов.
- Делает историю нелинейной.
- Историю может быть трудно читать из-за большого количества веток (напоминает кабель IDE).
- Усложняет автоматическую отладку, например, делает менее полезным — он только найдет коммит слияния.
Rebase
- Воспроизводит коммиты из текущей ветки поверх базовой один за другим.
- Формируются новые коммиты с новыми SHA, в результате чего коммиты в GitHub соотносятся с исходными pull requests, но не с соответствующими комментариями.
- Коммиты могут быть рекомбинированы и изменены в процессе или даже объединены в один.
- Может потребоваться разрешить несколько конфликтов.
- Позволяет поддерживать линейную историю.
- Историю может быть проще читать, если только она не является слишком длинной без разумных на то причин.
- Автоматическая отладка и устранение неполадок несколько проще: делает возможным , может сделать автоматические откаты более чёткими и предсказуемыми.
- Требуется публикации ветви с перенесёнными коммитами с флагом при использовании с запросами на внесение изменений.
Обычно команды соглашаются всегда использовать одну и ту же стратегию, когда им нужно объединять изменения. Это может быть «чистое» слияние или «чистый» применение коммитов поверх или что-то промежуточное, например, выполнение применение коммитов поверх интерактивном режиме() локально для веток, не опубликованных в общем репозитории, но слияние(merge) для «общедоступных» веток.
Здесь мы будем использовать слияние.
️ Задание
- Убедитесь, что код в локальной ветке обновлён из удалённого репозитория.
- Переключитесь на ветку .
- Инициируйте слияние с веткой . Будет сообщено о конфликте слияния, связанном с конкурирующими изменениями в .
- Разрешите конфликт так, чтобы в тексте остался и наш список шагов CI, и замечание о нем.
- Опубликуйте коммит слияния в удаленную ветку .
- Проверьте статус pull request’а в пользовательском интерфейсе GitHub, дождитесь пока слияние не будет разрешено.
Configure multiple protected branches by using a wildcard
Prerequisite:
You must have at least the Maintainer role.
To protect multiple branches at the same time:
- Go to your project and select Settings > Repository.
- Expand Protected branches.
-
From the Branch dropdown menu, type the branch name and a wildcard.
For example:Wildcard protected branch Matching branches , , , , - From the Allowed to merge list, select a role, or group that can merge into this branch. In GitLab Premium, you can also add users.
- From the Allowed to push list, select a role, group, or user that can push to this branch. In GitLab Premium, you can also add users.
- Select Protect.
The protected branch displays in the list of protected branches.
Running Secret Detection in an offline environment
For self-managed GitLab instances in an environment with limited, restricted, or intermittent access
to external resources through the internet, some adjustments are required for the Secret Detection job to
run successfully. For more information, see Offline environments.
Requirements for offline Secret Detection
To use Secret Detection in an offline environment, you need:
- GitLab Runner with the .
- A Docker Container Registry with locally available copy of Secret Detection analyzer images.
- Configure certificate checking of packages (optional).
GitLab Runner has a ,
meaning the runner tries to pull Docker images from the GitLab container registry even if a local
copy is available. The GitLab Runner
in an offline environment if you prefer using only locally available Docker images. However, we
recommend keeping the pull policy setting to if not in an offline environment, as this
enables the use of updated scanners in your CI/CD pipelines.
Make GitLab Secret Detection analyzer image available inside your Docker registry
Import the following default Secret Detection analyzer images from into your
local Docker container registry:
The process for importing Docker images into a local offline Docker registry depends on
your network security policy. Please consult your IT staff to find an accepted and approved
process by which external resources can be imported or temporarily accessed. These scanners are
with new definitions, and you may be able to make occasional updates on your own.
For details on saving and transporting Docker images as a file, see Docker’s documentation on
, ,
, and .
Add the following configuration to your file. You must replace
to refer to your local Docker container registry:
The Secret Detection job should now use the local copy of the Secret Detection analyzer Docker image to scan your code and generate
security reports without requiring internet access.
If support for Custom Certificate Authorities are needed
Support for custom certificate authorities was introduced in the following versions.
Analyzer | Version |
---|---|
secrets | v3.0.0 |
To trust a custom Certificate Authority, set the variable to the bundle
of CA certs that you want to trust in the SAST environment. The value should contain the . For example, to configure this value in the file, use the following:
The value can also be configured as a , either as a , which requires the path to the certificate, or as a variable, which requires the text representation of the certificate.
️ Продолжайте работать и добавлять тесты
Совместная работа над pull request часто приводит к необходимости дополнительной работы. Обычно это результат проверки кода или обсуждения, но в нашем курсе мы собираемся смоделировать это, добавив новые элементы в наш список шагов CI.
При непрерывной интеграции обычно применяется некоторое тестовое покрытие. Требования к покрытию тестами различаются и обычно находятся в документе с названием вроде «руководство для авторов»(contribution guidelines). Мы поступим просто и добавим по тесту для каждой строки в нашем контрольном списке.
При выполнении заданий сначала попробуйте закоммитить тесты. Если вы правильно установили hook ранее, только что добавленный тест будет запущен, не будет пройден, и ничего не будет закоммичено
Обратите внимание: так мы узнаем, что наши тесты действительно что-то проверяют. Любопытно, что если бы мы начали с кода до тестов, прохождение тестов могло означать либо то, что код работает так, как ожидалось, либо что тесты на самом деле ничего не проверяют
Кроме того, если бы мы не написали тесты в первую очередь, мы могли бы вовсе их забыть, поскольку ничто не напоминало бы нам об этом.
Разработка через тестирование (TDD)
TDD рекомендует писать тесты перед кодом. Обычный процесс работы с использованием TDD выглядит так.
- Добавьте тест.
- Запустите все тесты и убедитесь, что новый тест не проходит успешно.
- Напишите код.
- Запустите тесты, убедитесь, что все тесты проходят успешно.
- Проведите рефакторинг кода.
- Повторите.
Поскольку результаты работы тестов, которые не были пройдены успешно, обычно отображается красным, а выполненные успешно — зеленым, цикл также известен как «красный-зеленый-рефакторинг»(red-green-refactor).
️ Задание
Сначала попробуйте закоммитить тесты и дать им завершиться неуспешно, затем добавьте и закоммитьте сам текст списка шагов CI. Вы увидите, что тесты проходят («зеленые»).
Затем опубликуйте новый код в удалённый репозиторий и посмотрите, как выполняются тесты в интерфейсе GitHub в нижней части обсуждения запроса на внесение изменений, и обновляется статус PR.
- Переключитесь на ветку .
-
Добавьте эти тесты в после последнего вызова .
- Попробуйте закоммитить тесты. Если hook установлен, попытка коммита завершится ошибкой.
-
После добавьте этот текст в .
- Внесите и закоммитьте изменения локально.
- Опубликуйте изменения в ветку .
Теперь у вас должно получиться что-то вроде этого
Allow force push on a protected branch
Version history
- Introduced in GitLab 13.10 behind a disabled feature flag.
- Feature flag removed in GitLab 14.0.
cautionThis feature might not be available to you. Check the version history note above for details.
You can allow to
protected branches.
To protect a new branch and enable force push:
- Go to your project and select Settings > Repository.
- Expand Protected branches.
- From the Branch dropdown menu, select the branch you want to protect.
- From the Allowed to push and Allowed to merge lists, select the settings you want.
- To allow all users with push access to force push, turn on the Allowed to force push toggle.
- To reject code pushes that change files listed in the file, turn on the
Require approval from code owners toggle. - Select Protect.
To enable force pushes on branches that are already protected:
- Go to your project and select Settings > Repository.
- Expand Protected branches.
- In the list of protected branches, next to the branch, turn on the Allowed to force push toggle.
When enabled, members who are can push to this branch can also force push.
Инструмент 2: Pull Requests
Pull Requests — отличный способ внести свой вклад в репозиторий, сделав его форк. В конце дня, если мы хотим, мы можем отправить pull request владельцу репозитория, чтобы объединить наши изменения кода. Сам pull request может включать обсуждение качества кода, функций или даже общей стратегии.
Давайте теперь рассмотрим основные шаги для pull request.
Инициирование pull request
В Github есть две модели для pull request:
- Модель Fork & Pull — используется в общедоступном репозитории, на который у вас нет push-доступа
- Share Repository Model — используется в частном репозитории, на который у нас есть push-доступ. В этом случае форк не требуется.
Здесь мы видим рабочий процесс между двумя пользователями ( и ) для модели Fork and Pull:
- Определите репозиторий Github, в который вы хотите внести свой вклад, и нажмите кнопку «Fork», чтобы создать клон репозитория в вашей собственной учетной записи Github:
- Это создаст точную копию репозитория в вашем собственном аккаунте
- Выберите URL-адрес SSH, чтобы он запрашивал вашу парольную кодовую фразу SSH вместо имени пользователя и пароля каждый раз, когда вы делаете или . Затем мы будем клонировать этот репозиторий на наш локальный компьютер:
- Как правило, мы создадим новую ветку git для каждой новой задачи. Это хорошая практика, потому что в будущем, если мы продолжим обновление ветки после некоторых обсуждений, запрос на перенос будет автоматически обновляться. Давайте создадим новую ветку, чтобы внести очень простое изменение в файл :
- После внесения соответствующих дополнений для создания новых функций мы просто передадим новые изменения и проверку в ветку git master:
- На этом этапе мы запушим ветку в удаленный репозиторий. Для этого мы сначала перейдем на ветку с новой задачей, а так же на псевдоним для удаленного репозитория. Затем мы будем пушить изменения с помощью :
- На нашей развязанной странице Github репозитория мы перейдем к ветке с новой функцией, а затем нажмите кнопку «Pull Request».
- После отправки пул реквеста он напрямую приведет нас к странице запроса в исходном репозитории. Мы увидим наш запрос на pull.
- После обсуждения возможно, что владелец форкнутого репозитория может захотеть добавить изменения в новую функцию. В этом случае мы выберем одну и ту же ветку на нашей локальной машине, зафиксируем ее и запушим ее обратно на Github. Когда мы заходим на страницу запроса в оригинальном репозитории, он будет автоматически обновляться!
Слияние пул реквеста
Если вы являетесь владельцем оригинального репозитория, существует два способа слияния входящего пул реквеста:
- Слияние непосредственно на Github: если мы делаем слияние непосредственно на Github, то убедитесь, что нет конфликтов, и реквест готов к объединению в ведущую ветку. Владелец оригинального хранилища может просто щелкнуть зеленую кнопку «Слить запрос», чтобы сделать это:
- Слияние на наших локальных машинах: в других случаях могут возникнуть конфликты слияния, и после нажатия кнопки «Информация» у Github будут четкие инструкции о том, как мы можем объединить ветвь на нашей локальной машине, потянув за изменения из ветви контрибьютера:
Существуют различные модели создания веток, используемые для управления версиями в командах разработки программного обеспечения. Вот две популярные модели рабочего процесса git: (1) рабочий процесс Github, который имеет простую ветвящуюся модель и использует запросы на pull, и (2) Gitflow, который имеет более обширное разветвление. Модель, которая в конечном итоге будет выбрана, определенно будет меняться в зависимости от команды, проекта и ситуации.