Difference between revisions of "Githandson"

From Gridkaschool
(Git basics)
(Git basics)
Line 136: Line 136:
 
git init --bare --shared - Creates empty repository meaning no working directory in it.
 
git init --bare --shared - Creates empty repository meaning no working directory in it.
 
git remote add origin REMOTEURL - git remote add creates an entry in your git config that specifies a name of a particular URL of the remote
 
git remote add origin REMOTEURL - git remote add creates an entry in your git config that specifies a name of a particular URL of the remote
  +
git remote rm origin - removes added remote repository
 
git repo. This command can be used only after creation of local repo with git init or git clone.
 
git repo. This command can be used only after creation of local repo with git init or git clone.
 
git clone - creates a new git repository by copying an existing one located at the URI you specify.
 
git clone - creates a new git repository by copying an existing one located at the URI you specify.

Revision as of 22:17, 20 August 2016

Git Hands-on

All of these exercises should be followed on naf-school03 using your school account

Note that lines beginning with a $ sign implies a shell command!

Exercise 1 (Configuration)

  • $ mkdir -p ~/school/git
  • $ cd ~/school/git
  • Configure git
    • $ git config --global user.name "Your Name"
    • $ git config --global user.email you.email@domain
  • $ cat ~/.gitconfig
  • optional extras for config (and obviously editor is mutually exclusive)
    • $ git config --global color.ui auto # If you like colours!
    • $ git config --global alias.co checkout
    • $ git config --global alias.st status
    • $ git config --global alias.ci commit
    • $ git config --global core.editor emacs # flame bait
    • $ git config --global core.editor vim

Exercise 2 (Basics)

Let's commit some stuff to git...

  • $ git init
  • $ git status
  • $ touch readme.txt
  • $ echo "hello" > readme.txt
  • $ git commit
  • $ git add .
  • $ git commit
  • $ git "bye" >> readme.txt
  • $ git status
  • $ git reset


Exercise 3 (Working with remote repository)

  • $ git clone gridkapuppet01:/opt/repo.git
  • $ git log

Add a new file to local repository and submit the changes to remote



  • $ git clone git@naf-school04:gitlab
  • $ cd gitlab
  • $ git status
  • $ vi ${USER}.txt
    • write something
  • $ git status # what is updated? Working tree, Index or Repository?
    • $ git diff
    • $ git diff HEAD
    • $ git diff --cached
  • $ git add ${USER}.txt
    • $ git status
    • $ git diff
    • $ git diff HEAD
    • $ git diff --cached
  • $ git commit -m "Add user text file"
    • $ git status
    • $ git diff
    • $ git diff HEAD
    • $ git diff --cached
  • $ git push origin master
    • this might not work! Why?
    • tip: what does “git pull --rebase” do?
  • $ git checkout -b ${USER} master # specifying "master" here is just a good habit. Always beware of defaults.
  • $ vi config.yaml
    • Add a user to the list
  • $ git add -p
  • $ git commit -m "Adding ${USER} to users list"
  • $ git push origin ${USER}
  • $ git checkout master
  • $ git merge ${USER}
  • $ git push origin master
    • What happens?
  • $ git checkout -b newfeature_${USER} master
  • $ vi config.yaml
    • add a server
    • commit the change (with a good message!)
    • $ git log
  • Oops! We mistyped the server, vi config.yaml again
    • change the name of the server
    • commit the change
    • $ git rebase -i HEAD~2
    • use “fixup” or “squash” on the fix (make sure you understand the difference)
    • $ git log # examine the differences


Git cheat sheet

Git configuration

  • Git levels:

/etc/gitconfig - global git config for any user

~/.gitconfig -user specific

~/repo/.git/config -repo specific

each level ovewrites prevous.

git config --global user.name "Your Name"

git config --global user.email you.email@domain

git config --global color.ui auto # If you like colours!

git config --global alias.co checkout

git config --global alias.st status

git config --global alias.ci commit

git config --global core.editor emacs


Git basics

git init                        - create new local repo 
git clone /path/to/repository   - check out a repository
git clone https://github.com/   - clone repo from github 
git add <filename>              - add specified file to staging area 
git add .                       - add all subdirectories and files recursivly
git reset                       - removes all added files from staging area, keeps the changes 
git reset --hard                - removes all added files from staging area, drops the local changes after last commit

git status                      - List the files you've changed and those you still need to add
git help                        - Help for most commonly used git commands
git help <command>              - Detailed help for specified command

git init --bare --shared        - Creates empty repository meaning no working directory in it. 
git remote add origin REMOTEURL - git remote add creates an entry in your git config that specifies a name of a particular URL of the remote 
git remote rm origin            - removes added remote repository
                                  git repo. This command can be used only after creation of local repo with git init or git clone. 
git clone                       - creates a new git repository by copying an existing one located at the URI you specify.