Git For Beginners

Git is a distributed version control system for tracking changes in computer files and coordinating work on those files among multiple people.

Installation
If you are using Linux or Mac, git should be installed by default. If fo any reason it hasn't been installed, you can install them using the given instructions.

Linux
If you’re on Fedora (or any closely-related RPM-based distribution, such as RHEL or CentOS), you can use dnf: $ sudo dnf install git-all If you’re on a Debian-based distribution, such as Ubuntu, try apt: $ sudo apt install git-all

Mac
On a Mac, [Homebrew] can be used to install git. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" brew install git

Windows
To install Git on Windows, you can download the executable here or Github Desktop from here.

Configuration
To configure user information for all local repositories use the following commands:

git config --global user.name "[name]" git config --global user.email "[email address]"
 * Set the name you want attached to your commit transactions.
 * Set the email you want atached to your commit transactions

Initializing a git repository
[ravi89@login001 Tutorial_June_2018]$ git init test Initialized empty Git repository in /data/user/ravi89/HPC_Training/Tutorial_June_2018/test/.git/ [ravi89@login001 Tutorial_June_2018]$
 * To initialize a new git repository, run:

cd EXISTING_DIRECTORY git init
 * To make an already existing directory, a git repo, run:

Review changes
Once you have made changes to the files in a git repository, you can review your edits using following commands.

[ravi89@login001 Tutorial_June_2018]$ git status nothing added to commit but untracked files present (use "git add" to track) [ravi89@login001 Tutorial_June_2018]$
 * To list all new or modified files to be commited:
 * 1) On branch master
 * 2) Initial commit
 * 3) Untracked files:
 * 4)   (use "git add ..." to include in what will be committed)
 * 5) 	test
 * 1)   (use "git add ..." to include in what will be committed)
 * 2) 	test
 * 1) 	test

[ravi89@login001 Tutorial_June_2018]$ git diff diff --git a/test b/test index 19e2dd9..d04e379 100644 --- a/test +++ b/test @@ -1 +1,3 @@ Show git status + +Demo git diff [ravi89@login001 Tutorial_June_2018]$ git status
 * To show file differences that have not yet been staged for a commit:


 * To see the file differences for file that have been staged, use: git diff --staged

Creating a version for your project
git add CHANGED_FILE This snapshots/stages the file in preparation for versioning.
 * To commit a file you first need to add the file where you have made changes, i.e. stage the file:

git commit -m "YOUR_COMMIT_MESSAGE"
 * Next commit these changes to record file snapshots permanently in version history

Git History
Browse and inspect the evolution of project files

[ravi89@c0027 Tutorial_June_2018]$ git log commit 69314c321f5e56eb3f39d7c6588db3994493cbd9 Author: ravi89  Date:  Mon Jun 18 16:48:18 2018 -0500
 * To list version history for the current branch

Testing branch and graph

commit 5d710775910a9fbea8d06a50ced9f5d59e893589 Author: ravi89  Date:  Mon Jun 18 16:32:42 2018 -0500

Second commit

commit 39313b92a2cb796dae1d53bc44d0ab4b07a9a13f Author: ravi89  Date:  Mon Jun 18 16:29:32 2018 -0500

First commit [ravi89@c0027 Tutorial_June_2018]$

[ravi89@c0027 Tutorial_June_2018]$ git log --follow test1 commit 4b679447ceeae3c5c95575eab301c20b2d893b06 Author: ravi89  Date:  Tue Jun 19 10:25:48 2018 -0500
 * To list version history for a particular file in your project:

Adding a new file [ravi89@c0027 Tutorial_June_2018]$

[ravi89@c0027 Tutorial_June_2018]$ git show 5d71077 commit 5d710775910a9fbea8d06a50ced9f5d59e893589 Author: ravi89  Date:  Mon Jun 18 16:32:42 2018 -0500
 * To output metadata and content changes of the specified commit:

Second commit

diff --git a/test b/test index 19e2dd9..d04e379 100644 --- a/test +++ b/test @@ -1 +1,3 @@ Show git status + +Demo git diff [ravi89@c0027 Tutorial_June_2018]$

NOTE: In the above example, we have used first 7 characters of the commit hash, instead of the entire commit hash. Minimum number of characters required for it to be useful is 4, but it is recommended to use 6-8 characters for higher likelihood of uniqueness.

Git branches
[ravi89@c0021 Tutorial_June_2018]$ git branch [ravi89@c0021 Tutorial_June_2018]$
 * To list all local branches in the current repository
 * master

[ravi89@c0021 Tutorial_June_2018]$ git branch new_branch [ravi89@c0021 Tutorial_June_2018]$ git branch new_branch [ravi89@c0021 Tutorial_June_2018]$
 * Create a new branch
 * master

[ravi89@c0021 Tutorial_June_2018]$ git checkout new_branch Switched to branch 'new_branch' [ravi89@c0021 Tutorial_June_2018]$ git branch master [ravi89@c0021 Tutorial_June_2018]$
 * Switch to the specified branch and updates the working directory
 * new_branch

git merge [branch] Example: [ravi89@c0021 Tutorial_June_2018]$ git status no changes added to commit (use "git add" and/or "git commit -a") [ravi89@c0021 Tutorial_June_2018]$ git add test [ravi89@c0021 Tutorial_June_2018]$ git commit -m "Commit to new_branch" [new_branch e6a1591] Commit to new_branch 1 file changed, 1 insertion(+), 1 deletion(-) [ravi89@c0021 Tutorial_June_2018]$ git checkout master Switched to branch 'master' [ravi89@c0021 Tutorial_June_2018]$ git merge new_branch Updating 65d2065..e6a1591 Fast-forward test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) [ravi89@c0021 Tutorial_June_2018]$
 * Combine the specified branch’s history into the current branch
 * 1) On branch new_branch
 * 2) Changes not staged for commit:
 * 3)   (use "git add ..." to update what will be committed)
 * 4)   (use "git checkout -- ..." to discard changes in working directory)
 * 5) 	modified:  test
 * 1) 	modified:  test

git branch -d [branch-name] [ravi89@c0021 Tutorial_June_2018]$ git branch new_branch [ravi89@c0021 Tutorial_June_2018]$ git branch -d new_branch Deleted branch new_branch (was e6a1591). [ravi89@c0021 Tutorial_June_2018]$ git branch [ravi89@c0021 Tutorial_June_2018]$
 * Delete the specified branch.
 * master
 * master

Suppress Tracking
To remove a file from tracking in git, create a .gitignore file in the project directory. It suppress accidental versioning of files and paths matching the specified patterns.

To list all ignored files in the project, run: git ls-files --other --ignored --exclude-standard

Collaboration using Git
To collaborate on a project with your teammates, you can use any of the following Git repository managers:

Gitlab hosted by Research Computing

Github

Gitlab

All of them provide issue tracking features. To get more information about using Gitlab, click here.

Useful Links

 * Cheat Sheet

A lot of the content on this page has been taken from this cheatsheet


 * To access classes provided by Software Carpentry on Git, click here.