Содержание

Слайд 2

Agenda

Agenda

Слайд 3

ABOUT GIT PART I

ABOUT GIT

PART I

Слайд 4

What it VCS and why it is useful to use it?

What it VCS and why it is useful to use it?

Слайд 5

Advantages of using VCS

Advantages of using VCS

Слайд 6

Distributed VS Centralized VSC

Distributed VS Centralized VSC

Слайд 7

Distributed VS Centralized VSC Most of operations are local. Repository data

Distributed VS Centralized VSC

Most of operations are local.
Repository data and history

available on each local copy, so you could do a lot of operation without internet connection.
If central copy of data will be lost, any local copy could be used to restore central.
Lightweight branching.
Possibility of working with several remotes in one time.
Storing only current copy of data in a local repository could be an advantage.
Easier workflow for novice users.

Advantages of distributed VCS

Advantages of centralized VCS

Слайд 8

Distributed VS Centralized VSC Distributed VCS stores patches Centralized VCS stores stream of snapshots

Distributed VS Centralized VSC

Distributed VCS stores patches

Centralized VCS stores stream of

snapshots
Слайд 9

Installing GIT Via binary installer: $ sudo yum install git-all If

Installing GIT
Via binary installer:
$ sudo yum install git-all
If you’re on a

Debian-based distribution like Ubuntu, try:
$ sudo apt-get install git-all
Just go to the next link and the download will start automatically. 
http://git-scm.com/download/win
To find more ways to download and install git visit:
https://git-scm.com/downloads

Linux

Windows

Other

Слайд 10

