147 lines
5.3 KiB
Markdown
147 lines
5.3 KiB
Markdown
|
+++
|
||
|
title = "Beginner's guide to Git"
|
||
|
date = 2024-07-19
|
||
|
+++
|
||
|
|
||
|
## WhatIs Git?
|
||
|
|
||
|
Git is a version control system. It is a program that allows you to roll back changes to files before they were previously saved.
|
||
|
It also helps multiple people work on a project. Thus it can combine changes made by several developers.
|
||
|
|
||
|
There are services that provide access to git repositories, the most popular is [GitHub](https://github.com/).
|
||
|
|
||
|
## How to download someone's repository?
|
||
|
|
||
|
1. Clone it with `git clone REPO_LINK`
|
||
|
```bash
|
||
|
git clone https://github.com/oneshotws/hackerProg
|
||
|
```
|
||
|
First time - we will get prompt, answer `yes` (details below).
|
||
|
|
||
|
|
||
|
## Getting started - How to make repo?
|
||
|
|
||
|
0. __Register__ on Github
|
||
|
|
||
|
1. Create a Git __repository__
|
||
|
![](./images/10.png)
|
||
|
![](./images/11.png)
|
||
|
2. Choose a __license__
|
||
|
- __"MIT License"__ if you don't know what to choose
|
||
|
![MIT](./images/21.png)
|
||
|
- __"GNU GPLv3"__ if you want your project to be free software.
|
||
|
![GNU GPLv3](./images/22.png)
|
||
|
|
||
|
3. __Clone__ (download) the repository `git clone REPO_LINK`.
|
||
|
|
||
|
Get repo link (click on "Code"): ![](./images/31.png)
|
||
|
If we clone via SSH link, we will get promt:
|
||
|
```bash
|
||
|
~ ➤ git clone git@github.com:oneshotws/hackerProg.git
|
||
|
Cloning into 'hackerProg'...
|
||
|
The authenticity of host 'github.com (140.82.121.4)' can't be established.
|
||
|
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
|
||
|
This key is not known by any other names.
|
||
|
Are you sure you want to continue connecting (yes/no/[fingerprint])?
|
||
|
```
|
||
|
|
||
|
- write `yes`, press enter. This should happen only once.
|
||
|
And we will get an error:
|
||
|
|
||
|
```bash
|
||
|
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
|
||
|
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
|
||
|
git@github.com: Permission denied (publickey).
|
||
|
fatal: Could not read from remote repository.
|
||
|
|
||
|
Please make sure you have the correct access rights
|
||
|
and the repository exists.
|
||
|
|
||
|
```
|
||
|
|
||
|
Previously GitHub said we have not added the SSH key to our account.
|
||
|
<!-- ![](./images/32.png) -->
|
||
|
|
||
|
|
||
|
4. __Generate__ an SSH key (if you don't have one!) - `ssh-keygen` and press enter 3 times:
|
||
|
```bash
|
||
|
~ ➤ ssh-keygen
|
||
|
Generating public/private ed25519 key pair.
|
||
|
Enter file in which to save the key (/home/casual/.ssh/id_ed25519):
|
||
|
Enter passphrase (empty for no passphrase):
|
||
|
Enter same passphrase again:
|
||
|
Your identification has been saved in /home/casual/.ssh/id_ed25519
|
||
|
Your public key has been saved in /home/casual/.ssh/id_ed25519.pub
|
||
|
The key fingerprint is:
|
||
|
SHA256:ut0/9NgtyQEmOozmVOUBFbnfAgScz9IkwPCKalOCff0 casual@Casual-PC
|
||
|
The key's randomart image is:
|
||
|
+--[ED25519 256]--+
|
||
|
| .o.oo=oo |
|
||
|
| .. + * |
|
||
|
| . X o |
|
||
|
|.. . o o O o |
|
||
|
|..o.o .+So = o |
|
||
|
| .o. +o+ + o |
|
||
|
|.o +. E. . * + |
|
||
|
|. . .o . o * .|
|
||
|
| . . .... . |
|
||
|
+----[SHA256]-----+
|
||
|
|
||
|
```
|
||
|
Output the public SSH key with `cat` and copy it.
|
||
|
```
|
||
|
~ ➤ cat /home/casual/.ssh/id_ed25519.pub
|
||
|
ssh-ed25519 AAAAC3NzaC1lZDI1HEX5AAAAIIMaB2mluyXjROHI8GJ2o9xfvj+uiol/GbPnwJDzZkFm casual@Casual-PC
|
||
|
```
|
||
|
<!-- ![](./images/34.png) -->
|
||
|
Next we click the "add a new public key" hyperlink and paste in our SSH public key.
|
||
|
![](./images/33.png)
|
||
|
![](./images/35.png)
|
||
|
(note - screenshot have different key)
|
||
|
This should happen only once.
|
||
|
|
||
|
After that we will be able to download repositories via SSH and upload changes (`git push`), what will prevent problems in the future.
|
||
|
Run `git clone git@github.com:oneshotws/hackerProg.git`:
|
||
|
|
||
|
![](./images/36.png)
|
||
|
![](./images/37.png)
|
||
|
<!-- ```bash -->
|
||
|
<!-- ~ ➤ cd hackerProg -->
|
||
|
<!-- hackerProg ➤ ls -->
|
||
|
<!-- LICENSE main.go README.md -->
|
||
|
<!-- hackerProg ➤ bat main.go -->
|
||
|
<!-- ───────┬────────────────────────────────────────────────────────────── -->
|
||
|
<!-- │ File: main.go -->
|
||
|
<!-- ───────┼────────────────────────────────────────────────────────────── -->
|
||
|
<!-- 1 │ package main -->
|
||
|
<!-- ───────┴────────────────────────────────────────────────────────────── -->
|
||
|
<!-- ``` -->
|
||
|
|
||
|
|
||
|
|
||
|
5. __Develop__ your program.
|
||
|
Once you make the changes you want, upload them to the repository using:
|
||
|
`git add . && git commit -am 'new feature' && git push`.
|
||
|
|
||
|
However, you will probably find that git doesn't know who you are, so it will ask you to add your email and name with `git config`.
|
||
|
![](./images/41.png)
|
||
|
- `git add .` - adds new files to the repository (not all files are tracked in folder that will be uploaded to remote repository)
|
||
|
- `git commit -am 'new feature description'` - saves (commits) changes to the repository that you can rollback to later.
|
||
|
- `git push` - uploads them to GitHub.
|
||
|
|
||
|
After that, our local changes will be displayed on github.
|
||
|
|
||
|
|
||
|
---
|
||
|
|
||
|
[Other typical Git problems.](https://ohshitgit.com/)
|
||
|
|
||
|
---
|
||
|
|
||
|
Btw, it's experemental post. Do you like this approach that we deal with problem as we are doing it first time together? Or do you prefer more easier to read - step by step (HowTo) guide?
|
||
|
|
||
|
{{< source >}}
|
||
|
My PHD2 presentation
|
||
|
{{< /source >}}
|
||
|
|