Лучшая практика для запросов Pull на GitHub
Я прочитал этот и этот обсуждение, но все еще испытывает проблемы с пониманием лучшего способа сотрудничества на GitHub.
Предположим, что я разветкил репо и разработал его самостоятельно (исходное репо не было активно какое-то время). Таким образом, у меня есть своя ветвь develop
, где я делаю все изменения: ветвление из feature
it, развивающееся там, а затем слияние с develop
. Время от времени я хочу представить PR для оригинального репо. Но я не могу делать PR из feature
, так как он будет включать всю историю develop
. Итак, что я делаю:
- checkout
master
, которые отслеживают исходное репо
- brahnch из него
- вишневый выбор из
feature
и нажмите его в GitHub
- отправить PR
Когда эти PR объединены с master
исходного репо, я вытаскиваю его, а затем объединяю master
в develop
.
Он работает довольно хорошо, но это приводит к умножению идентичных коммитов в моем собственном репо, поэтому я не уверен, что лучший выбор здесь - это выбор вишни?
Ветвление из master
могло бы быть лучше, но часто возникает ситуация, когда я делал функцию-2, зависящую от функции-1; и функция-1 все еще ждет, когда PR будет объединен, но не в master
.
Буду признателен за любые предложения и примеры.
Ответы
Ответ 1
В теории это всегда зависит от проекта, над которым вы работаете, и руководителя проекта.
Вообще говоря, вы выполняете только фиксацию, когда это сборка релиза, или что-то, что может не менее компилироваться без ошибок. Но какой-то проект просто бросает все в мастера.
Воистину, в моих собственных проектах и мнениях ваши запросы на тягу должны быть помещены в основные ветки Развить, а затем, когда придет время, все от разработки объединяется в master.
Ваш рабочий процесс в основном останется прежним. Branch из разработать, чтобы создать новую функцию -X, зафиксировать функцию-X, а затем отправить запрос на перенос на функция-X. После того, как вы слились в develop, вы потянете это и продолжаете работать; или просто объединить его на своей личной вилке и продолжить работу, git должен понимать. Как только руководитель проекта почувствует, что проект находится в следующей версии, он/она будет сливаться с мастером.
Посмотрите на эту 5 минут: Понимание потока GitHub.
Ответ 2
Я согласен с Райеном, что это зависит от того, какой проект.
На моей работе мы создали довольно хорошую систему, с которой мы все согласились.
- Начните с последнего мастера.
- Работа над вашей разработкой или художественная работа
-
git add -p
(для ваших изменений) или git add <filename>
для новых дополнений -
git checkout -b new-branch-name
-
git commit -m "whatever you feel should be said"
-
git pull -r origin master
-
git push origin new-branch-name
- откройте PR и дождитесь 2 одобрений
- слиться с мастером
- удалить новое -b ранчо
После этого мы просто возвращаемся к мастеру и повторяем. Если кто-то запрашивает изменения, мы храним все, над чем работаем, и checkout new-branch-name
запрошенные изменения, снова git pull -r origin master
, затем git push -f origin new-branch-name
, затем checkout master
и git stash pop
. Иногда вы попадаете в то место, где вам нужны внесенные вами изменения, в этом случае мы просто продолжаем работать над этим новым -b ранчо-именем и не удаляем его локально, только на github или чем-либо еще, что вы используете.
Я знаю, что сломал стиль Барни, но я не хотел что-то пропустить. Не стесняйтесь использовать его. Это также хорошо работает для нас, потому что мы много говорим и сотрудничаем. Что касается разветвленных репозиториев и PRS, просто откройте PR, когда вы довольны тем, над чем работали. Я не от всей души согласен с целым: от ветки master до ветки dev, а затем от этого ветки. Мастер должен быть всегда готов, а затем, если вы придерживаетесь этих персон, вам не нужно беспокоиться. Кроме того, если вы боитесь большого пиара, не стесняйтесь требовать, чтобы несколько человек просмотрели его, и это не должно быть просто два. У нас всего 6 человек, поэтому у нас работают 2 человека. Надеюсь, это поможет.
Ответ 3
Учитывая комментарий, опубликованный OP на Ryen Nelsen, ответьте:
... master/develop разделение на самом деле не проблема - обычно я следую парадигме gitflow. Что мне интересно - как отправить pull-запрос только для функции-X, учитывая, что моя разработка намного опережает исходный репозиторий? Я использую вишневый сбор, но это лучший способ?
Я спрошу: что вы имеете в виду, что ваш ветвь develop
намного опережает исходный репозиторий (что я буду называть ветвью master
с этого момента)? Что все остальные в вашей ветке develop
?
Похоже, что вы завершаете значительное развитие в develop
, которое не входит в master
в краткосрочной перспективе. В этой ситуации создайте отдельную ветвь функции для каждого запроса/проблемы/увеличения/увеличения, который вы работаете над этим, будет отправлен в master
.
Если вы будете осторожны, вы можете минимизировать различия между различными ветвями функций, включая взаимозависимости, обсуждаемые в цитате. Например, предположим, что вы поддерживаете develop
и пытаетесь отправить запросы на растяжение на master
для fea1
и fea2
.
- Настройте 2 ветки функций off master и Cherry-pick или Rebase из до
fea1
и fea2
, пока они не будут иметь необходимую базу существующий develop
изменяет ваши исправления.
- Если есть взаимозависимости, это означает, что вы будете вишней - выберите некоторые из тех же самых коммитов для каждой ветки признаков или закончите разработку нового кода, который будет объединен или пересоздан между двумя ветвями функций.
- Разработайте новые исправления для
fea1
и fea2
и слейте (или rebase/squash) в develop
, как вы сочтете нужным. Слияние в этом контексте, где вы только один, развивающийся в этом репо, прост - вы будете работать только с одним из develop
, fea1
или fea2
за раз, поэтому слияние действительно будет которые вы должны решить в любом случае...
После подготовки запросов на вытягивание вы можете оставить fea1
и fea2
сидящими в своих отдельных ветвях и продолжить работу над develop
отдельно. Между тем, поскольку запросы Pull Request получают обратную связь, вы всегда можете проверить fea1
или fea2
и обновить их, возможно, требуя слияния от fea1
до fea2
или наоборот, и, вероятно, также потребуется объединить новый коммит (s ) назад, чтобы развиться, чтобы он оставался актуальным.
Как только PR будут приняты, вы можете очистить все, что вам нужно, в соответствующей ветки частной функции в своем репо и убедиться, что окончательные слияния с другой ветвью и develop
завершены.
Затем вы можете удалить ветвь функции, но лично я бы пометил последнюю фиксацию, чтобы я мог вернуться к ней в будущем в случае необходимости, а затем удалить ссылку на ветку. Таким образом, вы можете вернуться к фиксации, который, вероятно, намного ближе к master
, чем develop
, хотя зависит от того, сколько времени прошло, может быть, нет - по крайней мере, у вас будет выбор. Это может произойти, например, если дефект в вашем PR попадает в master,
, и открывается новая проблема, которую вы можете раздавить быстро, но займет больше времени.