# Увод у GitHub Ова лекција покрива основе GitHub-а, платформе за хостовање и управљање изменама вашег кода. ![Увод у GitHub](../../../../translated_images/webdev101-github.8846d7971abef6f947909b4f9d343e2a23778aa716ca6b9d71df7174ee5009ac.sr.png) > Скетч од [Tomomi Imura](https://twitter.com/girlie_mac) ## Квиз пре предавања [Квиз пре предавања](https://ff-quizzes.netlify.app/web/quiz/3) ## Увод У овој лекцији ћемо обрадити: - праћење рада који обављате на вашем рачунару - рад на пројектима са другима - како допринети софтверу отвореног кода ### Предуслови Пре него што почнете, потребно је да проверите да ли је Git инсталиран. У терминалу укуцајте: `git --version` Ако Git није инсталиран, [преузмите Git](https://git-scm.com/downloads). Затим подесите ваш локални Git профил у терминалу: * `git config --global user.name "ваше-име"` * `git config --global user.email "ваш-имејл"` Да бисте проверили да ли је Git већ конфигурисан, можете укуцати: `git config --list` Такође ће вам бити потребан GitHub налог, уређивач кода (као што је Visual Studio Code), и потребно је да отворите ваш терминал (или командну линију). Посетите [github.com](https://github.com/) и направите налог ако га већ немате, или се пријавите и попуните ваш профил. ✅ GitHub није једини репозиторијум кода на свету; постоје и други, али GitHub је најпознатији. ### Припрема Потребан вам је фолдер са код пројектом на вашем локалном рачунару (лаптопу или десктопу) и јавни репозиторијум на GitHub-у, који ће служити као пример како допринети пројектима других. --- ## Управљање кодом Рецимо да имате локални фолдер са неким код пројектом и желите да почнете да пратите ваш напредак користећи git - систем за контролу верзија. Неки људи пореде коришћење git-а са писањем љубавног писма себи у будућности. Читајући поруке ваших commit-ова данима, недељама или месецима касније, моћи ћете да се сетите зашто сте донели одређену одлуку или да "вратите" промену - то јест, ако пишете добре поруке commit-ова. ### Задатак: Направите репозиторијум и commit-ујте код > Погледајте видео > > [![Видео о основама Git-а и GitHub-а](https://img.youtube.com/vi/9R31OUPpxU4/0.jpg)](https://www.youtube.com/watch?v=9R31OUPpxU4) 1. **Направите репозиторијум на GitHub-у**. На GitHub.com, у картици репозиторијума или из навигационе траке у горњем десном углу, пронађите дугме **new repo**. 1. Дајте вашем репозиторијуму (фолдеру) име. 1. Изаберите **create repository**. 1. **Навигирајте до вашег радног фолдера**. У вашем терминалу, пребаците се у фолдер (такође познат као директоријум) који желите да почнете да пратите. Укуцајте: ```bash cd [name of your folder] ``` 1. **Иницијализујте git репозиторијум**. У вашем пројекту укуцајте: ```bash git init ``` 1. **Проверите статус**. Да бисте проверили статус вашег репозиторијума, укуцајте: ```bash git status ``` излаз може изгледати овако: ```output Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: file.txt modified: file2.txt ``` Обично команда `git status` вам говори ствари као што су који фајлови су спремни да буду _сачувани_ у репозиторијуму или имају измене које можда желите да задржите. 1. **Додајте све фајлове за праћење** Ово се такође назива постављање фајлова/додавање фајлова у staging area. ```bash git add . ``` Аргумент `git add` са `.` означава да су сви ваши фајлови и измене спремни за праћење. 1. **Додајте одабране фајлове за праћење** ```bash git add [file or folder name] ``` Ово нам помаже да додамо само одабране фајлове у staging area када не желимо да commit-ујемо све фајлове одједном. 1. **Уклони све фајлове из staging area** ```bash git reset ``` Ова команда нам помаже да уклонимо све фајлове из staging area одједном. 1. **Уклони одређени фајл из staging area** ```bash git reset [file or folder name] ``` Ова команда нам помаже да уклонимо само одређени фајл из staging area који не желимо да укључимо у следећи commit. 1. **Сачувајте ваш рад**. У овом тренутку сте додали фајлове у такозвани _staging area_. Место где Git прати ваше фајлове. Да бисте направили промену трајном, потребно је да _commit-ујете_ фајлове. Да бисте то урадили, направите _commit_ командом `git commit`. _Commit_ представља тачку чувања у историји вашег репозиторијума. Укуцајте следеће да направите _commit_: ```bash git commit -m "first commit" ``` Ово commit-ује све ваше фајлове, додајући поруку "first commit". За будуће поруке commit-ова, желећете да будете описнији у вашем опису како бисте пренели какву сте промену направили. 1. **Повежите ваш локални Git репозиторијум са GitHub-ом**. Git репозиторијум је добар на вашем рачунару, али у неком тренутку желите да имате резервну копију ваших фајлова негде и такође позовете друге људе да раде са вама на вашем репозиторијуму. Једно такво одлично место је GitHub. Запамтите да смо већ направили репозиторијум на GitHub-у, тако да је једино што треба да урадимо да повежемо наш локални Git репозиторијум са GitHub-ом. Команда `git remote add` ће то урадити. Укуцајте следећу команду: > Напомена, пре него што укуцате команду, идите на страницу вашег GitHub репозиторијума да пронађете URL репозиторијума. Користићете га у команди испод. Замените ```https://github.com/username/repository_name.git``` вашим GitHub URL-ом. ```bash git remote add origin https://github.com/username/repository_name.git ``` Ово креира _remote_, или везу, названу "origin" која показује на GitHub репозиторијум који сте раније направили. 1. **Пошаљите локалне фајлове на GitHub**. До сада сте направили _везу_ између локалног репозиторијума и GitHub репозиторијума. Хајде да пошаљемо ове фајлове на GitHub следећом командом `git push`, овако: > Напомена, име ваше гране може бити другачије од ```main```. ```bash git push -u origin main ``` Ово шаље ваше commit-ове у вашу "main" грану на GitHub. 2. **Додајте још измена**. Ако желите да наставите са прављењем измена и њиховим слањем на GitHub, само ћете морати да користите следеће три команде: ```bash git add . git commit -m "type your commit message here" git push ``` > Савет, Можда ћете желети да усвојите `.gitignore` фајл како бисте спречили да фајлови које не желите да пратите буду приказани на GitHub-у - као што је тај фајл са белешкама који чувате у истом фолдеру, али нема место у јавном репозиторијуму. Можете пронаћи шаблоне за `.gitignore` фајлове на [.gitignore templates](https://github.com/github/gitignore). #### Поруке commit-ова Одлична порука у Git commit-у завршава следећу реченицу: Ако се примени, овај commit ће <ваша порука овде> За наслов користите императив, садашње време: "промени" уместо "променио" или "мења". Као и у наслову, у телу (опционо) такође користите императив, садашње време. Тело треба да укључи мотивацију за промену и да је упореди са претходним понашањем. Објашњавате `зашто`, а не `како`. ✅ Одвојите неколико минута да прегледате GitHub. Можете ли пронаћи заиста одличну поруку commit-а? Можете ли пронаћи заиста минималну? Које информације мислите да су најважније и најкорисније за преношење у поруци commit-а? ### Задатак: Сарадња Главни разлог за постављање ствари на GitHub је да се омогући сарадња са другим програмерима. ## Рад на пројектима са другима > Погледајте видео > > [![Видео о основама Git-а и GitHub-а](https://img.youtube.com/vi/bFCM-PC3cu8/0.jpg)](https://www.youtube.com/watch?v=bFCM-PC3cu8) У вашем репозиторијуму, идите на `Insights > Community` да видите како ваш пројекат стоји у поређењу са препорученим стандардима за заједницу. Ево неких ствари које могу побољшати ваш GitHub репозиторијум: - **Опис**. Да ли сте додали опис за ваш пројекат? - **README**. Да ли сте додали README? GitHub пружа смернице за писање [README](https://docs.github.com/articles/about-readmes/?WT.mc_id=academic-77807-sagibbon). - **Смернице за допринос**. Да ли ваш пројекат има [смернице за допринос](https://docs.github.com/articles/setting-guidelines-for-repository-contributors/?WT.mc_id=academic-77807-sagibbon)? - **Кодекс понашања**. Да ли ваш пројекат има [кодекс понашања](https://docs.github.com/articles/adding-a-code-of-conduct-to-your-project/)? - **Лиценца**. Можда најважније, да ли ваш пројекат има [лиценцу](https://docs.github.com/articles/adding-a-license-to-a-repository/)? Сви ови ресурси ће помоћи у укључивању нових чланова тима. То су обично ствари које нови сарадници гледају пре него што уопште погледају ваш код, како би утврдили да ли је ваш пројекат право место за њих да проведу своје време. ✅ README фајлови, иако захтевају време за припрему, често се занемарују од стране заузетих одржавалаца. Можете ли пронаћи пример посебно описног README-а? Напомена: постоје неки [алати за креирање добрих README-а](https://www.makeareadme.com/) које бисте могли да испробате. ### Задатак: Спојите код Документација о доприносу помаже људима да допринесу пројекту. Она објашњава које врсте доприноса тражите и како процес функционише. Сарадници ће морати да прођу кроз низ корака да би могли да допринесу вашем репозиторијуму на GitHub-у: 1. **Fork-овање вашег репозиторијума**. Вероватно ћете желети да људи _fork-ују_ ваш пројекат. Fork-овање значи креирање реплике вашег репозиторијума на њиховом GitHub профилу. 1. **Clone**. Након тога ће clone-овати пројекат на свој локални рачунар. 1. **Креирање гране**. Желите да их замолите да креирају _грану_ за свој рад. 1. **Фокусирање измена на једну област**. Замолите сараднике да концентришу своје доприносе на једну ствар у исто време - на тај начин су веће шансе да можете _спојити_ њихов рад. Замислите да напишу исправку грешке, додају нову функцију и ажурирају неколико тестова - шта ако желите, или можете да имплементирате само 2 од 3, или 1 од 3 измене? ✅ Замислите ситуацију где су гране посебно критичне за писање и испоруку доброг кода. Које случајеве употребе можете да замислите? > Напомена, будите промена коју желите да видите у свету и креирајте гране за свој рад. Сви commit-ови које направите биће направљени на грани на којој сте тренутно "checked out". Користите `git status` да видите на којој грани се налазите. Хајде да прођемо кроз процес сарадника. Претпоставимо да је сарадник већ _fork-овао_ и _clone-овао_ репозиторијум, тако да има Git репозиторијум спреман за рад на свом локалном рачунару: 1. **Креирање гране**. Користите команду `git branch` да креирате грану која ће садржати измене које намеравају да допринесу: ```bash git branch [branch-name] ``` 1. **Пребацивање на радну грану**. Пребаците се на одређену грану и ажурирајте радни директоријум командом `git switch`: ```bash git switch [branch-name] ``` 1. **Радите на изменама**. У овом тренутку желите да додате своје измене. Не заборавите да кажете Git-у о томе следећим командама: ```bash git add . git commit -m "my changes" ``` Уверите се да сте дали вашем commit-у добро име, за ваше добро као и за одржаваоца репозиторијума на којем помажете. 1. **Комбинујте ваш рад са `main` граном**. У неком тренутку сте завршили рад и желите да комбинујете ваш рад са радом `main` гране. `Main` грана је можда промењена у међувремену, па се уверите да сте је прво ажурирали на најновију верзију следећим командама: ```bash git switch main git pull ``` У овом тренутку желите да се уверите да се сви _конфликти_, ситуације где Git не може лако да _комбинује_ измене, дешавају у вашој радној грани. Зато покрените следеће команде: ```bash git switch [branch_name] git merge main ``` Ово ће донети све измене из `main` гране у вашу грану и надамо се да можете само наставити. Ако не, VS Code ће вам показати где је Git _збуњен_ и само измените погођене фајлове да кажете који садржај је најтачнији. 1. **Пошаљите ваш рад на GitHub**. Слање вашег рада на GitHub значи две ствари. Пушовање ваше гране на ваш репозиторијум и затим отварање PR-а (Pull Request). ```bash git push --set-upstream origin [branch-name] ``` Горња команда креира грану на вашем fork-ованом репозиторијуму. 1. **Отворите PR**. Затим, желите да отворите PR. То радите тако што навигирајте до fork-ованог репозиторијума на GitHub-у. Видећете индикацију на GitHub-у где вас пита да ли желите да креирате нови PR, кликнете на то и бићете одведени на интерфејс где можете променити наслов поруке commit Увери се да одеђеш на GitHub страницу за форковани репо и уклониш удаљену грану коју си управо послао. `Pull request` изгледа као смешан термин јер заправо желиш да "погураш" своје измене у пројекат. Али одржавалац (власник пројекта) или главни тим треба да размотри твоје измене пре него што их споји са "главном" граном пројекта, тако да заправо тражиш одлуку о изменама од одржаваоца. Pull request је место где се упоређују и дискутују разлике уведене на грани уз рецензије, коментаре, интегрисане тестове и још много тога. Добар pull request прати отприлике исте смернице као и порука комита. Можеш додати референцу на проблем у тракеру проблема, на пример када твој рад решава одређени проблем. Ово се ради коришћењем `#` праћеног бројем твог проблема. На пример `#97`. 🤞Држимо палчеве да сви провери прођу и да власник(ци) пројекта споје твоје измене у пројекат🤞 Ажурирај своју тренутну локалну радну грану са свим новим комитима из одговарајуће удаљене гране на GitHub-у: `git pull` ## Како допринети отвореном коду Прво, хајде да пронађемо репозиторијум (или **репо**) на GitHub-у који те интересује и коме би желео да допринесеш изменом. Желиш да копираш његов садржај на свој рачунар. ✅ Добар начин да пронађеш репозиторијуме погодне за почетнике је [претрага по ознаци 'good-first-issue'](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/). ![Копирај репо локално](../../../../translated_images/clone_repo.5085c48d666ead57664f050d806e325d7f883be6838c821e08bc823ab7c66665.sr.png) Постоји неколико начина за копирање кода. Један од начина је да "клонираш" садржај репозиторијума, користећи HTTPS, SSH или GitHub CLI (Command Line Interface). Отвори свој терминал и клонирај репозиторијум овако: `git clone https://github.com/ProjectURL` Да би радио на пројекту, пребаци се у одговарајући фолдер: `cd ProjectURL` Можеш такође отворити цео пројекат користећи [Codespaces](https://github.com/features/codespaces), GitHub-ов уграђени едитор кода / облачно окружење за развој, или [GitHub Desktop](https://desktop.github.com/). На крају, можеш преузети код у зипованом фолдеру. ### Неколико занимљивих ствари о GitHub-у Можеш да означиш звездицом, пратиш и/или "форкујеш" било који јавни репозиторијум на GitHub-у. Своје репозиторијуме означене звездицом можеш пронаћи у падајућем менију у горњем десном углу. То је као обележавање, али за код. Пројекти имају тракер проблема, углавном на GitHub-у у картици "Issues", осим ако није другачије назначено, где људи дискутују о проблемима везаним за пројекат. А картица Pull Requests је место где људи дискутују и прегледају измене које су у току. Пројекти могу такође имати дискусије у форумима, мејлинг листама или каналима за ћаскање као што су Slack, Discord или IRC. ✅ Разгледај свој нови GitHub репо и испробај неколико ствари, као што су уређивање подешавања, додавање информација у свој репо и креирање пројекта (као што је Канбан табла). Постоји много тога што можеш да урадиш! --- ## 🚀 Изазов Удружи се са пријатељем да радите на кодовима један другог. Креирајте пројекат заједно, форкујте код, креирајте гране и спојите измене. ## Квиз након предавања [Квиз након предавања](https://ff-quizzes.netlify.app/web/quiz/4) ## Преглед и самостално учење Прочитај више о [доприносу софтверу отвореног кода](https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution). [Git подсетник](https://training.github.com/downloads/github-git-cheat-sheet/). Вежбај, вежбај, вежбај. GitHub има одличне путеве за учење доступне преко [skills.github.com](https://skills.github.com): - [Прва недеља на GitHub-у](https://skills.github.com/#first-week-on-github) Наћи ћеш и напредније курсеве. ## Задатак Заврши [курс Прва недеља на GitHub-у](https://skills.github.com/#first-week-on-github) --- **Одрицање од одговорности**: Овај документ је преведен коришћењем услуге за превођење помоћу вештачке интелигенције [Co-op Translator](https://github.com/Azure/co-op-translator). Иако настојимо да обезбедимо тачност, молимо вас да имате у виду да аутоматски преводи могу садржати грешке или нетачности. Оригинални документ на његовом изворном језику треба сматрати меродавним извором. За критичне информације препоручује се професионални превод од стране људи. Не преузимамо одговорност за било каква погрешна тумачења или неспоразуме који могу настати услед коришћења овог превода.