Какво е GitHub? Повече от контрола на версиите на Git в облака

GitHub е по същество услуга за хостинг на Git хранилище, т.е. облачно базирано управление на изходния код или система за контрол на версиите, но това е само началото. В допълнение, GitHub изпълнява функции за преглед на кода (заявки за изтегляне, разлики и заявки за преглед), управление на проекти (включително проследяване и задаване на проблеми), интеграции с други инструменти за разработчици, управление на екип, документация и „социално кодиране“.

Нещо като сайт за социални мрежи за програмисти, GitHub е отворена среда, в която програмистите могат свободно да споделят и да си сътрудничат (дори ad hoc) върху отворен код. GitHub улеснява намирането на полезен код, копиране на хранилища за собствена употреба и изпращане на промени в чужди проекти. В резултат на това GitHub се превърна в дом на практически всеки проект с отворен код от всякакво значение.

Винаги, когато искам да проуча проект с отворен код, започвам с търсене на името на проекта. След като намеря уебсайта на проекта, търся връзката към хранилището на кода и девет пъти от 10 завършвам в GitHub.

Контрол на версиите на Git

Преди да можем да разберем какво прави GitHub и как работи GitHub, трябва да разберем Git. Git е разпределена система за контрол на версиите, първоначално написана от Линус Торвалдс през 2005 г. за и с помощта на общността на ядрото на Linux. Не съм тук, за да ви продавам на Git, така че ще ви спестя колко е бърз и малък, гъвкав и популярен, но трябва да знаете, че когато клонирате хранилище на Git („репо“, накратко) получавате цялата история на версиите на собствения си компютър, а не само моментна снимка от един клон наведнъж.

Git започна като инструмент за команден ред, подобаващ на произхода му в общността на ядрото на Linux. Все още можете да използвате командния ред на Git, ако искате, но не е нужно. Вместо или в допълнение към командния ред, можете да използвате безплатния клиент на GitHub на Windows или Mac, или който и да е от редица други GUI за Git, или редактор на код, който се интегрира с Git. Всички тези опции първоначално са по-лесни за използване от командния ред. Командният ред Git е предварително инсталиран на повечето Mac и Linux системи и поддържа всички операции; GUI обикновено поддържат често използвано подмножество на Git операции.

Git се различава от по-старите системи за контрол на версиите като Subversion по това, че се разпространява, а не централизирано. Освен това е доста бързо, особено след като повечето операции се случват във вашето локално хранилище. Независимо от това, използването на Git добавя ниво на сложност: фиксирането на код във вашето локално хранилище и избутването на вашите фиксирания в отдалечено хранилище са отделни стъпки. Когато екипите забравят това (или не са били научени за това), това може да доведе до ситуации, при които различни разработчици работят с кодови бази, които се разминават.

Отдалечено хранилище на Git може да бъде на сървър или на машина на друг разработчик. Това дава възможност за много възможни работни процеси за екипи. Един често срещан работен поток включва използването на сървърно хранилище като „благословено“ хранилище, към което се ангажира само прегледан, добре тестван код, често чрез искане за изтегляне, издадено от хранилището на разработчика.

Функционалност на GitHub

Вече забелязах, че GitHub е базиран в облак Git сървър за хостинг на код и социално кодиране и че той изпълнява функции за преглед на кода (заявки за изтегляне, разлики и прегледи), управление на проекти (включително проследяване на проблеми и присвояване) интеграции с други инструменти за разработчици, управление на екип и документация.

Последната иновация в социалното кодиране от GitHub е съавторите на ангажименти , които постигате, като добавите един или повече трейлъри „в съавторство“ в края на съобщението за ангажиране. Този механизъм не засяга репо ядрото само по себе си и не променя начина, по който репото изглежда на обикновен Git, но на GitHub chrome ще покаже множество коммитатори в списъка на фиксиране и ще даде кредит на всеки съавтор графика на приноса.

