Как да управлявате кръпките за проекти с отворен код, които не могат да се насочат към upstream?

Работя върху проект с отворен код. Сега завърших няколко кръпки, които са свързани с бизнеса на компанията, и не мога да прокарам тези кръпки нагоре по веригата.

Така че трябва да пазя тези корекции в моето локално 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 открие конфликт, който не може да разреши. Статията, която споменах, по-рано говори за това.

Можете да използвате любимия си текстов редактор, но всъщност е доста удобно да използвате инструмент за 3-посочно сливане в този случай. 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