# About Git is a Version Control System. It is an advanced open source project. That is the most popular VCS with his advantage like security, efficiency, speed etc. He was developed in 2005 by Linus Torvalds, the Linux's father. Many companies projects using Git (Google, Gnome, Netflix, etc). In 2016 12 million people were using Git. All project histories were saved in the work file. You can publish, with all histories, projects in a Git platform like Gitea, GitHub, Bitbucket, GitLab, etc. With this tool, you can commit projects, compare projects. That is the best tool for teamwork. # Git via `bash` ## Initialing a git repo ``` waldek@metal:~/Documents/my_first_git_repository$ git status fatal: not a git repository (or any of the parent directories): .git waldek@metal:~/Documents/my_first_git_repository$ git init . hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch hint: hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and hint: 'development'. The just-created branch can be renamed via this command: hint: hint: git branch -m Initialized empty Git repository in /home/local/waldek/Documents/my_first_git_repository/.git/ waldek@metal:~/Documents/my_first_git_repository$ git status On branch master No commits yet nothing to commit (create/copy files and use "git add" ``` ## What's in this repo ``` waldek@metal:~/Documents/my_first_git_repository$ ls -la total 12 drwxr-xr-x 3 waldek waldek 4096 May 2 22:06 . drwxr-xr-x 4 waldek waldek 4096 May 2 22:06 .. drwxr-xr-x 7 waldek waldek 4096 May 2 22:07 .git waldek@metal:~/Documents/my_first_git_repository$ ls -la .git/ total 40 drwxr-xr-x 7 waldek waldek 4096 May 2 22:07 . drwxr-xr-x 3 waldek waldek 4096 May 2 22:06 .. drwxr-xr-x 2 waldek waldek 4096 May 2 22:06 branches -rw-r--r-- 1 waldek waldek 92 May 2 22:06 config -rw-r--r-- 1 waldek waldek 73 May 2 22:06 description -rw-r--r-- 1 waldek waldek 23 May 2 22:06 HEAD drwxr-xr-x 2 waldek waldek 4096 May 2 22:06 hooks drwxr-xr-x 2 waldek waldek 4096 May 2 22:06 info drwxr-xr-x 4 waldek waldek 4096 May 2 22:06 objects drwxr-xr-x 4 waldek waldek 4096 May 2 22:06 refs waldek@metal:~/Documents/my_first_git_repository$ ``` ## Adding and tracking content ``` waldek@metal:~/Documents/my_first_git_repository$ cat readme.md # Hello world I am a paragraph. I can contain multiple sentences, each on one line. A blank line separates multiple paragraphs. 1. lists 1. will 1. auto increment in most HTML render engines * sublists * are possible * on multiple * levels 1. but I keep counting... [I will become](https://kernel.org) a link. And I'm a line: --- waldek@metal:~/Documents/my_first_git_repository$ git status On branch master No commits yet Untracked files: (use "git add ..." to include in what will be committed) readme.md nothing added to commit but untracked files present (use "git add" to track) waldek@metal:~/Documents/my_first_git_repository$ ``` Now we can `add` and `commit` our changes. ``` waldek@metal:~/Documents/my_first_git_repository$ git add readme.md waldek@metal:~/Documents/my_first_git_repository$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached ..." to unstage) new file: readme.md waldek@metal:~/Documents/my_first_git_repository$ git commit -m "adds a readme file" [master (root-commit) 8278e12] adds a readme file 1 file changed, 22 insertions(+) create mode 100644 readme.md waldek@metal:~/Documents/my_first_git_repository$ git status On branch master nothing to commit, working tree clean waldek@metal:~/Documents/my_first_git_repository$ ``` We can use `git log` to inspect the list of commits. Add the `--no-pager` to bypass `less` and print the output straight to the console. ``` waldek@metal:~/Documents/my_first_git_repository$ git --no-pager log commit 8278e1273d1438920c1063cdca179eb70d5926d8 (HEAD -> master) Author: waldek Date: Mon May 2 22:16:50 2022 +0200 adds a readme file waldek@metal:~/Documents/my_first_git_repository$ ``` ## The main workflow 1. edit your files 1. `git status` to verify what's new or has been modified 1. `git add` the files you want to commit 1. `git commit -m "A RELEVANT COMMIT MESSAGE"` 1. `git push` to wherever you have your repository 1. repeat step one... # Git via Atom # Git via Pycharm ## Starting a version controlled project In Pycharm, you have to enable a version control integration. There are many choices, but we will use Git. As you can see, Git appears in the toolbar and a git window appear bottom of the window. And you can identify the current branch that you are in. So the default branch name is **master**. ![screenhot](assets/git_pycharm_source_00.png) ![screenhot](assets/git_pycharm_source_01.png) ![screenhot](assets/git_pycharm_source_02.png) Let's try to write some code And add all contents that we write in a git repository. ![screenhot](assets/git_pycharm_source_03.png) In the commit window, we can see file project. But we had three important things. We have a textBox and two buttons. In the textBox, you can write a comment when you commit. The _Commit_ button is used to save all change in your project. The _Commit and Push_ is used to commit and push the project in a Git. ![screenhot](assets/git_pycharm_source_04.png) When you press the _Commit and Push_, a new window appears. You can see which branch and which commit that you push. ![screenhot](assets/git_pycharm_source_05.png) ## Creating an online repository ![screenhot](assets/git_pycharm_source_06.png) ![screenhot](assets/git_pycharm_source_07.png) ![screenhot](assets/git_pycharm_source_08.png) ![screenhot](assets/git_pycharm_source_09.png) ![screenhot](assets/git_pycharm_source_10.png) ![screenhot](assets/git_pycharm_source_11.png) ## Adding some changes to our local code ![screenhot](assets/git_pycharm_source_12.png) ![screenhot](assets/git_pycharm_source_13.png) ![screenhot](assets/git_pycharm_source_14.png) ## Cloning the remote project into a new project ![screenhot](assets/git_pycharm_clone_00.png) ![screenhot](assets/git_pycharm_clone_01.png) ![screenhot](assets/git_pycharm_clone_02.png) ![screenhot](assets/git_pycharm_clone_03.png) ![screenhot](assets/git_pycharm_clone_04.png) ![screenhot](assets/git_pycharm_clone_05.png) ![screenhot](assets/git_pycharm_clone_06.png) ## Updating the original project ![screenhot](assets/git_pycharm_source_18.png) ![screenhot](assets/git_pycharm_source_19.png) ![screenhot](assets/git_pycharm_source_20.png)