Ако желаете, можете да разширите GitHub, като използвате API на GitHub GraphQL. Това е значително подобрение спрямо предишния API на GitHub, който се основава на REST повиквания.

GitHub Enterprise

GitHub.com е услуга за хостинг в облак, която може да обработва редица типове акаунти: безплатни (само публични репозитории) и платени ($ 7 на месец) сметки на разработчици, екипи ($ 9 на потребител на месец) и бизнеси ($ 21 на потребител на месец) ). Ако искате да стартирате GitHub Enterprise локално или във вашия собствен екземпляр в облак на AWS, Microsoft Azure, Google Cloud Platform или IBM Cloud, можете да го направите за същите 21 щ.д. на потребител на месец като хостван бизнес акаунт. GitHub Enterprise добавя няколко полезни функции, като изпращане на съобщения в приложението до потребителите и осигуряване на достъп, интегрирано с LDAP директории, но се отказва от 99,95% SLA на GitHub.com за ъптайм за хоствани бизнес акаунти.

GitHub срещу Bitbucket

GitHub не е единствената хоствана подобрена услуга Git, а GitHub Enterprise не е единственият локален продукт за компании. Atlassian Bitbucket се конкурира и с двамата, с малко по-ниски цени и с безплатно петчленно ниво на екип, което включва неограничени частни репозитории и използването на Bitbucket Pipelines за непрекъсната интеграция. GitHub е по-популярен сайт за проекти с отворен код и разполага с много по-голям набор от разработчици с отворен код. Ценообразуването на Bitbucket е по-благоприятно за малки стартиращи компании.

GitHub срещу GitLab

GitLab се конкурира както с GitHub, така и с Bitbucket, както хоствани, така и локално. На пръв поглед изглежда, че GitLab има по-голяма функционалност на жизнения цикъл от останалите, но разликата от Atlassian най-вече изчезва, ако включите Jira, когато оценявате Bitbucket. GitLab предлага облачни функции Gold-plan за проекти с отворен код безплатно, но тази допълнителна функционалност всъщност не компенсира по-голямата общност на разработчици с отворен код в GitHub.

GitHub Desktop

GitHub Desktop, показан по-долу, улеснява управлението на вашите хранилища GitHub.com и GitHub Enterprise. Въпреки че не изпълнява всички функции на командния ред на Git и уеб GUI на GitHub, той изпълнява всички операции, които ще извършвате ежедневно от вашия работен плот, докато допринасяте за проекти. Обикновено ще клонирате репозитории от GitHub към GitHub Desktop, ще ги синхронизирате, ако е необходимо, ще създавате клонове за вашата работа, ще ангажирате работата си и от време на време ще връщате един или повече ангажименти.

За да работите с репозитори, за които ви липсват привилегии за ангажиране и сътрудничество, обикновено започвате с раздвояване на репото на GitHub и клониране на вилицата на вашия работен плот. След това добавяте всички клонове, от които се нуждаете, в GitHub Desktop, извършвате всички промени, които желаете, тествате работата си, връщате фиксираните връзки към отдалеченото раздвоено репо и накрая генерирате заявка за изтегляне към родителския проект.

Можете да видите бутона Pull Request в горния десен ъгъл на GitHub Desktop интерфейс. Можете също да видите много ангажименти в проекта Neo4j, които са били обединения на клонове или заявки за изтегляне. Това е типично за проекти с отворен код с малко участници и много участници.

Редактор на Atom

Можете да използвате всеки редактор за програмиране, който искате да редактирате, включително безплатния, отворен код, хакнат Atom редактор на GitHub (показан по-долу), който се интегрира добре с GitHub и GitHub Desktop. Можете да използвате Atom на MacOS, Windows или Linux. Можете да отворите Atom от GitHub Desktop, като щракнете с десния бутон върху хранилището, което искате да прегледате или редактирате.

