# Week-1: Git - Sistem za verzionisanje koda

**Git** je alat koji je razvio [Linus Torvalds](https://en.wikipedia.org/wiki/Linus_Torvalds) kako bi olaksao vodjenje jednog velikog i kompleksnog projekta – **Linux kernela**. Git je de-facto postao standardni alat za verzionisanje koda.

### Git - Osnovni pojmovi

* **Init** – Inicijalizacija Git repozitorijuma. Inicijalizacija se obavlja komandom `git init` u direktorijumu u kojem se nalazi projekat.
* **Repozitoriji** – Git repozitorijum je mesto gde se nalaze sve verzije projekta.
  * **Remote** – Remote je udaljeni/remote repozitorijum (npr. onaj koji ste kreirali na git serveru, GitHub-u etc.).
  * **Local** – Local je lokalni repozitorijum (incijaliziran na vasem lokalnom racunaru).
* **Add** – Add je proces dodavanja fajlova u staging area. Fajlovi se dodaju komandom `git add` ili `git add .` (dodaje sve fajlove u trenutnom direktorijumu).
* **Staging Area** – Staging area je mesto gde se nalaze fajlovi koji ce biti dodati u commit.
* **Commit** – Commit je verzija projekta. Commit se sastoji od snapshot-a projekta i metapodataka koji opisuju commit.
* **Push** – Push je proces slanja izmjena koda iz lokalnog repozitorijuma na udaljeni/remote repozitorijum (npr. na GitHub).
* **Branch** – Branch je nezavisna linija/grana razvoja projekta. Branch se koristi da bi se razvijale nove funkcionalnosti neovisno od glavne `main` grane, Branch/Grana se moze spojiti sa drugom granom/branch-om.
* **Pull** – Pull je proces preuzimanja izmjena koda iz udaljenog/remote repozitorijuma na lokalni repozitoriji (onaj na vasem racunaru).
* **Merge** – Merge je proces spajanja dve grane/branch-a u jednu granu/branch.
* **Pull Request** – Pull request je zahtjev za spajanje izmjena iz jedne grane/branch-a u drugu granu/branch.
* **Fork** – Fork je kopija projekta. Fork se koristi da bi se napravila kopija postojeceg projekta i nastavio rad na njemu bez uticaja na originalni projekat. Fork se moze spojiti sa originalnim projektom koristeci Pull Request.

<figure><img src="/files/njbEBsNV3rAsbUBW3l8u" alt=""><figcaption></figcaption></figure>

### **Osnovne Git Naredbe**

```bash
$ git init #inicijalizacija git repozitorijuma

$ git status #prikaz statusa repozitorijuma

$ git add file-name #dodavanje fajla u staging area

$ git add . #dodavanje svih fajlova iz radnog direktorija ova u staging area

$ git commit -m"commit message" #kreiranje commit-a

$ git push #slanje izmjena na udaljeni/remote repozitorijum

$ git pull #preuzimanje izmjena sa udaljenog/remote repozitorijuma

$ git log #prikaz loga commit-ova

$ git log --oneline #prikaz loga commit-ova u jednoj liniji

$ git log --oneline --graph #prikaz loga commit-ova u jednoj liniji sa 
                            #grafickim prikazom

$ git clone repo-url #kloniranje projekta sa udaljenog/remote repozitorijuma

$ git remote -v #prikaz povezanih udaljenih/remote repozitorijuma

$ git branch #prikaz trenutne grane/branch-a unutar kojeg se nalazite

$ git branch branch-name #kreiranje nove grane/branch-a od trenutne 
                         #grane/branch-a na kojem se nalazite, 
                         #necete biti automatski prebaceni na novu granu/branch

$ git merge branch-name #spajanje grane/branch-a sa trenutnom granom/branch-om

$ git checkout branch-name #prebacivanje na drugu granu/branch

$ git remote add origin repo-url #povezivanje lokalnog repozitorijuma sa 
                                 #udaljenim/remote repozitorijumom

$ git config --global user.name "username" #podesavanje korisnickog imena --global 
                                           #znaci da ce ove postavke biti 
                                           #primjenjene na svaki repozitorijum na 
                                           #vasem racunaru
```

### Git Cheat Sheet

<figure><img src="/files/DC7i2NjKzunghoiT7vTg" alt=""><figcaption><p>Git Cheat Sheet by Jan Kruger</p></figcaption></figure>

### Snimci predavanja

#### DevOps Mentorship Program - Week 1 - Git & GitHub ([#tier](https://www.youtube.com/hashtag/tier)-1-group-1)

{% embed url="<https://youtu.be/jNPFe9vdRFI>" %}
DevOps Mentorship Program - Week 1 - Git & GitHub ([#tier](https://www.youtube.com/hashtag/tier)-1-group-1)
{% endembed %}

#### DevOps Mentorship Program - Week 1 - Git & GitHub (#tier-1-group-2)

{% embed url="<https://youtu.be/FDOho51mkuE>" %}
DevOps Mentorship Program - Week 1 - Git & GitHub (#tier-1-group-2)
{% endembed %}

### Materijali za ucenje

* [Uvod u Git - Tomo Krajina](https://github.com/allops-solutions/devops-aws-mentorship-program/blob/main/resources/books/github_knjiga_tomo_krajina.pdf)
* [Git Notes for Professionals](https://github.com/allops-solutions/devops-aws-mentorship-program/blob/main/resources/books/git-notes-for-professionals.pdf)
* [Git for Professionals Tutorial - Tools & Concepts for Mastering Version Control with Git](https://www.youtube.com/watch?v=Uszj_k0DGsg)
* [git Documentation](https://git-scm.com/docs/git)

### Korisni alati

* [VS Code Git History Extension](https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory)
* [VS Code Git Graph Extension](https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph)
* [VS Code GitLens — Git supercharged Extension](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)

### Zadatak

Kreirajte javni GitHub repozitoriji unutar svog GitHub racuna i nazovite ga: `ime-prezime-devops-mentorship`. Kreirajte `.gitignore` i `README.md` fajlove. Nakon sto ste kreirali fajlove na vasem lokalnom racunaru postavite ih na GitHub repozitoriji koji ste ranije kreirali. Vas repozitoriji bi trebao da ima dvije grane main i development gdje cete sve izmjene na `main` granu dodavati praveci Pull Request sa `development` grane odnosno branch-a.&#x20;

### Dodatni materijali

#### Knjige

* [Git Pro - Scott Chacon & Ben Straub](https://git-scm.com/book/en/v2)

#### Video materijali

* [The gitflow workflow - in less than 5 mins.](https://www.youtube.com/watch?v=1SXpE08hvGs\&ab_channel=Devchild)
* [Professional Guides: Workflow Strategies](https://www.youtube.com/watch?v=aJnFGMclhU8\&ab_channel=GitHubTraining%26Guides)
* [Git Flow vs GitHub Flow: What You Need to Know](https://www.youtube.com/watch?v=hG_P6IRAjNQ\&ab_channel=AlexHyett)
* [Git Tutorial - Git Crash Course using BitBucket](https://www.youtube.com/watch?v=1tC6Z57AOkY\&t=984s\&ab_channel=AHTCloud)

#### Blog Postovi

* [15 Git Commands You May Not Know](https://dev.to/zaiste/15-git-commands-you-may-not-know-4a8j)
* [Introduction to git flow](https://blog.knoldus.com/introduction-to-git-flow/)
* [Mastering git merge and rebase](https://towardsdatascience.com/mastering-git-merge-and-rebase-f2a7c5c348a9)
* [Git Flow vs Github Flow\*\*](https://www.geeksforgeeks.org/git-flow-vs-github-flow/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devops.awsbosnia.com/devops-mentorship-program/week-1-git-sistem-za-verzionisanje-koda.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
