2012-04-23 8 views
1

Предположим, есть репозиторий проекта (на GitHub) и моя вилка (также на GitHub). Моя вилка идентична, кроме одной ревизии в один файл (исправление ошибки), которая еще не была принята репозиторием проекта. Я пытаюсь предоставить третьим лицам инструкции по установке о том, как загрузить последнюю версию программного обеспечения, включая исправление ошибок.Cherrypick единственная ревизия из удаленного хранилища?

Насколько я знаю, они должны сделать это:

git clone http://projectrepo 
git remote add myrepo http://myrepo 
git fetch myrepo 
git cherry-pick a12345 
git remote rm myrepo 

(Предположим, я не намерен поддерживать myrepo до настоящего времени - я бы хотел, чтобы мои инструкции переживет мою причастность к проекту , которая может закончиться в ближайшее время также предположить, что другие изменения могут иметь место в этот файл, так просто скачать копию всего файла не безопасно)

несколько suboptimalities с этим:..

  1. Они необходимо передать два целых репозитория Git
  2. Это три дополнительные команды, чтобы получить один файл.

Есть ли лучшие решения? Можете ли вы получить одну ревизию более простым способом?

+0

Используйте протокол git, git: // somerepo, это намного быстрее. git редко, если когда-либо тянет объекты, которые у вас уже есть, им все равно, откуда пришли объекты. – jthill

+0

Зачем им нужно применять патчи самостоятельно? не можете ли вы указать их на свое репо, которое уже включает исправление ошибки? – CharlesB

+0

@CharlesB: см. Утверждение об отсутствии поддержки myrepo. –

ответ

2

Пропустить remote add/remote rm:

git clone http://projectrepo 
git fetch http://myrepo remote-branch-name 
git cherry-pick a12345 

Если вы знаете, коммит является главой remote-branch-name, то вы можете сделать git cherry-pick FETCH_HEAD.

0

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

git clone http://myrepo 
cd myrepo; git co <rev/branch> # maybe 

И git/github заботится обо всех деталях.

+0

Да, но тогда они не получили бы выгоду от будущих улучшений основного репо проекта. –

4

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

Создать патч:

git format-patch -1 a12345 

Применить его:

git clone http://projectrepo 
cd projectrepo 
wget https://raw.github.com/gist/<patch-file> 
git am -3 <patch-file> 
+1

Эрр, это совершенно кремовое решение. Спасибо. –