GIT - Ins/outs/etc

What is git?

  • Distributed source control
  • A "clone" is a full copy of the remote repository
  • Branches and tags are lightweight
0
 Advanced issue found
 

What is git?

Assumptions...

0
 Advanced issue found
 
  • You have a git client installed
  • You know how to add files to the git index
  • You know how to commit
0
 Advanced issue found
 

The GIT model vs centralized source control

GIT/Hg

SVN/TFS/CVS

(distributed)

(centralized)

Source control server-side

Local working copies are complete repositories

Tom

Dick

Harry

Local working copies are one or more complete branches

Tom

Dick

Harry

Visual overview (clone)

"Remote" is a remote version of the repository, eg. hosted on gitlab.gs.mil

Full local working copy

> git clone git@gitlab.gs.mil:GPM/dissemination/fgdrt.git

Syncing changes from remote

  • Sitution: A newer version of the "develop" branch has been pushed to the remote
  • Objective: I want to integrate these changes into an existing local story branch, story branch is named "iss53" and push to a branch on the remote

*Upon regular merge, branch differences are added

as a single merge commit into the destination branch.  Rebase

is a cleaner, but more complex, alternative to work in a team environment.

~/myproject [develop] > git pull  # does an automatic merge into local develop from remote

~/myproject [develop] > git checkout iss53

~/myproject [iss53] > git merge develop  # local gpm-123 branch now has new code from develop

~/myproject [iss53] > git push -u origin iss53  # pushed to remote origin, ready for merge request

Visual overview (merge)

Before

After merge

~/myproject [master] > git merge iss53

Forks

  • Nothing too special, just another remote of a repository with a common commit ancestor
  • Still need to manage merges between remotes
  • Traditionally referred to as "upstream" for the parent repository and "origin" for the fork
  • Forks can be managed through UI of git hosting (eg. gitlab/github), but can also be managed independently (eg. a fork can live across different git providers!)

Upstream

"Origin" or our "fork"

Local

*Typical flow

Example: "forking" the nestjs-template

  • Assumes you have already forked the repository (either manually or through gitlab.gs.mil's UI) and have cloned your fork locally as the "origin" remote
  • Objective: Your local repository will have an upstream pointed at the original nestjs-template repository and an origin pointed at your fork.  Additionally, we will sync the master branch between the upstream and your fork.
~/myproject [master] > git remote add upstream git@gitlab.gs.mil:GPM/templates/nestjs-template.git

~/myproject [master] > git fetch --all  # This + last command is all we need to add the upstream reference and pull branch refs

#------------ SYNC UPSTREAM "MASTER" BRANCH TO YOUR FORK'S "MASTER" BRANCH ------------

~/myproject [master] > git checkout -b umaster -t upstream/master  # checkout a local umaster branch, tracking to upstream/master, yes this step can be replaced by direct merge into origin/master if you're looking to do that

~/myproject [umaster] > git checkout master

~/myproject [master] > git merge umaster  # "master" branch in fork now in sync

Example

Creating and syncing a fork across two disparate git providers

  • Along the way, we'll create and push a new branch
  • Also, we'll cover some additional cli git commands

Resources/Exercises

Cheatsheets

GIT: Intro

By Joe Meilinger

GIT: Intro

  • 187