3 минуты
Вносим свой вклад в Open Source
Недавно я закончил вторую статью из обзоров фреймворков с открытым исходным кодом для ревёрсеров: Radare2 и Viper. Первая была опубликована в журнале “Хакер” за Сентябрь 2014, а вторая будет в номере за Ноябрь. В связи с этим и родился этот пост. Хотя точнее будет назвать небольшой заметкой для себя, чтобы не забывать, так как я не часто отправляю какие-то патчи или улучшения, да и о внесение своих доработок в open source проекты было уже сказано не раз. Все команды будут указаны на примере моего недавнего патча для одного из фреймворков.
У каждого проекта на github в правом углу есть 3 кнопки.
Из них нам нужна 3-я - “Fork”. Кликаем по ней и уже в нашем github-аккаунте появляется этот проект. Далее клонируем уже свой проект к себе на машину:
~/soft# git clone https://github.com/dukebarman/viper.git
~/soft# cd viper/
Создаем новую ветку разработки под именем которой будут проходить все наши изменения:
~/soft/viper# git checkout -b fix-mistypes-vs-apk
Далее патчим/добавляем/удаляем файлы и указываем путь для git, в котором происходили изменения:
~/soft/viper# git add modules/
Коммитим и пушим изменения:
~/soft/viper# git commit -m "Fix mistypes in apk and virustotal modules"
[fix-mistypes-vs-apk be8d11d] Fix mistypes in apk and virustotal modules
2 files changed, 2 insertions(+), 2 deletions(-)
~/soft/viper# git push origin fix-mistypes-vs-apk
Теперь делаем Pull Request кнопкой “New Pull Request” из страницы нашего github-проекта в настоящий, добавив описание/скриншоты/видео. После чего на нашей созданной странице из списка “Pull requests” реального проекта общаемся с разработчиком до принятия доработок, в некоторых случаях иногда что-то исправляя и отправляя изменения через команду commit:
~/soft/viper# git checkout fix-mistypes-vs-apk
Patching!Patching!Patching!
~/soft/viper# git add modules/
~/soft/viper# git commit -m "Fix"
После закрытия этой страницы ветку из своего репозитория нужно удалить:
~/soft/viper# git checkout master
~/soft/viper# git branch -d fix-mistypes-vs-apk
Так как мы работаем с проектом из своего репозитория, то периодически (особенно перед добавлением своего функционала) нужно переносить изменения из реального. Для этого есть набор команд рекомендуемых в некоторых гайдах, смысл которых создать ветку для нашего проекта, которая будет указывать на репозиторий реального, и обновлять её:
~/soft/viper# git remote add upstream git://github.com/botherder/viper.git
~/soft/viper# git fetch upstream
~/soft/viper# git checkout -b upstream-master
~/soft/viper# git checkout master
~/soft/viper# git fetch
~/soft/viper# git rebase upstream-master
~/soft/viper# git push origin master
Для последующих обновлений пользуемся командой:
~/soft/viper# git fetch upstream
~/soft/viper# git checkout master
~/soft/viper# git merge upstream/master
Для более комфортной работы можно:
- добавить вывод в терминал слева от логина название ветки, в которой в данный момент работаешь
- воспользоваться IDE. Например, в продукты от JetBrains по-умолчанию входит модуль для работы с Git
Так что не стесняемся вносить свой вклад в развитие ПО, тем более, если оно помогает нам в работе ;-)
####UPD На старом добром HabraHabr выложили статью о том, как получать ещё и деньги за патчи в opensource-продукты