\( \newcommand{\P}[]{\unicode{xB6}} \newcommand{\AA}[]{\unicode{x212B}} \newcommand{\empty}[]{\emptyset} \newcommand{\O}[]{\emptyset} \newcommand{\Alpha}[]{Α} \newcommand{\Beta}[]{Β} \newcommand{\Epsilon}[]{Ε} \newcommand{\Iota}[]{Ι} \newcommand{\Kappa}[]{Κ} \newcommand{\Rho}[]{Ρ} \newcommand{\Tau}[]{Τ} \newcommand{\Zeta}[]{Ζ} \newcommand{\Mu}[]{\unicode{x039C}} \newcommand{\Chi}[]{Χ} \newcommand{\Eta}[]{\unicode{x0397}} \newcommand{\Nu}[]{\unicode{x039D}} \newcommand{\Omicron}[]{\unicode{x039F}} \DeclareMathOperator{\sgn}{sgn} \def\oiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x222F}\,}{\unicode{x222F}}{\unicode{x222F}}{\unicode{x222F}}}\,}\nolimits} \def\oiiint{\mathop{\vcenter{\mathchoice{\huge\unicode{x2230}\,}{\unicode{x2230}}{\unicode{x2230}}{\unicode{x2230}}}\,}\nolimits} \)

Git is a popular version control system made by Linus Torvalds.

Basic Usage

# Clone or download a repository
git clone <url>

# Stage your changes
git add <my files>
# Or stage all files
# git add .

# Make a commit
git commit -m "My commit message"

# Push your changes to the repository
git push

# Pull the latest changes from the repository
# Equivalent to git fetch && git merge FETCH_HEAD
git pull

Branches

# Make a branch
git checkout -b my_feature

# Add and commit to this branch
git add .
git commit -m "My commit message"

# Push
git push --set-upstream origin my_feature

Pull Requests

Migrating Repositories

How to migrate repositories to another Git server

git clone --mirror <original_repo>
cd <repo>

# Run the following lines only if you're using lfs
git lfs fetch --all
git lfs push --all <new_repo>

git push --all <new_repo>

Changing Remote URL

Reference
You will need to change the remote url if it is changed on the server. E.g. if you change the project name.

git remote set-url origin <new-url>

gitignore

.gitignore is used to ignore certain files to make sure they do not get accidentally pushed to the remote git repo.
You can find a collection of .gitignore files on Github's gitignore repo.
Or you can create a custom .gitignore file at gitignore.io.

gitattributes

.gitattributes are used to give attributes to paths.
They can be used to assign programming languages to filenames.
They are also used to identify which files should be stored in the lfs.
Here is an example to store video and images in the lfs.

## Video
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.mov filter=lfs diff=lfs merge=lfs -text
*.flv filter=lfs diff=lfs merge=lfs -text

## Pictures
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text

## Binary files
*.bin filter=lfs diff=lfs merge=lfs -text
*.7z filter=lfs diff=lfs merge=lfs -text

Git Large File Storage (LFS)

Reference