Skip to content

EricPascolo/git_course_parallel_school

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 

Repository files navigation

GIT

Authors :

Version : Cineca Parallel Summer School 2018

EX.0 : Configuration

Follow the steps below to configure git on your machine.

  • 0.0.1 Is git installed on your machine?

      git 
      apt install git (Deb example)
    
  • 0.0.2 Configure username and email for your remote hub account

      git config --global user.name "Name Surname"
      git config --global user.email "[email protected]
  • 0.0.3 Configure your favorite editor

      git config --global core.editor vim
    
  • 0.0.4 Show all git settings

      git config --list 
    

EX.1: Single Dev

In this exercise we learn the basic git commands, how to set-up multiple remote repos and how to manage branches workflow.

EX.1.1 : BASIC COMMAND

  • 1.1.1 Create a local empty repository

      mkdir ex1_1
      cd ex1_1
      git init 
    
  • 1.1.2 Create a README file in the repo

      touch README.md
    
  • 1.1.3 Add a new file to the staging area

      git add README.md
    
  • 1.1.4 Commit your changes

      git commit -m "commit description"
    
  • 1.1.5 Create a directory into the repo

      mkdir my_software
    
  • 1.1.6 Try to commit "my_software", is it allowed?

      git add my_software
      git commit -m "commit directoy" 
    
  • 1.1.7 --CHECK-- Use git status to check the repo status

      git status
    
  • 1.1.8 Create local_configuration file in "my_software"

      cd my_software
      touch local_configuration.cfg
    
  • 1.1.9 Add a .gitignore file to avoid to commit the "local_configuration.cfg" file

      touch .gitignore
      echo "local_configuration.cfg" >> .gitignore
      git statuts -u   # show untracked not ignored file
      git add .gitignore
      git commit -m"create gitignore file"
    
  • 1.1.10 --CHECK-- if directory my_software is now commited

      git ls-tree --full-tree -r master
    
  • 1.1.11 Use git log to view the history of the repo, how many commits are there?

      git log
    
  • 1.1.12 Use git ls-files to add multiple files to the repository

      cd my_software
      touch main.py io.py log.py
      git ls-files -o             # show list of untrucked files
      git add $(git ls-files -o)  # don't worry, ignored files will be not processed
      git commit -m "create message"
    
  • 1.1.13 Use git tag to identify the first code version

      git tag v0.1 -m "code version 0.1"
    
  • 1.1.14 Change main.py and commit, check with git diff the difference between HEAD and the previous commit (HEAD^)

      echo "print(\"Hello World\")" >> main.py
      git add main.py
      git commit -m "create Hello World software"
      git diff HEAD HEAD^
    

EX1.2 : REMOTE COMMAND

In this exercise we continue to work with the previous local repository.

  • 1.2.1 Create a remote empty repository

  • 1.2.2 Check if your local repo has remote repos linked

      git remote -v
    
  • 1.2.3 Copy the remote repo URL and link it with the local repo, call it ORIGIN

      git remote add origin your_url 
    
  • 1.2.4 Sync local and ORIGIN with push command

      git push origin master
    
  • 1.2.5 --CHECK-- if syncronization is completed, can you see tag in ORIGIN?

  • 1.2.6 Push the tag to ORIGIN

      git push origin --tags
    
  • 1.2.7 --CHECK-- if syncronization is really completed

  • 1.2.8 Create a new remote repo for BACKUP and add it to the local repo

      git remote add backup url_backup_repo 
    
  • 1.2.9 --CHECK-- if the local repo is linked with ORIGIN and BACKUP

      git remote -v
    
  • 1.2.10 Push the local repo to BACKUP

      git push --tags backup master
    

EX.1.3 : BRANCH COMMAND

  • 1.3.1 Create DEV branch

      git checkout -b dev
    
  • 1.3.2 --CHECK-- how many branches exists in local repository

      git branch
    
  • 1.3.3 Modify io.py file and commit it

      echo "print(\" I'm IO \")" >> io.py
      git add io.py
      git commit -m "change io.py"
    
  • 1.3.4 Return to Master branch, modify main.py and commit it

      git checkout master
      echo "print(\" I'm main \")" >> main.py
      git add main.py
      git commit -m "change main.py"
    
  • 1.3.5 Return to dev branch, change log.py and commit it

      git checkout dev
      echo "print(\" I'm LOG \")" >> log.py
      git add log.py
      git commit -m "change log.py"
    
  • 1.3.6 Return to master and merge it with DEV branch

      git checkout master 
      git merge dev
    
  • 1.3.7 Show the branches diagram with git log

      git log --all --graph --decorate --oneline
    
  • 1.3.8 Reset the last commit in order to try rebase of branches instead of merge

      git reset --hard HEAD^
    
  • 1.3.9 Use git rebase

      git rebase dev
    
  • 1.3.10 --CHECK-- use git log to see the new diagram of branches, observe the difference between rebase and merge

      git log --all --graph --decorate --oneline
    

EX.2 : Team Dev

This exercise will be done in groups. Create a group of 3 persons (max 4) and define who is the Team Leader (TL). The other members are simply other developer (OD). In the first part of the exercise we work with only a single branch (master branch); in the second part we introduce the dev branch to simulate a real developer's workflow.

EX.2.1 : SINGLE BRANCH

  • 2.1.1 TL forks the CINECA git_course repo into the TL's remote repo.
  • 2.1.2 ODs fork the TL's remote repo in their public remote repo.
  • 2.1.3 TL and OD clone their remote repos locally
  • 2.1.4 TL adds as REMOTES the OD's remote repos
  • 2.1.5 ODs add as REMOTES the TL's remote repo
  • 2.1.6 --CHECK-- if history is syncronized on all repos
  • 2.1.7 Each member changes a different file
  • 2.1.8 Each member pushes and pulls to resync all repos
  • 2.1.9 --CHECK-- if all repos are syncronized
  • 2.1.10 Tl and ODs change the same line of the same file on their local repos
  • 2.1.11 TL commits and pushes his change on his remote repo.
  • 2.1.12 ODs pull from TL's remote repo and manage the conflict
  • 2.1.13 --CHECK-- if all repos are syncronized
  • 2.1.14 ODs change the same line of the same file, commit and push on their remote repos
  • 2.1.15 TL pulls from ODs' remote repos, chooses the correct change and manages the conflict
  • 2.1.16 --CHECK-- if all repos are syncronized

EX.2.2 : MULTIPLE BRANCH

  • 2.2.1 TL creates the branch DEV on the local repo and pushes it on his remote repo. ATTENTION : TL is the only developer that can change the DEV branch
  • 2.2.2 ODs pull TL's remote repo and push the new branch on their remote repos.
  • 2.2.3 --CHECK-- if all repos have the DEV brach
  • 2.2.4 ODs create a new branch on their local repos, the branch name has to be unique and has to contain the feature implemented in this branch.
  • 2.2.5 ODs code the feature in the new branch, ODs commit the changes and push on their remote repos.
  • 2.2.6 TL pulls the new branches from ODs remote repos, TL rebases the two branches on DEV, TL pushes the changes on his remote repo
  • 2.2.7 ODs pull the rebased DEV branch on their local repo and sync with their remote repos
  • 2.2.8 --CHECK-- if all repos have the branch DEV rebased with the OD changes

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages