Каков рабочий процесс для внесения вклада в репозиторий git с открытым исходным кодом?

#git #github #tfs #azure-devops

#git #github #tfs #azure-devops

Вопрос:

Я должен признать, что я никогда не участвовал в проекте с открытым исходным кодом, потому что я не понимаю рабочий процесс. Я много раз просматривал документацию по git, но находил ее слишком сложной.

Я отправил запросы на извлечение в частные репозитории для своего клиента, используя интерфейс, такой как Team Foundation Server (TFS) или Visual Studio Team Services (была Visual Studio Online) для репозиториев git. Я также могу легко работать в одиночку с репозиториями git, используя командную строку git, потому что этот рабочий процесс прост. Но я хотел бы изучить рабочий процесс git, используя его командную строку для внесения вклада в проекты с открытым исходным кодом.

Я прочитал следующие статьи из документации github. Я думаю, что я вроде знаю рабочий процесс, но я не уверен, и я боюсь попробовать его в чужом проекте.

  1. Разветвляйте репозиторий
  2. Синхронизация вилки
  3. О запросах на извлечение
  4. О моделях совместной разработки
  5. Создание запроса на извлечение из fork
  6. Создание запроса на извлечение

Что мне действительно нужно, так это чтобы кто-то упростил шаги в нескольких простых для понимания пунктах.

Из моих исследований до сих пор, вот что я понимаю.

Предположим, мы хотим внести свой вклад в воображаемый проект с именем Boo Boo, владельца которого зовут Baabaa. Предположим, что у меня, человека, который хочет внести свой вклад в Boo Boo, есть учетная запись github на https://www.github.com/Water-Cooler-v2 /

Ниже приведены шаги, до которых я знаю рабочий процесс. После этих шагов я не совсем понимаю, что делать.

  1. Сначала я разветвляю Boo Boo из https://www.github.com/Baabaa/Boo-Boo в мой собственный аккаунт на github. Теперь у меня есть свой собственный форк Boo Boo на https://www.github.com/Water-Cooler-v2/Boo-Boo .

  2. Затем я клонирую свой собственный Boo Boo в папку на моем компьютере следующим образом:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/
    $ git clone https://www.github.com/Water-Cooler-v2/Boo-Boo.git

    Это связывает мою локальную копию репозитория в папке MyFolder/ Boo-Boo с remote именем origin , которое указывает на мой собственный форк, т. Е. На https://www.github.com/Water-Cooler-v2/Boo-Boo.git

  3. Затем я также связываю свой локальный репозиторий в Myfolder / Boo-Boo с удаленным репозиторием Baabaa. Я делаю это, копируя URL репозитория Baabaa и вводя:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo
    $ git remote add upstream https://www.github.com/Baabaa/Boo-Boo.git

  4. Затем я проверяю, что новый удаленный с именем upstream был связан с:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo
    $ git remote --v

  5. Затем я извлекаю все ветки из удаленного upstream хранилища в свой локальный репозиторий на своем компьютере, набрав:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo
    $ git fetch upstream/master

  6. Теперь я проверяю свою локальную master ветку, которая в любом случае будет проверена по умолчанию, но я все равно проверю ее, чтобы быть уверенным:

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo
    $ git checkout master

  7. Затем я внесу некоторые изменения в файлы в моем локальном репозитории. В этом случае я отредактирую существующий файл (не показан ниже, потому что в нем не используются команды git) и добавлю новый файл с именем MyNewFile.txt .

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo
    $ touch MyNewFile.txt

  8. Теперь я объединю upstream/master ветку в свою собственную master ветку.

    MrWaterCooler@WatersComputer MINGW64 /c/WaterCooler/MyFolder/Boo-Boo
    $ git merge upstream/master

И затем, теперь это шаг, о котором я не совсем понимаю. Должен ли я нажимать? Куда? Мой собственный форк (удаленный origin master ) или Boo-Boo от Baabaa (удаленный upstream master )?

Или мне создать запрос на извлечение?

Не могли бы вы, пожалуйста, проверить рабочий процесс для первых 8 шагов, перечисленных выше, а затем завершить его?

Ответ №1:

Ваш рабочий процесс правильный.

  • Всегда создавайте свою собственную ветку на своем форке и нажимайте на origin нее . Создание ветки помогает сопровождающему при просмотре вашей ветки.

  • После того, как ваши изменения будут внесены, перейдите к исходному репозиторию, и в верхней части страницы должна быть кнопка с предложением создать запрос на извлечение.

Как правило, самая сложная часть вклада в проекты с открытым исходным кодом — это найти, с чего начать. Чтобы помочь с этой проблемой, есть два сайта, которые помогают находить проекты с хорошими проблемами перехода.

http://up-for-grabs.net/#/
https://yourfirstpr.github.io/

Комментарии:

1. Большое спасибо. Очень полезно.

2. Обратите внимание, что после нескольких PR вам, скорее всего, будут предоставлены права на запись в этот репозиторий. Всем, кто проявляет интерес к проектам, которые я поддерживаю, я предоставляю им доступ.

3. Если это не слишком беспокоит, не могли бы вы, пожалуйста, сделать небольшой тестовый репозиторий, чтобы я мог попробовать создать для него PR, а затем вы можете вытащить? Таким образом, я смогу увидеть это в действии? 🙂

4. Нет проблем. Мне нравится поощрять людей вносить свой вклад. В прошлом году я запустил hack-a-thon для этого.

5. @WaterCoolerv2 сопровождающие просматривают PR и добавляют любые комментарии. у хорошего сопровождающего будет автоматическая сборка, чтобы вы знали, если не удастся скомпилировать. после того, как он будет доволен, сопровождающий покажет большой палец вверх или : 1: на PR и слияние.

Ответ №2:

Вы просто разветвляете репозиторий, клонируете его на свой локальный компьютер, при необходимости создаете ветку и вносите свои изменения. На самом деле не имеет значения, как вы работаете локально или в своем собственном репозитории. Вам не обязательно использовать GitFlow. Вы можете выполнять разработку на основе магистрали или все, что вам подходит. Когда вы закончите, вы помещаете его в свой собственный репозиторий. Затем перейдите на GitHub и откройте PR для исходного репозитория. Это все, что нужно.

Что касается добавления оригинала в качестве удаленного: основная причина добавления исходного репозитория в качестве удаленного — это когда вы собираетесь обновить свой fork с изменениями из исходного репозитория (слияние, перебазирование, выбор вишни и т. Д.). Если вы просто собираетесь внести одноразовый вклад в оригинал, например, исправить какую-то ошибку, обычно нет необходимости иметь удаленный доступ. Имеет смысл добавить его для долгосрочных вкладов.

Комментарии:

1. Спасибо. Думаю, я понимаю, о чем вы говорите. Вы говорите: создайте тематическую ветку для выполнения своей работы, потому что это лучше, чем просто делать это в локальном главном. Это нормально. И затем последние 2 шага, которые вы добавили: (1) Отправьте свой локальный master файл на свой разветвленный пульт origin master . Затем перейдите в репозиторий BooBoo от BaaBaa и создайте новый запрос на извлечение, чтобы они извлекли его из вашего форка. Верно ли мое резюме?

2. @WaterCoolerv2 почти. Вам не нужно переходить к исходному репозиторию, чтобы создать PR. Перейдите в свой собственный репозиторий, нажмите на Pull Requests , затем New Pull Request . В раскрывающихся списках в диалоговом окне будет доступен исходный репозиторий. Таким образом, вы можете создать PR по сравнению с оригиналом оттуда.

3. Замечательно. Большое вам спасибо. Я пробую это и отмечу ваш ответ как правильный вскоре после того, как сделаю это один раз.

4. Просто уточняю кое-что. Тогда мне тоже не нужно добавлять upstream удаленный, верно? Я могу просто внести изменения в свой собственный форк и создать запрос на извлечение?

5. О, подождите! Но мне может (и, вероятно, понадобится) подключиться к upstream удаленному, чтобы fetch merge включить их работу в мое собственное репозиторий, чтобы у меня была последняя версия их работы, и чтобы я мог объединить любые конфликты, которые могла создать моя работа. Спасибо.