Atom се доставя с около 90 пакета, четири UI теми и осем синтаксисни теми. Можете да добавите всеки от 7000 пакета и 2000 теми към вашата инсталация на Atom. Пакетите могат да поддържат специфични езици за програмиране, като TypeScript, или да добавят функционалност, като Hydrogen, интерактивна среда за кодиране, която поддържа Python, R, JavaScript и други Jupyter ядра.

Atom е изграден с интеграция на HTML, JavaScript, CSS и Node.js. Той работи на Electron, рамка за изграждане на приложения за различни платформи, използващи уеб технологии. GitHub Desktop също работи на Electron.

Проекти на GitHub

Софтуерните проекти с отворен код често се нуждаят от начини за налагане на контрол на качеството, като същевременно приемат приноси извън основния екип на ангажиращите се. Нуждата от сътрудници е огромна, но привличането на нови сътрудници в проекта, като същевременно се запазва целостта на кодовата база, е трудно и потенциално опасно начинание. В същото време нуждата от обратна връзка от потребителите на проекта също е огромна.

GitHub има редица механизми, които могат да помогнат за смазване на колелата на проекти с отворен код. Например потребителите могат да добавят проблеми към проекта на GitHub, за да докладват за грешки или да изискват функции. Някои други системи наричат ​​тези билети . Ръководителите на проекти, работещи с проблеми, могат да генерират списъци със задачи, да възлагат проблеми на конкретни сътрудници, да споменават други заинтересовани участници, така че да бъдат уведомявани за промени, да добавят етикети и да добавят етапи.

За да допринесете за проект, основно започвате от клон на глава на тема, който съдържа извършените промени, които искате да бъдат добавени към базовия клон на проекта, и инициализирате заявка за изтегляне от клона на главата, както е показано по-долу. След това натискате своите ангажименти и ги добавяте към клона на проекта. Други участници могат да прегледат предложените от вас промени, да добавят коментари за преглед, да допринесат за обсъждането на искането за изтегляне и да добавят свои собствени ангажименти към искането за изтегляне.

След като всички участващи са доволни от предложените промени, фиксатор може да обедини заявката за изтегляне. Обединяването може да запази всички фиксирания, да смачка всички промени в един фиксиран запис или да преосмисли фиксирането от главния клон в основния клон. Ако обединяването генерира конфликти, можете да ги разрешите на GitHub или с помощта на командния ред.

Прегледите на кода на GitHub позволяват на разпределен екип да си сътрудничи асинхронно. Полезните инструменти на GitHub за рецензенти включват разлики (долната половина на екранната снимка по-долу), история (горната половина) и изглед на обвинения (начин за преглед на развитието на фиксиране на файл чрез фиксиране). Кодовите дискусии в GitHub влизат в коментари, които са представени в редица с промените в кода ви. Ако вградените инструменти не са достатъчни за вашия проект, можете да добавите инструменти за преглед на код и непрекъсната интеграция от пазара на GitHub. Добавките на пазара често са безплатни за проекти с отворен код.

Същества на GitHub

Gists са специални хранилища на GitHub за споделяне на вашата работа (публично) или за запазване на работа за по-късно повторно използване (секретно). Те могат да съдържат единични файлове, части от файлове или пълни приложения. Можете да изтеглите списъци, да ги клонирате, да ги разклоните и да ги вградите.

Публичните списъци могат да бъдат открити и намерени при търсения. Можете да използвате ключови думи, за да стесните това, което намирате, включително префикси, за да ограничите резултатите до списъци от конкретни потребители, списъци с поне N звезди, списъци с конкретни имена на файлове и т.н.

Тайните списъци не могат да се търсят, но всеки с URL адреса може да ги види. Ако наистина искате вашият код да бъде защитен, използвайте частно хранилище.

Както видяхме, GitHub предоставя хранилища на Git като услуга, заедно с функции за преглед на код, управление на проекти, интеграции с други инструменти за разработчици, управление на екип, социално кодиране и документация. Въпреки че GitHub не е единственият продукт в своята категория, той е доминиращото хранилище за разработване на софтуер с отворен код.