GIT configuration & help Saves configuration for current repository --system (Saves

GIT configuration & help

Saves configuration for current repository
--system (Saves configuration

for all system users)
--global (Saves configuration for current system user)
git config --global user.name “Ivan Ivanov" (To set user name)
git config --global user.email ivan_ivanov@epam.com (To set user email)
Setup Notepad++ as core editor
git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
git config --list (To get current configuration)
git help
git --help
man git-

git config

git help

Слайд 11

GIT configuration & help Saves configuration for current repository --system (Saves

GIT configuration & help

Saves configuration for current repository
--system (Saves configuration

for all system users)
--global (Saves configuration for current system user)
git config --global user.name “Ivan Ivanov" (To set user name)
git config --global user.email ivan_ivanov@epam.com (To set user email)
Setup Notepad++ as core editor
git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
git config --list (To get current configuration)
git help
git --help
man git-

git config

git help

Слайд 12

Gitlab – internal EPAM repository

Gitlab – internal EPAM repository

Слайд 13

Generate new ssh key

Generate new ssh key

Слайд 14

Integrate new ssh key with Gitlab ssh-key sample ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrLMjgTwIO/uFRom47o2oMWYiFxIRa+nrsjQ2n9W4Tft9hW0wDGXa9AYN/MAWEMD6FzGxLvkHy9vwHChQbKPXAwwTGAmpp7RenJ8ukGczVEY00K8nlfZ6qS5unxcFtR4/C2NJGvxOCYYJEac+1Lpxwk02ZXX4TwARKHgl+oNlE6KoAHG6tDBYdvxH981alxp+aqyhZs5RNRTECRJujwjNcjTwFaynG5LlfRwUjI+UtWvD70fQj4u/TE7Rfi+sNyBblJTnJYjkzgppseF5vttQsBvLWISthmUDizfKh1FXJ+g7AjS3tLztBX18Qw3tLkck+1iz/Er5HbclsboBIH9tB Kostiantyn_Vorflik@ko-PC

Integrate new ssh key with Gitlab

ssh-key sample

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrLMjgTwIO/uFRom47o2oMWYiFxIRa+nrsjQ2n9W4Tft9hW0wDGXa9AYN/MAWEMD6FzGxLvkHy9vwHChQbKPXAwwTGAmpp7RenJ8ukGczVEY00K8nlfZ6qS5unxcFtR4/C2NJGvxOCYYJEac+1Lpxwk02ZXX4TwARKHgl+oNlE6KoAHG6tDBYdvxH981alxp+aqyhZs5RNRTECRJujwjNcjTwFaynG5LlfRwUjI+UtWvD70fQj4u/TE7Rfi+sNyBblJTnJYjkzgppseF5vttQsBvLWISthmUDizfKh1FXJ+g7AjS3tLztBX18Qw3tLkck+1iz/Er5HbclsboBIH9tB Kostiantyn_Vorflik@ko-PC

Слайд 15

GIT BASICS PART II

GIT BASICS

PART II

Слайд 16

.gitignore This is a file, which you could create in the

.gitignore

This is a file, which you could create in the root

of your repository. All files, which are match patterns from gitignore, would be untracked by default. This could be binary files; files, which are generated by IDE, logs, ect. So all of this files exist in you project directory, but you will never want to commit them to repository.
The rules for the patterns you can put in the .gitignore file are as follows:
Blank lines or lines starting with # are ignored.
Standard glob patterns work.
You can start patterns with a forward slash (/) to avoid recursivity.
You can end patterns with a forward slash (/) to specify a directory.
You can negate a pattern by starting it with an exclamation point (!).

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# ignore all files in the build/ directory
build/
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

Слайд 17

The three states. The basic GIT workflow Modified: you have changed

The three states. The basic GIT workflow

Modified: you have changed the

file but have not committed it to your local database
Staged: you have marked a modified file in its current version to go into your next commit snapshot.
Committed:  the data is safely stored in your local database.
This leads us to the three main sections of a GIT project:
Слайд 18

Creating GIT repository git init This command is used for putting

Creating GIT repository
git init
This command is used for putting existing

project under version control. Command should be executed in the root project directory. Pay attention! After invoking this command you files will be untracked. You should track them and do initial commit manually.
git clone [url]
This command is used to clone remote repository and create local copy for you. After cloning repository all files are in unmodified state.
For cloning repository you could use different transfer protocols. For example: https, ssh.

Initialization

Clone

Слайд 19

File state lifecycle. GIT status git status This command is used

File state lifecycle. GIT status

git status
This command is used to find

out in which states you repository files are.

Status

Lifecycle

Слайд 20

GIT add git add [file] Command git add is used for

GIT add

git add [file]
Command git add is used for the different

proposes. Two of them are:

On branch master
Untracked files:
(use "git add ..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)

Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: CONTRIBUTING.md
Prepare modified files for commit. [modified -> staged]
Put untracked file under VCS, prepare them for commit. [untracked -> staged]

Слайд 21

GIT add After using git add * or git add README

GIT add

After using
git add *
or
git add README
git add

CONTRIBUTING.md
we will get the next result:

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
new file: README
modified: CONTRIBUTING.md

Слайд 22

GIT add What will happened if we do some changes in

GIT add

What will happened if we do some changes in README

file?

vim CONTRIBUTING.md
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
new file: README
modified: CONTRIBUTING.md
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: CONTRIBUTING.md

Git stages a file exactly as it is when you run the git add command.

Слайд 23

Committing changes The command git commit allows you to fix your

Committing changes

The command
git commit
allows you to fix your staged

changes.

$ git commit -m "Story 2: Extending readme files"
[master 463dc4f] Story 2: Extending readme files
2 files changed, 2 insertions(+)
create mode 100644 README

You could also use
git commit –a
to skip staging area.

Слайд 24

Deleting & moving files Deleting git rm [file] allows you to

Deleting & moving files

Deleting

git rm [file] allows you to stage files,

which should be deleted.

$ rm PROJECTS.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
deleted: PROJECTS.md
no changes added to commit (use "git add" and/or "git commit -a")

rm 'PROJECTS.md'
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: PROJECTS.md

Слайд 25

Deleting & moving files Moving and renaming files git mv [source][dest].

Deleting & moving files

Moving and renaming files

git mv [source][dest].

$ git mv

README.md README
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
renamed: README.md -> README
Слайд 26

Reviewing commit history git log The command for reviewing commit history.

Reviewing commit history

git log

The command for reviewing commit history. By default

shows SHA-1, commit name, author, email, date.
Some of the most popular options:

$ git log --pretty=oneline -1
ca82a6dff817ec66f44342007202690a93763949 changed the version number
$ git log --pretty=format:"%h - %an, %ar : %s“ -1
ca82a6d - Scott Chacon, 6 years ago : changed the version number

Слайд 27

Reverting local changes git commit --amend This command allows you to

Reverting local changes

git commit --amend

This command allows you to make

some changes in your last commit.

$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
renamed: README.md -> README
modified: CONTRIBUTING.md

git reset HEAD [file]

To unstaging a staged file. Git status will help you:

Unmodifying a modified file. Git status will help you again:

git checkout --[file]

Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: CONTRIBUTING.md

Слайд 28

Git Branching A branch in Git is simply a lightweight movable

Git Branching

A branch in Git is simply a lightweight movable pointer

to one of commits.

What branch is?

Creating new branch

git branch [name]

HEAD a special pointer, which allows GIT to know what branch you’re currently on.

Only creates a branch, does not switch on it.

Слайд 29

Git Branching: Example git checkout -b testing [change something] git commit

Git Branching: Example

git checkout -b testing

[change something]
git commit -a -m 'made

a change'

Switch to another branch

git checkout master

[made another changes]
git commit -a -m 'made other changes'

Слайд 30

Branching & merging workflow Possible git workflow $ git checkout -b

Branching & merging workflow

Possible git workflow

$ git checkout -b iss53
Switched

to a new branch 'iss53'

[working on iss53]
$ git commit -a -m ‘issue53 add footer'

$ git checkout master
Switched to branch 'master'

$ git checkout -b hotfix
Switched to a new branch 'hotfix‘
[do some fixes]
$ git commit -a -m 'fix something'

$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward

git merge

 Join two or more development histories together

$ git branch -d hotfix
Deleted branch hotfix (was 3a0874c).
$ git checkout iss53
Switched to branch 'iss53'
[Finish working on iss53]
$ git commit -a -m 'finish [issue 53]'

Слайд 31

Basic merging $ git checkout master $ git merge iss53 Auto-merging

Basic merging

$ git checkout master
$ git merge iss53
Auto-merging README


Merge made by the 'recursive' strategy.
Слайд 32

Merge conflicts $ git merge iss53 Auto-merging index.html CONFLICT (content): Merge

Merge conflicts

$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict

in index.html
Automatic merge failed; fix conflicts and then commit the result.

Git hasn’t automatically created a new merge commit. It has paused the process while you resolve the conflict. If you want to see which files are unmerged at any point after a merge conflict, you can run git status:

$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add ..." to mark resolution) both modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")

git mergetool

Run an appropriate visual merge tool

After merging you should add to index and commit the changes.

Слайд 33

Remote and local branches

Remote and local branches

Слайд 34

Remote branches Pushing branch to remote git push (remote) (branch) $

Remote branches

Pushing branch to remote

git push (remote) (branch)

$ git push origin

serverfix
...
* [new branch] serverfix -> serverfix

git push origin serverfix:newname

to give remote branch another name

Deleting remote branch

git push [remotename] :[branch]

Fetching / pulling remote branches

$ git fetch origin
...
* [new branch] serverfix -> origin/serverfix

Someone else do:

Local branch is not created.

$ git checkout -b serverfix origin/serverfix

to get a local copy of remote branch

Слайд 35

Git reflog git reflog ad0096f HEAD@{10}: checkout: moving from new to

Git reflog

git reflog

ad0096f HEAD@{10}: checkout: moving from new to master
d82a8e0 HEAD@{11}:

commit: n3
2ae10cd HEAD@{12}: commit: n2
c1c51a3 HEAD@{13}: commit: n1
ad0096f HEAD@{14}: checkout: moving from master to new
ad0096f HEAD@{15}: commit: clean

get reference log

Слайд 36

Resources

Resources

Слайд 37

In case of fire...

In case of fire...

Слайд 38

Q&A Do you have any questions?

Q&A
Do you have any questions?