Difference between revisions of "Githandson"
From Gridkaschool
(→Exercise 2 (Basics)) |
(→Git basics) |
||
(37 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
'''''Note that lines beginning with a $ sign implies a shell command!''''' |
'''''Note that lines beginning with a $ sign implies a shell command!''''' |
||
==Exercise 1 (Configuration) == |
==Exercise 1 (Configuration) == |
||
+ | *'''Login to gridkalogin01''' |
||
− | * $ mkdir -p ~/school/git |
||
+ | ** ssh schoolx@gridkalogin01.desy.de |
||
− | * $ cd ~/school/git |
||
+ | |||
+ | |||
+ | * '''Create project''' |
||
+ | * $ mkdir project |
||
+ | * $ cd project |
||
+ | |||
+ | |||
* '''Configure git''' |
* '''Configure git''' |
||
** $ git config --global user.name "Your Name" |
** $ git config --global user.name "Your Name" |
||
** $ git config --global user.email you.email@domain |
** $ git config --global user.email you.email@domain |
||
+ | * '''Examine the gitconfig file''' |
||
* $ cat ~/.gitconfig |
* $ cat ~/.gitconfig |
||
+ | |||
− | * '''optional extras for config (and obviously editor is mutually exclusive)''' |
||
+ | * '''Optional extras for config (and obviously editor is mutually exclusive)''' |
||
** $ git config --global color.ui auto # If you like colours! |
** $ git config --global color.ui auto # If you like colours! |
||
** $ git config --global alias.co checkout |
** $ git config --global alias.co checkout |
||
Line 24: | Line 33: | ||
'''Let's commit some stuff to git...''' |
'''Let's commit some stuff to git...''' |
||
+ | * '''Ini new repo''' |
||
+ | ** $ git init |
||
+ | ** $ git status |
||
− | * $ 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 |
||
+ | * '''Create new file and commit it''' |
||
+ | ** $ touch readme.txt |
||
+ | ** $ echo "hello" > readme.txt |
||
+ | ** $ git commit |
||
− | ==Exercise 3 (Working with remote repository) == |
||
+ | * '''Can't commit? Submit file to staging area first''' |
||
− | * $ git clone gridkapuppet01:/opt/repo.git |
||
− | * $ git |
+ | ** $ git add . |
+ | ** $ git commit |
||
− | Add a new file to local repository and submit the changes to remote |
||
+ | * '''Avoid opening editor and submit the change directly to repo: ''' |
||
+ | ** $ echo "some new change">> readme.txt |
||
+ | ** $ git commit -am "fast commit to repo" |
||
+ | * '''Examine how to revert changes in working tree: ''' |
||
− | * $ git clone git@naf-school04:gitlab |
||
+ | *'''Remove file from staging area:''' |
||
− | * $ cd gitlab |
||
+ | ** $ echo "bye" >> readme.txt |
||
− | * $ git status |
||
+ | ** $ git status |
||
− | * $ vi ${USER}.txt |
||
+ | ** $ git reset |
||
− | ** ''write something'' |
||
+ | *'''Remove file from staging area and and drop all changes, which were staged in working dir, take the last commit from local repo''' |
||
− | * $ git status # ''what is updated? Working tree, Index or Repository?'' |
||
− | ** $ git |
+ | ** $ git reset --hard |
+ | * '''Discards all history and changes back to the specified commit''' |
||
+ | ** $ git reset --hard [commit] |
||
+ | *'''Drop all local changes staged and unstaged, take the last commit from repo:''' |
||
+ | ** git clean -df ( -d Remove untracked directories in addition to untracked files) |
||
+ | ** git checkout -- . |
||
+ | |||
+ | ==Exercise 3 (Working with remote repository) == |
||
+ | * '''Clone the remote repository and examine the log ''' |
||
+ | ** $ git clone gitolite3@gridkapuppet01:test2.git |
||
+ | ** $ git log |
||
+ | |||
+ | |||
+ | *'''Look in .git directory at the config file''' |
||
+ | **edit config file and delete [remote "origin"] section |
||
+ | ** add remote repository by doing: |
||
+ | ** $ git remote add origin gitolite3@gridkapuppet01:test2.git |
||
+ | |||
+ | |||
+ | * '''Add a new file to local repository and submit the changes to remote: ''' |
||
+ | ** $ git add <new file> |
||
** $ git diff HEAD |
** $ git diff HEAD |
||
− | ** $ git |
+ | ** $ git commit -am "some comment" |
+ | ** $ git push -u origin master ( -u - set-upstream ref) |
||
− | * $ git add ${USER}.txt |
||
+ | |||
− | ** $ git status |
||
+ | |||
− | ** $ git diff |
||
+ | * '''Drop all local changes and get the latest commit from remote repo:''' |
||
− | ** $ git diff HEAD |
||
− | ** $ git |
+ | ** $ git fetch origin |
− | * $ git |
+ | ** $ git reset --hard origin/master |
+ | * '''try: ''' |
||
− | ** $ git status |
||
− | ** |
+ | **$ git fetch |
− | ** |
+ | **$ git rebase |
+ | |||
− | ** $ 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 |
||
Line 123: | Line 129: | ||
<pre> |
<pre> |
||
git init - create new local repo |
git init - create new local repo |
||
− | git clone /path/to/repository - check out a repository |
+ | git clone /path/to/repository - check out a repository. Clone creates a new git repository by copying an existing one located at the URI you specify. |
git clone https://github.com/ - clone repo from github |
git clone https://github.com/ - clone repo from github |
||
+ | |||
+ | git status - List the files you've changed and those you still need to add |
||
git add <filename> - add specified file to staging area |
git add <filename> - add specified file to staging area |
||
git add . - add all subdirectories and files recursivly |
git add . - add all subdirectories and files recursivly |
||
+ | git commit - commit the staged files |
||
+ | git commit -am "some comment" - stage changes and commit in one step |
||
+ | git rm <filename> - remove deleted file |
||
git reset - removes all added files from staging area, keeps the changes |
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 reset --hard - removes all added files from staging area, drops the local changes after last commit |
||
+ | git reset HEAD^ - the changes a now only in working dir, HEAD and Index moved one step back |
||
+ | git reset --hard HEAD - deletes last commit as it were never happend |
||
+ | git checkout -- . - discards all local changes which are not staged |
||
− | 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 - Help for most commonly used git commands |
||
git help <command> - Detailed help for specified command |
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 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 |
+ | git remote -v - This should show you all of the push/fetch remotes for the project. |
+ | git diff master origin/master - compare local branch with remote |
||
+ | |||
+ | git branch - list of all local branches |
||
+ | git branch -a - list of all branches including remote |
||
+ | git checkout -b <branchname> - creates new branch and switches to it |
||
+ | git checkout <branchname> - switch to another branch |
||
+ | git branch -d <branchname> - delete branch |
||
+ | git push --all origin - push all branches to remote repository |
||
+ | |||
</pre> |
</pre> |
Latest revision as of 23:52, 30 August 2016
Contents
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)
- Login to gridkalogin01
- ssh schoolx@gridkalogin01.desy.de
- Create project
- $ mkdir project
- $ cd project
- Configure git
- $ git config --global user.name "Your Name"
- $ git config --global user.email you.email@domain
- Examine the gitconfig file
- $ 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...
- Ini new repo
- $ git init
- $ git status
- Create new file and commit it
- $ touch readme.txt
- $ echo "hello" > readme.txt
- $ git commit
- Can't commit? Submit file to staging area first
- $ git add .
- $ git commit
- Avoid opening editor and submit the change directly to repo:
- $ echo "some new change">> readme.txt
- $ git commit -am "fast commit to repo"
- Examine how to revert changes in working tree:
- Remove file from staging area:
- $ echo "bye" >> readme.txt
- $ git status
- $ git reset
- Remove file from staging area and and drop all changes, which were staged in working dir, take the last commit from local repo
- $ git reset --hard
- Discards all history and changes back to the specified commit
- $ git reset --hard [commit]
- Drop all local changes staged and unstaged, take the last commit from repo:
- git clean -df ( -d Remove untracked directories in addition to untracked files)
- git checkout -- .
Exercise 3 (Working with remote repository)
- Clone the remote repository and examine the log
- $ git clone gitolite3@gridkapuppet01:test2.git
- $ git log
- Look in .git directory at the config file
- edit config file and delete [remote "origin"] section
- add remote repository by doing:
- $ git remote add origin gitolite3@gridkapuppet01:test2.git
- Add a new file to local repository and submit the changes to remote:
- $ git add <new file>
- $ git diff HEAD
- $ git commit -am "some comment"
- $ git push -u origin master ( -u - set-upstream ref)
- Drop all local changes and get the latest commit from remote repo:
- $ git fetch origin
- $ git reset --hard origin/master
- try:
- $ git fetch
- $ git rebase
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. Clone creates a new git repository by copying an existing one located at the URI you specify. git clone https://github.com/ - clone repo from github git status - List the files you've changed and those you still need to add git add <filename> - add specified file to staging area git add . - add all subdirectories and files recursivly git commit - commit the staged files git commit -am "some comment" - stage changes and commit in one step git rm <filename> - remove deleted file 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 reset HEAD^ - the changes a now only in working dir, HEAD and Index moved one step back git reset --hard HEAD - deletes last commit as it were never happend git checkout -- . - discards all local changes which are not staged 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 remote -v - This should show you all of the push/fetch remotes for the project. git diff master origin/master - compare local branch with remote git branch - list of all local branches git branch -a - list of all branches including remote git checkout -b <branchname> - creates new branch and switches to it git checkout <branchname> - switch to another branch git branch -d <branchname> - delete branch git push --all origin - push all branches to remote repository