#+TITLE: Git 101 #+AUTHOR: Amin Kasrou Aouam #+PANDOC_OPTIONS: pdf-engine:xelatex #+PANDOC_METADATA: theme:metropolis * Concepts - Version control system (VCS) - Distributed - /De facto/ standard for code collaboration * Reality - Powerful system with hard to grasp concepts #+CAPTION: xkcd #+ATTR_HTML: :width 170 [[./assets/xkcd.png]] * Structure of a git project - The working directory is the folder where we want to manage our project - The index is an intermediary step between the files in the directory and the commits - A commit is a full snapshot (i.e. copy) of the contents of the working directory at some point #+CAPTION: Structure of a project #+ATTR_HTML: :width 300 [[./assets/staging.png]] * Branches - A branch is a way to diverge from the commits - It allows multiple people to work on the same project without conflicts [[./assets/branch.png]] [[./assets/divergence.png]] * Remotes - The real advantage of git is allowing multiple people to work on the same project from different locations - A server is used to synchronize the changes between the developers #+CAPTION: Remote repositories #+ATTR_HTML: :width 300 [[./assets/remote.png]] * Merges - The development of the developers has to be combined at some point - We can merge a branch on another, importing all the changes that were done #+CAPTION: Merging the branches Test and Master #+ATTR_HTML: :width 300 [[./assets/merge.png]] * Cheatsheet - Add a file to the index #+begin_src bash git add file #+end_src - Commit the changes #+begin_src bash git commit #+end_src - Change the branch #+begin_src bash git checkout branch_name #+end_src - Send the changes to the server #+begin_src bash git push #+end_src - Get the changes from the server #+begin_src bash git pull #+end_src