Анонимный код на GitHub обзор инструмента gitMask


Оглавление (нажмите, чтобы открыть):

Начинаем работу github

Сразу скажу, что эта «статья» больше для новичков чем для старожил и я буду рад если дадут дельный совет.

Намедни, недавно решил отвлечься от основной работы и всё таки примкнуть к open source сообществу и написать свой велосипед и заодно разобраться с тем как работать

с github и сделать так что-бы мой код мог быть обосранным использованным другими разработчиками которые более умны чем я и не любят писать велосипеды.

Нам нужно установить git. Мануал курить отсюда

Теперь приступим к созданию репозитория. Для начала нужно зарегистрироваться на сайте github.com, если, конечно, у вас нет там аккаунта

Потом необходимо создать репозиторий

После успешного создания репозитория вам выдадут адрес репозитория. Сохраните его.

Учтите что мы создали пустой репозиторий без файлов.

Далее заходите в терминал (*nix системы) или в коммандную строку Windows.

Переходите в директорию где бы вы хотели клонировать наш репозиторий к себе локально.

А потом выполняйте команду

и создайте там пустой файл. Мы создадим файл README.md — это файл описания нашего проекта

И добавим его в отслеживание git`ом введя команду в терминале

Теперь этот файл у нас будет отслеживатся git`ом и его изменения будут фиксироваться с помощью git`a

Далее нам нужно наш локальный репозиторий «подружить» с нашим удаленным.

Во втором скриншоте мы видели адрес нашего репозитория на github, скопируйте его и выполните команду

Адрес репозитория, само собой, меняйте на свой.

Что-бы удостовериться что вы правильно «соединили» локальный репозиторий с удаленным введите команду

Теперь нам нужно закоммитить (проще говоря — зафиксировать) наши изменения (добавление файла README.md в репозиторий).

А теперь все изменения нам нужно залить на удаленный репозиторий

У вас должно запросить логин и пароль к github как на скрине выше (при вводе пароля будет казаться что вы ничего не вводите — но это всё вранье)

Теперь давайте перейдем в наш репозиторий через браузер и посмотрим — есть ли там наш файл

И да, наш файл появился. По аналогии можете добавлять и другие файлы в репозиторий.

Спасибо всем кто заинтерисовался.

Если будет интересно то в следующий раз опишу как сделать так чтобы composer видел ваш githubовский репозиторий.

P. S. Конструктивная критикая, советы приветствуются

Анонимный код на GitHub: обзор инструмента gitMask

/Maks/android-kernel-zzz
git init — инициализируем репозиторий
git add . — помечаем для выгрузки все файлы в

/Maks/android-kernel-zzz
git commit -m «first commit» — коммитим изменения, вместо first commit можно написать, что угодно.
git remote add origin https://github.com/твой_ник/имя_репозитория.git
git push -u origin master — после ввода команды попросит пароль.

Тема в стадии развития!

Сообщение отредактировал AndrewP_1 — 29.04.19, 12:01

Предложу альтернативу. :wink_kind:

Создаём новый пустой репозиторий с помощью командной строки:

Интеграция чужих наработок в свой репозиторий

  • git remote add name [url репозитория]
  • git fetch name
  • git cherry-pick [id коммита]

Где name это условное имя ветки (может быть каким угодно)

  • Git или Гит — система контроля и управления версиями файлов.
  • GitHub или Гитхаб — веб-сервис для размещения репозиториев и совместной разработки проектов.
  • Репозиторий Git — каталог файловой системы, в котором находятся: файлы конфигурации, файлы журналов операций, выполняемых над репозиторием, индекс расположения файлов и хранилище, содержащее сами контролируемые файлы.
  • Локальный репозиторий — репозиторий, расположенный на локальном компьютере разработчика в каталоге. Именно в нём происходит разработка и фиксация изменений, которые отправляются на удалённый репозиторий.
  • Удалённый репозиторий — репозиторий, находящийся на удалённом сервере. Это общий репозиторий, в который приходят все изменения и из которого забираются все обновления.
  • Форк (Fork) — копия репозитория. Его также можно рассматривать как внешнюю ветку для текущего репозитория. Копия вашего открытого репозитория на Гитхабе может быть сделана любым пользователем, после чего он может прислать изменения в ваш репозиторий через пулреквест.
  • Обновиться из апстрима — обновить свою локальную версию форка до последней версии основного репозитория, от которого сделан форк.
  • Обновиться из ориджина — обновить свою локальную версию репозитория до последней удалённой версии этого репозитория.
  • Клонирование (Clone) — скачивание репозитория с удалённого сервера на локальный компьютер в определённый каталог для дальнейшей работы с этим каталогом как с репозиторием.
  • Ветка (Branch) — это параллельная версия репозитория. Она включена в этот репозиторий, но не влияет на главную версию, тем самым позволяя свободно работать в параллельной. Когда вы внесли нужные изменения, то вы можете объединить их с главной версией.
  • Мастер (Master) — главная или основная ветка репозитория.
  • Коммит (Commit) — фиксация изменений или запись изменений в репозиторий. Коммит происходит на локальной машине.
  • Пул (Pull) — получение последних изменений с удалённого сервера репозитория.
  • Пуш (Push) — отправка всех неотправленных коммитов на удалённый сервер репозитория.
  • Пулреквест (Pull Request) — запрос на слияние форка репозитория с основным репозиторием. Пулреквест может быть принят или отклонён вами, как владельцем репозитория.
  • Мёрдж (Merge) — слияние изменений из какой-либо ветки репозитория с любой веткой этого же репозитория. Чаще всего слияние изменений из ветки репозитория с основной веткой репозитория.
  • Кодревью — процесс проверки кода на соответствие определённым требованиям, задачам и внешнему виду.

Gitmask makes it easy to h > January 11, 2020 Jane Elizabeth

Sometimes, you just don’t want the world to know your commitment history. Gitmask brings more privacy options to GitHub with anonymous commits.

Anonymity is back in. From new ways to speak to your friends without Big Brother listening in, to the mysterious creator of bitcoin Satoshi Nakamoto, it’s more important than ever to retain your privacy.

GitHub bills itself as a social coding platform. After all, it’s a community to code together. And sometimes, that together includes your boss. So, whether it’s a humorously lewd repo for directly injected CSS or the brotastic “do you even javascript?”, sometimes you just don’t want to have your real name attached to a project.

Gitmask

If you want to upload something to GitHub while maintaining a certain deniability, then Gitmask is probably easier than setting up another GitHub account and remembering to use that secondary SSH key.

Say you want to upload a bundle to bitcoin/bitcoin. All you need to do is one simple line of code:

And that’s it. That’s all you need to do.

Once you’ve pushed your code to Gitmask, it removes and replaces all embedded info from your commits like author names, email, and timestamps. Basically, anything and everything that could be used as an identifier.

Then, a pill request is made automatically to the upstream GitHub repository with your changes. However, now, the originating IP is Gitmask and the author is the anonymous (and highly productive!) Gitmask user account.

If you’re interested in a more circumspect GitHub experience, there’s always the Anonymous GitHub, which supports anonymous browsing of Github repositories for open-science code and data. And blind-reviews brings GitHub closer to the academic standard of a single-blind review by hiding the name of a pull request submitter, to help maintainers break bias habits and take a look at the code on its own merits.

Gitmask encourages people to think about their privacy. The internet never forgets. And although GitHub has managed to close this pesky flaw in their security that let anyone find the real email of any user, they’re not perfect.

So, if you’re looking to commit quietly, Gitmask might be right for you.

Исследование: 70% кода на GitHub — копии других проектов

Поделитесь в соцсетях:

Совместное исследование специалистов Microsoft, Калифорнийского университета Ирвинга и Чешского технического университета показало, что более 70% кода на GitHub представляет собой копии и копии копий других проектов, зачастую не претерпевшие даже малейших изменений.

Интересно, что изначально целью восьми исследователей было определение того, как сильно отличается ранее скопированный код при использовании в новых проектах. В ходе работы выяснилось, что огромное число проектов использует «шокирующее количество копий, сделанных на уровне файлов».

Из 428 млн файлов, изученных в ходе исследования, только 85 млн оказались уникальными. Более того, при проведении проектного анализа выяснилось, что от 9 до 31 процентов проектов содержит по крайней мере 80% файлов из других проектов. Эта находка побудила исследователей сместить акценты, что привело к созданию публичного индекса дублирования кода («индекса Дежа вю»).

По оси Y показано количество коммитов в проект, на оси X — количество файлов в проекте. Значение каждого квадрата указывает на процент скопированных файлов. Чем темнее цвет — тем больше клонов.

Согласно расчетам, самым «закопированным» языком программирования оказался JavaScript. Во всем массиве кода лишь 6% кода были оригинальными. Исследователи отнесли к дубликатам 73% кода экосистемы C++ и 71% Python-кода. Самым «индивидуалистичным» языком программирования назвали Java — но и в ней объем дублированного кода достигает 40%.

Как сообщается, на показатели «индекса Дежа вю» влияет характер языка. В JavaScript, к примеру, медианное количество подключенных проектов (а этот язык многие любят именно благодаря огромному количеству подключаемых библиотек) оказалось на уровне 63, а максимальное количество «зависимостей» достигало 1261.

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

Ключи от «Гитхаба». Выполняем произвольный код в GitHub Enterprise

Содержание статьи

Общие сведения

Не так давно я уже писал об уязвимости в GitHub Enterprise. Тогда из-за использования статического ключа для подписи данных в сессии любой пользователь, в том числе и анонимный, мог выполнить произвольный код в системе. Проблему успешно запатчили после очередного релиза, но не прошло и нескольких месяцев, как эксперт в области информационной безопасности Orange обнаруживает еще одну критическую уязвимость. В этот раз ее можно проэксплуатировать только от имени авторизованного пользователя, у которого имеются права на создание репозиториев или на управление уже существующими.

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

Мастер Йода рекомендует:  10 наиболее популярных книг на StackOverflow

Стенд

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

Скачиваем уязвимую версию приложения (2.8.6) в формате переносимой виртуальной машины OVA (Open Virtualization Archive), затем регистрируемся и выбираем GitHub on-premises. После подтверждения аккаунта и авторизации качаем файл лицензии .ghl, который потребуется на этапе установки.

Загрузка файла лицензии в процессе установки GitHub Enterprise

Для работы с виртуальной машиной я использую VirtualBox. После успешной установки нужно настроить саму виртуалку. Нам нужно добавить два дополнительных диска и указать IP-адрес, по которому будет доступен веб-интерфейс. Я выбрал Host-Only networking в качестве типа сетевого адаптера.

После успешного запуска машины переходим по ссылке https://айпи-адрес:8443/setup и проходим процесс установки. На этом этапе настоятельно рекомендую сгенерировать и добавить свой SSH-ключ и обязательно включить возможность регистрации новых пользователей. Система будет приходить в рабочее состояние довольно долго, поэтому наберись терпения.

Виртуалка с GitHub Enterprise, готовая к экспериментам

После успешного запуска виртуалки переходим к следующей части нашего приключения.

Первые шаги

Продукт написан на солянке из разных языков программирования. Но в большинстве своем мы можем наблюдать здесь Ruby с использованием Ruby on Rails и веб-фреймворк Sinatra.

Прежде чем копаться в недрах приложения, нужно провести деобфускацию исходников. Разработчики решили прикрыть их от любопытных глаз и даже написали свою библиотеку для обфускации. В основе алгоритма лежит обычный XOR с ключом This obfuscation is intended to discourage GitHub Enterprise customers from making modifications to the VM. We know this ‘encryption’ is easily broken. и сжатие по алгоритму deflate.


Исходники GitHub Enterprise в обфусцированном виде

Прочитать подробнее про это ты можешь, погуглив с запросом __ruby_concealer__ .

Все это мы проделывали в прошлый раз, и скриптик на Ruby для автоматической деобфускации сорцов до сих пор дожидается тебя в моем репозитории.

Я не зря говорил о добавлении своего ключа. Теперь нужно войти с ним на машину по SSH: порт 122, пользователь admin. Скачиваем и запускаем скрипт деобфускации из директории /data и несколько минут спустя получаем чистые исходные коды.

Исходник, прошедший деобфускацию

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

Теперь, когда стенд запущен и работает, нужно зарегистрировать нового пользователя и создать свой первый репозиторий.

Узнаваемый интерфейс GitHub

Дорога к эксплоиту. SSRF

В GitHub есть такая вещь, как хуки. Это модная нынче штука, которая позволяет оповещать внешние сервисы о каких-либо событиях в системе. Например, при добавлении нового коммита система может отстукивать о его параметрах на указанный тобой адрес. Настраивается это в разделе Hooks & Services из меню Settings твоего репозитория.

Поле URL в форме добавления хука выглядит в шаблоне следующим образом.

/data/github/4ff81e7/app/views/integrations/hooks/_webhook_form.html.erb

При добавлении URL должен пройти ряд проверок.

/data/github/4ff81e7/app/models/hook.rb

Скрипт не допускает наличия одинаковых хуков в рамках одного репозитория и проверяет, чтобы длина адреса не была больше допустимой. И главная проверка на валидность самого адреса при помощи библиотеки Addressable.

Метод Addressable::URI.parse парсит переданный URL и проверяет его на соответствие спецификациям RFC 3986, RFC 3987 и RFC 6570. Это значит, что мы можем отправлять запросы на любые серверы. Никаких других проверок адреса не выполняется.

Только вот при попытке использовать локальные адреса localhost, 127.0.0.1 и тому подобные система возвращает ошибку Invalid host. Однако не локалхостом единым! Эту ошибку можно обойти, просто используя адрес 0.0.0.0 или сокращенно 0 .

Давай проверим, как это работает. Поставим на прослушку порт 31337 ( nc -lp 31337 -vvv ) на виртуалке. И затем создадим веб-хук, указав в качестве URL https://0.0.0.0:31337/test . После нажатия кнопки «Добавить» к нам незамедлительно прилетает запрос.

SSRF в GitHub Enterprise. Отправка запроса на локальную машину

Можем поздравить себя, мы обнаружили SSRF-уязвимость. Да не простую, а которая еще и показывает ответ сервера, если он оформлен как валидный HTTP response.

Теперь нужно придумать, что с ее помощью можно сделать.

Я неспроста так рьяно пытался пробиться на localhost. GitHub Enterprise — это большое и сложное приложение, поэтому внутри крутится некоторое количество вспомогательных сервисов. Взгляни на одну только строку статуса.

Запущенные сторонние сервисы

Тут нам и «Эластик», и «Редис», и «Мемкеш». Выбирай — не хочу!

Начнем с Memcached. Протокол общения с ним текстовый, поэтому можно попробовать провести инъекцию. Попробуем провернуть разделение запроса (HTTP Request Splitting), для этого создадим хук с символами перевода каретки.

Проверка атаки HTTP Request Splitting

Не вышло. Ладно, не отчаиваемся, на этом сервере еще есть чем поживиться.

Поиск подходящих сервисов

Теперь настало время посмотреть на открытые порты. Выполним команду sudo netstat -anp | grep -i LISTEN .

Список запущенных сервисов, которые слушают порт

Вот такой внушительный список сервисов, которые доступны по сети. Есть где разгуляться, даже порт 1337 открыт ��

Если помнишь, я говорил, что SSRF позволяет читать ответ. Это можно использовать во время тестов на проникновение по методике черного ящика. Например, посмотрим, что находится на пресловутом порте 1337. Создадим хук https://0:1337/ , откроем его и проскроллим до Recent Deliveries. Там, во вкладке Response, можно увидеть ответ от сервера. Если хотим заново отправить запрос, то к вашим услугам кнопка Redeliver.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Как пользоваться GitHub

Github — это очень известная платформа для хранения, распространения и управления исходным кодом открытых проектов. Этот сервис используют множество разработчиков по всему миру, среди которых есть и крупные компании, такие как Microsoft, RedHat и множество других, также сотни разработчиков многих популярных проектов.

Платформа предоставляет возможности не только по просмотру кода и его распространения, но также историю версий, инструменты совместной разработки, средства для предоставления документации, выпуска релизов и обратной связи. И самое интересное, что вы можете размещать на Gihub как открытые, так и приватные проекты. В этой статье мы рассмотрим как пользоваться Github для размещения своего проекта. Так сказать, github для начинающих.

Как пользоваться GitHub

Итак, допустим, у вас есть свой проект и вы хотите разместить его код на Github в открытом доступе чтобы другие пользователи могли его посмотреть и участвовать в разработке. Первое что вам нужно сделать — создать аккаунт.

1. Создание аккаунта

Чтобы создать новый аккаунт на сайте откройте главную страницу GitHub и тут же сразу вы можете ввести данные для новой учетной записи. Вам нужно указать имя пользователя, Email и пароль:

Когда завершите ввод, нажмите кнопку «Sign Up Free»:

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

Аккаунт готов, и вы будете перенаправлены на страницу, где сможете создать свой первый проект. Но перед тем как вы сможете это сделать, нужно подтвердить свой Email адрес. Для этого откройте ваш почтовый ящик и перейдите по ссылке в письме от Github.

Никакая настройка github не нужна, достаточно лишь несколько кликов мышкой.

2. Создание репозитория

На открывшейся странице, это главная страница для авторизованных пользователей, нажмите кнопку «Start a project»:

Дальше введите имя и описание будущего репозитория:

Вы можете сразу же инициализировать репозиторий, создав файл Readme, для этого нужно отметить галочку «Initialize this repository with a README» внизу страницы. Также можно выбрать лицензию:

Когда все будет готово, выберите «Create project», будет создан новый проект с файлом README, в котором находится описание и файлом лицензии.

Дальше все самое интересное как работать с github.

3. Добавление веток

Ветки Github позволяют работать с несколькими версиями проекта одновременно. По умолчанию при создании репозитория создается ветка master, это основная рабочая ветка. Можно создать дополнительные ветки, например, для того, чтобы тестировать программное обеспечение перед тем, как оно будет опубликовано в ветке master. Таким образом, можно одновременно разрабатывать продукт и предоставлять пользователям стабильную версию. Также можно создавать отдельные ветки для версии программы для разных систем.

Текущая ветка обозначена в верхнем левом углу после слова «Branch». Чтобы создать новую ветку просто разверните этот список и начните набирать ее имя:

Сайт сам предложит вам создать новую ветку, выберите «Create branch».

Сразу же после создания вы будете работать с только что созданной веткой.

4. Изменение файлов и коммиты

Любые изменения файлов на Github делаются с помощью коммитов. Коммит выполняется путем внесения самих исправлений и описания этих исправлений. Это необходимо для того, чтобы вы знали что и когда вы меняли, а также позволяет легко отслеживать работу команды. Слово коммит можно перевести как «фиксировать». То есть мы можем внести изменения в несколько файлов, а затем их зафиксировать. Давайте для примера изменим файл README. Для этого найдите в в правой стороне панели кнопку с кисточкой и нажмите на нее:

Откроется текстовый редактор, где вы можете ввести нужные вам исправления:

После того как вы сделаете все что вам нужно, необходимо заполнить поле «Commit» внизу страницы. Кратко опишите что было изменено, а затем нажмите кнопку «Commit changes»:

Эти изменения будут внесены в текущую ветку проекта, поскольку мы сейчас работаем с testing, то и изменения будут отправлены именно туда.

5. Создание запросов слияния (Pull Request)

GitHub для начинающих может показаться очень сложным именно из-за таких возможностей, но это очень удобно если разобраться. Запрос слияния или Pull Request — это возможность, благодаря которой любой разработчик может попросить другого, например, создателя репозитория просмотреть его код и добавить его в основной проект или ветку. Инструмент работы с запросами слияния использует инструмент сравнения diff, поэтому вы можете увидеть все изменения, они будут подчеркнуты другим цветом. Pull Request можно создать сразу же после создания коммита. Давайте отправим Pull Request из нашей testing ветки в основную. Сначала откройте вкладку «Pull Request».

Здесь нажмите кнопку «Create Pull Request»:

Дальше вам нужно будет выбрать ветку, которую нужно слить с основной, в нашем случае «testing».

В этом окне вы можете просмотреть все изменения, сейчас мы видим, что была добавлена строчка:

Дальше нажмите зеленую кнопку «Create Pull Request» и введите описание, как и для коммита:

6. Просмотр и одобрение запросов на слияние

Теперь, на той же вкладке Pull Requests мы видим только что созданный запрос на слияние и нам остается только принять его нажав «Merge Pull Request»:

Но если этот запрос пришел от другого человека, вы должны проверить что он там изменил и нужно ли это, для этого просто нажмите на описание запроса и увидите уже знакомое окно просмотра изменений:

Дальше можно подтвердить Pull Request:

Затем код будет импортирован в основную ветку, а ветка testing может быть безопасно удалена.

7. Отчеты об ошибках

Удобно еще то, что возможно использование GitHub не только для разработки и управления кодом, но и для обратной связи с пользователями. На вкладке «Issue» пользователи могут оставлять сообщения о проблемах, с которыми они столкнулись при использовании вашего продукта. Откройте вкладку «Issues», и нажмите на кнопку «New issue»:

Мастер Йода рекомендует:  Знакомство с анимацией в CSS3 гайд для начинающих

Дальше вам осталось ввести заголовок, текст и нажать «Create new issue».

8. Релизы

Последнее что мы сегодня рассмотрим — это релизы. Когда продукт достиг определенной стадии можно выпустить релиз, чтобы пользователи и вы могли быть уверенны что там все стабильно и никто ничего не сломал неверным Pull Request в Master. Сначала нужно перейти на главную страницу проекта, затем на вкладку «Releases»:

Дальше нажмите кнопку «Create New Release»:

На этой странице нужно указать версию в поле «Tag Version», затем имя релиза и небольшое описание. Если у вас есть скомпилированные архивы с бинарниками то их тоже нужно прикрепить сюда. Затем нажмите «Create Release»:


После создания релиза будет создана такая страничка:

Ссылки на исходный код в tar.gz и zip будут созданы автоматически, все остальные файлы вам придется добавлять вручную.

Выводы

В этой статье мы рассмотрели как пользоваться GitHub для размещения и управления своим проектом. Вся система на английском, так что базовые знания языка очень желательны но даже без них работа с github будет не очень трудной. Надеюсь, эта информация была полезной для вас. Если вас интересует как работать с Git из командной строки, смотрите статью как пользоваться git для начинающих.

Исследование: 70% кода на GitHub — копии других проектов

Поделитесь в соцсетях:

Совместное исследование специалистов Microsoft, Калифорнийского университета Ирвинга и Чешского технического университета показало, что более 70% кода на GitHub представляет собой копии и копии копий других проектов, зачастую не претерпевшие даже малейших изменений.

Интересно, что изначально целью восьми исследователей было определение того, как сильно отличается ранее скопированный код при использовании в новых проектах. В ходе работы выяснилось, что огромное число проектов использует «шокирующее количество копий, сделанных на уровне файлов».

Из 428 млн файлов, изученных в ходе исследования, только 85 млн оказались уникальными. Более того, при проведении проектного анализа выяснилось, что от 9 до 31 процентов проектов содержит по крайней мере 80% файлов из других проектов. Эта находка побудила исследователей сместить акценты, что привело к созданию публичного индекса дублирования кода («индекса Дежа вю»).

По оси Y показано количество коммитов в проект, на оси X — количество файлов в проекте. Значение каждого квадрата указывает на процент скопированных файлов. Чем темнее цвет — тем больше клонов.

Согласно расчетам, самым «закопированным» языком программирования оказался JavaScript. Во всем массиве кода лишь 6% кода были оригинальными. Исследователи отнесли к дубликатам 73% кода экосистемы C++ и 71% Python-кода. Самым «индивидуалистичным» языком программирования назвали Java — но и в ней объем дублированного кода достигает 40%.

Как сообщается, на показатели «индекса Дежа вю» влияет характер языка. В JavaScript, к примеру, медианное количество подключенных проектов (а этот язык многие любят именно благодаря огромному количеству подключаемых библиотек) оказалось на уровне 63, а максимальное количество «зависимостей» достигало 1261.

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

Введение в GitHub для разработчиков

GitHub — это веб-сайт, на котором размещены миллиарды строк кода. Ежедневно миллионы разработчиков собираются там для совместной работы и решения разного уровня задач в публичном режиме с открытым исходным кодом.

Короче говоря, это платформа для разработчиков программного обеспечения, основанная на GIT.

Как разработчик, вы не сможете избежать ежедневного использования GitHub или другого инструмента на основе GIT во время своей работы. Он используется либо для размещения кода, либо для совместной работы над кодом других людей. В этой статье объясняются некоторые ключевые концепции GitHub, как пользоваться его функциями для улучшения рабочего процесса.

Почему GitHub?

Теперь вы знаете, что такое GitHub и наверняка задаетесь вопросам – зачем мне его использовать и как?

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

Помимо личных предпочтений и технических причин, есть одна значимая причина: все используют GitHub, поэтому сетевой эффект огромен.

Со временем основные кодовые базы были перенесены из других систем контроля версий в GIT из-за его удобства. GitHub исторически находится в выгодном положении и прилагает много усилий для удовлетворения потребностей сообщества открытого исходного кода.

Сегодня, когда вы будете искать какую-либо библиотеку, вы в 99% случаев найдете ее на GitHub.

Помимо открытого исходного кода, многие разработчики также размещают частные репозитории на GitHub из-за удобства платформы.

Теперь давайте приступим к важным концепциям GIT, которые разработчик должен знать.

GitHub Issues

GitHub Issues – одна из наиболее популярных в мире систем отслеживания багов.

Она предоставляет владельцам репозиториев возможность организовывать, отмечать тегами и привязывать проблемы к контрольным точкам.

Если вы найдете проблему в проекте, управляемом кем-то другим, она будет открытой до тех пор, пока вы не закроете ее (например, если выясните, в чем заключается проблема) или пока владелец репозитория не закроет ее.

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

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

Социальное кодирование

Несколько лет назад в логотип GitHub входил слоган «социального кодирования».

Что это значит? Важен ли сейчас этот слоган? Конечно.

Подписки (Follow)

На GitHub можно подписаться на разработчика или репозиторий, зайдя в профиль пользователя и нажав «Подписаться» или нажав кнопку «Следить» в репозитории.

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

Звезды (Stars)

Важная особенность GitHub – возможность оценить репу звездой. Это действие включит его в ваш список «помеченных репозиториев», что позволит отслеживать проекты, которые вам интересны, и находить похожие проекты.

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

Крупные проекты могут иметь десятки тысяч звезд.

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

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

Ответвления (Fork)

Последний важный сетевой индикатор проекта — это количество ответвлений.

Это ключ к тому, как работает GitHub. Ответвление — это основа запроса на включение (PR), который является предложением об изменении. Человек может добавить ответвление к вашему репозиторию, внести некоторые изменения, а затем создать запрос на включение, чтобы попросить вас объединить эти изменения в исходник.

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

Чем популярнее, тем лучше

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

Запросы на включение (Pull requests)

В предыдущем разделе я объяснил, что такое запрос на включение (PR). Повторим: человек может добавить расширение к вашему репозиторию, внести некоторые изменения, а затем создать запрос на включение, чтобы попросить вас объединить эти изменения.

Проект может иметь сотни PR. Как правило, чем популярнее проект, тем больше PR. Например, в проекте React:

Как только человек отправляет запрос на включение, он должен быть рассмотрен основными управляющими проекта.

В зависимости от объема вашего запроса включения (количества изменений, количества вещей, затронутых вашим изменением, или сложности затронутого кода) управляющему может потребоваться больше или меньше времени на то, чтобы убедиться, что ваши изменения совместимы с проектом.

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

Это означает, что запрос на включение не всегда принимается быстро. Нет никакой гарантии, что запрос когда-либо будет принят.

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

Управление проектами (Project management)

Наряду с issues, благодаря которым разработчики получают обратную связь от пользователей, интерфейс GitHub предлагает и другие функции, позволяющие управлять проектами.

Одна из них – Projects. Это новый раздел, который очень редко используется. Это система «Канбан», которая помогает организовать баги и работу, которую необходимо выполнить.

Wiki предназначена для использования в качестве документации для пользователей. Одним из наиболее впечатляющих применений Wiki, которое я видел, является GitHub Wiki языка программирования Go .

Также в управлении проектами помогают контрольные точки. Это часть страницы issues. Вы можете соотнести проблемы с определенными контрольными точками, которые могут быть целями релизов.

Представив релизы, GitHub расширил функциональность тегов GIT.

Тег GIT — это указатель на конкретную версию. Если он выполняется последовательно, то помогает вам вернуться к предыдущей версии кода без ссылки на конкретные версии.

Релиз GitHub построен на основе тегов GIT и представляет собой полную версию вашего кода, а также zip-файлы, заметки о выпуске и двоичные ресурсы, которые могут представить полностью рабочую версию конечного продукта кода.

Хотя тег GIT можно создавать программно (например, с помощью тега git из командной строки), создание релизов GitHub – это ручной процесс, который происходит в пользовательском интерфейсе GitHub. Вы, по сути, говорите GitHub создать новый релиз и сообщаете, к какому тегу вы хотите применить его.

Сравнение коммитов

GitHub предлагает множество инструментов для работы с кодом.

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

GitHub позволяет вам делать это с compare view: просто добавьте /compare в конец имени репозитория.

На рисунке ниже я сравниваю последнюю версию React v15.x с последней версией v16.0.0-rc, доступной на момент написания этой статьи, чтобы увидеть, что изменилось.

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

Webhooks и Services

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

Мастер Йода рекомендует:  Исследование к 2020 году количество пользователей мобильного интернета достигнет 1,7 миллиарда

Webhooks

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

Когда происходит событие, GitHub отправляет запрос POST на URL, который мы говорим ему использовать.

Обычно эта функция используется для проверки связи с удаленным сервером. Это нужно, чтобы получить последний код из GitHub, когда мы отправляем обновление с нашего локального компьютера.

Мы отправляем команду push к GitHub, GitHub сообщает серверу об этом, и сервер извлекает данные из GitHub.

Services


Сервисы GitHub и новые приложения GitHub представляют собой сторонние интеграции, которые улучшают работу разработчика или предоставляют услуги.

Например, вы можете установить исполнитель тестов для автоматического запуска тестов каждый раз, когда вы делаете новые коммиты. Здесь поможет TravisCI .

Можно настроить непрерывную интеграцию с помощью CircleCI .

Можно создать интеграцию Codeclimate , которая анализирует код и предоставляет отчет «Техническая задолженность» и покрытие тестирования.

Заключение

GitHub — это замечательный инструмент и сервис, которым можно воспользоваться. Это настоящий драгоценный камень в современном наборе инструментов для разработчиков. Данное руководство поможет вам начать работу. Реальный опыт управления проектами с открытым или закрытым исходным кодом GitHub (как пользоваться им, показано во многих статьях) — это то, что нельзя упустить.

VS Code Git Repo. Terminal Commands VS Code

by Andrej — Category Обзоры on 16/05/2020

Подключение к GitHub репозиторию через Visual Studio Code и публикация пакета в NPM

Заметка. Ответы на часто задаваемые вопросы.

  • как скопировать Git репозиторий на свой компьютер?
  • как вносить изменения и сохранять их в репозитории?
  • как опубликовать созданный npm пакет (package.json)?

Команды терминала VSCode

Команды указаны в правильной последовательности, начиная от копирования репозитория, до публикации пакета npm

Открываем терминал в среде разработки и вводим команду git clone . Далее переход на GitHub, жмем зеленую кнопку Clone or download, копируем ссылку на репозиторий, вводим адрес в поле ввода VSC. Начинается копирование репозитория.

Теперь можно спокойно редактировать файлы.

По окончании работ, вводим в терминале команду npm init , тем самым создаем новую версию/обновляем старую. (например, 1.0.51, проверяем правильность данных, сохраняем (yes/no)).

После всех изменений, необходимо авторизоваться на GitHub под своим логином, чтобы сохранить изменения:

git config —global user.email ваша почта

git config —global user.name ваш логин

Для публикации на GitHub и/или внесения изменений в репозиторий, вводим команду git push

  • Username: ваш логин
  • Password: ваш пароль в гит

Теперь осталось опубликовать наш пакет.

Авторизация на сайте npm и публикация пакета

Вводим команду npm login , затем вносим свои данные:

имя на сайте npmjs.com (вводится без

Вводим в терминал команду npm publish и публикуем новую версию пакета на сайте npm.

В конце вводим npm view имя_пакета version и проверяем последнюю версию пакета (например, npm view box-shadows-css version).

Прочие команды для Git

  • . -v — узнать версию. Например, npm -v
  • git log — просмотр состояния и изменений в репозитории
  • git branch имя_ветки — создание новой ветки
  • git checkout имя_ветки — переход в новую ветку
  • git checkout master — переход к последней версии в ветке master
  • git branch -a — показывает в какой ветке мы находитмся
  • git tag — просмотр тегов
  • git tag v1.0.0 — создание тега первой версии
  • git checkout v1.0.1 или git checkout v1.0.0-beta — переключение по имени тега
  • git status — проверка состояния и наличия измененных файлов
  • git commit — сохранение созданного коммита
  • git merge имя_коммита — слияние коммитов
  • git pull — соединение коммитов в текущую ветку
  • git fetch — собирает все коммиты из целевой ветки, которых нет в текущей и сохраняет их в локальном репозитории
  • git fetch + git merge — соединение коммитов в основную ветку (аналог команды git pull в 2 действия)
  • git push origin имя_ветки — указываем конкретную ветку для публикации
  • git branch -d имя_ветки — удалить ветку локально
  • git push origin —delete имя_ветки — удалить ветку в удаленном репозитории

Отменить последний опубликованный коммит

  • git reset —hard хэш-код — выглядит хэш-код примерно так 9b34a03111e48aedc09a7bb33bbdf3a80ce94270
  • git push —force — вносим изменения в удаленный репозиторий

Возможно Вас также заинтересует…

Visual Studio Code (VS Code) — редактор исходного кода, разработанный Microsoft для Windows, Linux и…

Уважаемые дизайнеры, программисты и разработчики! У меня лежат два инвайта на Dribbble. К сожалению, сейчас…

В разработке интернет-проектов, как и в промышленности активно используется термин ЧПУ. Однако здесь он не…

Привет, дорогие читатели! Эта статья может пригодиться веб-мастерам, использующим в работе JSFiddle. В ней я…

Введение в GitHub: как начать пользоваться?

Всем привет! Несмотря на такой долгую паузу после последней статьи о VestaCP, буду пробовать переходить на более интенсивный режим работы. С этого дня темы новых статей будут немного сменены, теперь вы увидите больше статей, связанных с вёрсткой сайтов. Я не беру на себя функцию обучить вас вёрстке, а, скорее, предоставляю вам миниконспект основ, к которому будет легко вернуться и повторить. Надеюсь, вам понравится и вы сможете эффективно использовать предложенную информацию. Хватит предисловий, приступим к работе.

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

Системы контроля версий

Древняя система контроля версий

Наверное, все когда-нибудь сохраняли 2 версии файла с небольшими отличиями под разными именами? К примеру, научка-вер1.txt и научка-вер1-проверил_Пушкин.txt. Первый файл вы отправили своему научному руководителю, он его проверил, внёс свои изменения и отравил вам второй файл. Такое может повторять вплоть до бесконечности, плодя множество файлов, названия которых ставятся все более и более странными. А ваша папка с версиями с «научкой» становится похожа на что-то дикое и сложное в понимании, и найти промежуточную версию становится очень и очень сложно.

Такой способ совершенно не приемлем* в мире разработки, особенно, если над проектом трудится много человек одновременно. И вот почему:

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

Современная система контроля версий

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

Система контроля версий — это та штука, которая позволяет удобно хранить все версии проекта (т.е. ничего не удаляется и не теряется), и, при надобности, вернуться к более ранним, а также посмотреть, кто, когда и что изменил, комментарии к правкам.

Цель такой системы — поддержание актуальной версии проекта у всех ее пользователей.

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

Виды современной системы контроля версий

Централизованная.

  1. Существует только один репозиторий.
  2. Простые номера версий файлов (1, 2, 3 и т.д.).
  3. У пользователей хранится только текущая версия проекта.
  4. Требуется подключение к интернету.
  5. Просто, но медленно.
  6. Сложности в одновременной работе над одним файлом.

Распределенная.

На один проект приходится много репозиториев.

  1. Каждый пользователь создает локальную копию всего репозитория на основе главного облачного.
  2. Номера версий сложные.
  3. Возможность работать офлайн.
  4. Работать быстро и удобно.
  5. Требуется синхронизация репозиториев, так как проект — один.

Теперь можно дать определение и слову Git.

Git — это инструмент для реализации работы распределённой системы контроля версий.

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

Как работает GitHub

Для работы с GitHub нам потребуется установить клиент контроля версий (в GitHub, это GitHub Desktop ) и создать репозиторий. Репозиторий можно создать, как через веб-сайт, так и через клиент.

Принципы работы с репозиторием GitHub

  1. С помощью клиента копируем весь репозиторий на свой компьютер (pull).
  2. Вносим различные правки, сохраняем, вносим правки и т.д. в различные файлы репозитория.
  3. Просим клиента внести изменённые файлы в репозиторий.
    Внесение измененных файлов в репозиторий называется фиксацией изменений или «коммитом» (commit).
  4. После коммита версия вашего локального репозитория изменилась.
  5. На данный момент изменения фиксированы только на локальном репозитории, чтобы они отобразились на сайте GitHub, требуется еще одна функция «синхронизация репозиториев» (push).
  6. Теперь ваш главный репозиторий, расположенный в GitHub, такой же, как на вашем компьютере.

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

Слияние, конфликт, разрешение конфликта

Для понимая нужен пример. Влад и Артем сделали копию репозитория (pull) с фалом версии 1 с GitHub, внесли разные изменения в этот файл, оба зафиксировали изменения (commit) → версии фала в локальных репозиториев изменились, у Влада версия 2, у Артем 2А. И затем Влад запушил (синхронизировал репозитории- push). Теперь на GitHub добавилась версия файла 2. Артем тоже решил запушить свои изменения, т. к. на GitHub есть версия которой нет у Артема (у него нет версии 2), система откажется принимать его репозиторий для сохранения версии 2.

Для того, чтобы внести свои изменения, Артему нужно опять скопировать репозиторий (pull) с GitHub с дополнительной версией этого файла. При копировании произойдет конфликт.

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

Способы решения конфликта:

  1. Автоматическое слияние. Сравнивая построчно код Влада и Артема, GitHub может решить совместить куски кода в файле, при этой получится новая версия файла. При таком подходе в репозитории будут находиться версии 1, 2, 2А, и 3, а Артем теперь может запушить все отсутствующие версии файла.
  2. Разрешение конфликта вручную. Git пометит, какой код конфликтует, и вам нужно будет решить, какой вариант оставить или вообще внести третий. Создается версия 3, и Артем может запушить отсутствующие версии файла.

Master / не master, Fork, Pull request

Ветки — это своеобразные папки со всеми файлами проекта. Ветка Master — это самая главная папка вашего проекта, она всегда существует. Дополнительные ветки создаются под всякие дополнительные нужды.

Пример модели работы с ветками:

В Master лежит последняя стабильная версия, где вы можете вносить незначительные изменения; development — ветка для непосредственной разработки; dev-adaptive — ветка разработки, связанная с планируемым расширением функционала.

Что такое Fork? К примеру, на GitHub вам понравился какой-то проект, но вы заметили в нем ошибку и знаете, как ее решить, но доступа к редактированию чужого проекта у вас нет. Для этого вам нужно создать fokr. Теперь у вас есть доступ для редактирования файлов проекта. Вы справились с багом, но ваши труду пропадут даром т. к. изменения не отобразится в master ветке проекта. Чтобы такого не произошло и создан Pull request.

Pull request — это обращение к владельцам проекта с предложением внести в главную ветку ваши изменения.

На этом небольшое введение походит к концу. Не мучайтесь с допотопной системой версий, переходите на GitHub. Спасибо за внимание.

Добавить комментарий