Как управлять исправлениями проектов с открытым исходным кодом, которые не могут быть отправлены в апстрим?

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

Поэтому я должен хранить эти исправления в своем локальном репозитории git. Я должен получить новые исправления из основной ветки и разрешить конфликты с моими исправлениями.

У кого-нибудь есть мой подобный опыт и как с ним комфортно работать?

Обновление: точно так же, как если бы у меня было несколько исправлений, ядро ​​​​Linux не может их принять, потому что эти исправления недружественны ядру. Мне приходится ежедневно собирать ядро, и я не хочу каждый день печатать вручную. Существуют ли какие-либо инструменты, чтобы помочь мне?


person wang wynn    schedule 13.07.2013    source источник
comment
Почему ты не можешь толкнуть? у вас есть описание ошибки или что-то в этом роде?   -  person Eyal H    schedule 13.07.2013
comment
Есть ли проект на GitHub?   -  person    schedule 13.07.2013
comment
Если проект с открытым исходным кодом, можете ли вы сказать нам, что это за проект? Может быть, мы сможем узнать, как этот конкретный проект хочет обрабатывать заявки.   -  person    schedule 14.07.2013
comment
Может быть, патч содержит какие-то внутренние секреты, которые оператору не разрешено публиковать?   -  person Shi    schedule 14.07.2013
comment
Спасибо за вашу горячую помощь, но это не проблема проекта. Просто потому, что мои патчи содержат недружественную деловую привязку.   -  person wang wynn    schedule 14.07.2013
comment
Одним словом, я не должен и не могу продвигать его вверх по течению.   -  person wang wynn    schedule 14.07.2013
comment
Возможный дубликат Поддержка пользовательских исправлений в стороннем коде   -  person lesmana    schedule 19.01.2017


Ответы (4)


Я несколько удивлен, что ответы до сих пор, похоже, не учитывают две вещи:

  1. Не все модификации, сделанные программистами, предназначены или подходят для отправки в проект с открытым исходным кодом.
  2. Даже если это так, если во время работы над кодом в репозитории есть обновление, вам очень часто нужно объединить эти изменения в вашу рабочую копию.

Хорошо то, что, поскольку вы работаете с приличным программным обеспечением для контроля версий, обычно не так уж сложно сделать то, что вам нужно. Я занимаюсь подрывной деятельностью (из-за политики компании), поэтому я ничего конкретно не знаю о GIT, но после прочтения эта вики-статья, похоже, почти то же самое. Вам не нужно повторно применять исправления, если вы соответствуете файлам в своем локальном репозитории. Вы можете обновить локальную копию с уже примененными исправлениями!

Ваш пользовательский код, вероятно, затрагивает очень небольшую часть кода репозитория. Вполне вероятно, что большинство изменений в репозитории не коснутся того же кода, что и вы. Вам просто нужно будет использовать команду git pull, чтобы загрузить весь обновленный код. Когда разделы, которые вы коснулись, будут изменены в репозитории, git сделает все возможное, чтобы объединить эти изменения. Единственный раз, когда вам нужно отредактировать файлы вручную, это то, что git обнаруживает конфликт, который не может разрешить. В статье, о которой я упоминал ранее, говорится об этом.

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

person Benjamin Leinweber    schedule 15.07.2013

Вот возможный рабочий процесс.

Первоначальная настройка

git clone --origin 'upstream' http://example.com/project.git
cd project
git checkout master
git checkout -b patched
# make changes
git add --all
git commit -m 'internal patches'

Новые изменения в основной ветке

git checkout master
git pull upstream
git checkout patched
git rebase master

Ссылки:

person go2null    schedule 25.11.2015

Прежде чем вносить изменения в проект-

  1. create a branch
  2. Change to that branch for any changes you make
  3. To pull the new patches from the upstream revert back to the master branch and then git pull.

Команды для создания ветки и изменения следующие:

1. $ git branch <branch name>           // To create a new branch
2. $ git checkout <branch name>         // To change to the branch
3. $ git checkout master                // To change to the master branch
person Santosh A    schedule 13.07.2013
comment
Существует ли какая-либо система управления, с которой можно иметь дело? Точно так же, как если бы у меня было много патчей и несколько проектов, обновление моего локального репозитория заняло бы много времени. - person wang wynn; 14.07.2013
comment
На данный момент я не использую никакую систему управления. Но, как вы правильно заметили, в этом есть необходимость. Я обновлю, как только найду подходящий инструмент, который поможет работать над несколькими проектами. - person Santosh A; 14.07.2013

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

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

Подробнее о сотрудничестве с другими людьми в Git можно прочитать в этих главах Pro Git:

  1. Распределенные рабочие процессы
  2. Участие в проекте

Если вам интересно, вы также можете прочитать о о том, как GitHub использует запросы на вытягивание.

person Community    schedule 13.07.2013