21
SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) Git Prof. Jinkyu Jeong ([email protected] ) TA -- Minwoo Ahn ([email protected] ) TA -- Donghyun Kim ([email protected] ) Computer Systems Laboratory Sungkyunkwan University http://csl.skku.edu

Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

  • Upload
    others

  • View
    20

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected])

Git

Prof. Jinkyu Jeong ([email protected])

TA -- Minwoo Ahn ([email protected])

TA -- Donghyun Kim ([email protected])

Computer Systems Laboratory

Sungkyunkwan University

http://csl.skku.edu

Page 2: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 2

Version Control System (VCS)

• Manage changes of documents, computer

programs, and other collections of information

Centralized revision control system Distributed revision control system

server

version

database

version 1

version 2

version 3

user A

user B

file

file

checkout

checkout

user A

version

database

version 1

version 2

version 3

user B

version

database

version 1

version 2

version 3

Page 3: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 3

Work flow on local repository

Initialize

repository

Create or add

files

Modify filesCommit files

Page 4: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 4

Install & Setup

• Install

– Linux : sudo apt-get install git

– Windows, Mac : download at http://git-scm.com/

• User setup

– git config --global user.name “name”

– git config --global user.email “e-mail”

Page 5: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 5

Git basic command

– git init

• Create an empty Git repository or reinitialize an existing one

– git add “filename”

• Add file contents to the index

– git rm “filename”

• Remove files from the working tree and from the index

– git commit

• Record changes to the repository

• options

– -a : Tell the command to automatically stage files that have been modified

– -m “msg” : Use the given “msg” as the commit message

– git status

• Show the working tree status

Page 6: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 6

Example

$mkdir git_tutorial && cd git_tutorial

~/git_tutorial git init

~/git_tutorial vi hello.c

~/git_tutorial git add hello.c

~/git_tutorial git status

~/git_tutorial git commit

~/git_tutorial vi hello.c

~/git_tutorial git commit –m “Modify hello.c file”

Page 7: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 7

Git branch command

– git branch

• List, create, or delete branches

• options

– [-d] “branchname” : The name of the branch to create or delete

A B C E

D

master

topic

git branch topic

Page 8: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 8

Git branch command

– git checkout

• Checkout a branch or paths to the working tree

• options

– “branchname” : switch to “branchname”

– -b “newbranch” : create “newbranch” and switch

git checkout topic

A B C E

D

master

topic

6a7b34...

git checkout 6a7b34

Page 9: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 9

Git branch command

– git merge

• Join two or more development histories together

• options

– “branchname” : Reply the changes of “branchname” on top of current branch

git merge topic

B C E

D

master

topic

F

G

H

Page 10: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 10

Conflictmaster topic

#include <iostream>

using namespace std;

int main(void) {

cout << “Hello!” << endl;

cout << “Master!” << endl;

}

#include <iostream>

using namespace std;

int main(void) {

cout << “Hello!” << endl;

cout << “Topic!” << endl;

}

#include <iostream>

using namespace std;

int main(void) {

cout << “Hello!” << endl;

<<<<<<< HEAD

cout << “Master!” << endl;

=======

cout << “Topic!” << endl;

>>>>>>> topic

}

git merge topic

Fix conflict and commit

Page 11: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 11

Git branch command

– git rebase

• Join two or more development histories together

• options

– git rebase “upstream”

– git rebase “upstream” “branch”

– git rebase –onto “newbase” “upstream” “branch”

git rebase master | git rebase master topic

B C E

D

master

topic

F

G

Page 12: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 12

Work flow on local repository

Create or add

files

Modify filesCommit files

Make

new-branch

Checkout

new-branch

Checkout

master branch

Merge master

& new-branch

Page 13: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 13

.gitignore

• Ignore auxiliary files such as logs, input/out data, etc

• Generate automatically at https://www.gitignore.io/

~/git_tutorial git add .gitignore

~/git_tutorial git commit –m “added ‘.gitignore’ file”

Page 14: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 14

Git log command

– git log

• Show commit logs

• options

– -p : Show all changes at each commit

– --stat : Show statistics about modified files at each commit

– --name-only : Show only modified file name at each commit

– --relative-date : Show commit log with relative date

– --graph : Draw a text-based graphical representation of the commit history

Page 15: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 15

GitHub

• Remote repository (place of co-work)

• Sign up for GitHub

– https://github.com

• Public repository for free user

• Functions

– Fork : Copy other user’s repository

– Pull requests : Communication with users

– Issues : Discuss issues between users in repository

– Wiki : Create a structured record of repository

Page 16: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 16

GitHub basic command

– git clone

• Copy remote repository to local repository

~/git_tutorial git clone https://github.com/jquery/jquery.git

Page 17: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 17

GitHub basic command

– git remote

• Link local repository and remote repository

• options

– -v : Check the connection with local and remote repository

– add “name” “url” : Add a remote named “name” for the repository at “url”

– git push

• Push local repository contests to remote repository

• options

– “repository” : destination (name or url)

– --all : push all modified contents in local repository

– git diff

• Show changes between local and remote

Page 18: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 18

GitHub basic command

– git fetch

• Fetch contents from remote repository

• options

– “repository” : name or url of remote repository

– --all : Fetch all contents from remote repository

Local repository Remote repository (GitHub)

Modified by other user

Commit

Push (fail)

fetch

merge

Push (success)

Updated by me

Page 19: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 19

GitHub basic command

– git pull

• Fetch and integrate contents from remote repository

• options

– “repository” : name or url of remote repository

– --all : Fetch all contents from remote repository

Local repository Remote repository (GitHub)

Modified by other user

Commit

Push (fail)

Pull

Push (success)

Updated by me

Page 20: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 20

How to write a Git commit message

1. Separate subject from body with a blank line

2. Limit the subject line to 50 characters

3. Capitalize the subject line

4. Do not end the subject line with a period

5. Use the imperative mood in the subject line

6. Wrap the body at 72 characters

7. Use the body to explain what and why vs. how

Page 21: Version Control System (VCS)csl.skku.edu/uploads/SSE2034F18/6-git.pdf · git rebase master | git rebase master topic B C E D master topic F G. SSE2034: System Software Experiment

SSE2034: System Software Experiment 3, Fall 2018, Jinkyu Jeong ([email protected]) 21

Reference

• Pro Git 2nd Edition

– https://git-scm.com/book/en/v2

• How to write a git commit message

– https://chris.beams.io/posts/git-commit/

• Command “git –help”

– ex) git checkout --help