Thursday 13 August 2020

Set up Repo for our REST API

before we set up our git repo, lets make sure that we have git installed, type in git --verion

I have version "git version 2.27.0.windows.1" Installed, should you not have git installed got to https://git-scm.com/downloads and install the version for whatever os you are working with. 

to set up our repo navigate to the root folder of our solution and type in git init

Generally I prefer to rename my master branch to prod for production because I like to have four main branches that are linked to CICD pipelines and those are dev, test, stage, and prod, thus I name my branches accordingly to minimize confusion.

initially you can just do a git checkout -b prod if you decide to change it later, it can be done but may be a bit of a pain in the arse.

now before you check anything in it is imperative that you create a git ignore file, this is because whenever you are working with a framework there are potentially hundreds of megabytes of generated/compiled files that you do not want up in your remote repo or even in your local one.

you can right click in the root of your project and create a new file called .gitignore or you can simply type in new-item .gitignore -itemtype file into your terminal like so

either one will result in an empty .gitignore file being created in your solution root

now with that complete lets past in the two git ignores

for visual studio senior
https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

for visual studio code
https://github.com/github/gitignore/blob/master/Global/VisualStudioCode.gitignore

i just put one after the other

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Mono auto generated files
mono_crash.*

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# ASP.NET Scaffolding
ScaffoldingReadMe.txt

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace

# Local History for Visual Studio Code
.history/

# Visual Studio Code
.vscode

# Build results
build/
msbuild.log
msbuild.err
msbuild.wrn

I know it's ridiculously long and the vs code stuff is only the last 20 lines or so, but if we are going to open our project in visual studio senior, lets cover those bases too.

now as soon as you save your .gitignore file

you immediately see a reduction in the number of files that need to be checked in, so lets go ahead and do that.

and that's it first we did a "git add ." to stage all of our files for a commit next we executed "git commit -m 'initial checking'" to checkin all of the changes we had staged. Now all that is left to do is to push our changes to a remote repository.

let's create a remote repo, I'm going to make mine in Microsoft's devops

hit the New project button and fill out the relevant details 

simple enough, after that navigate to the repos section in your devops

once there copy the git command to configure your upstream and execute it in your terminal

this will push your code up to your repository, we can navigate to our repo in devops to see our code base.

and voila, we have a remote repository.

next lets annotated it, mark this commit as special so that we can always come back to it in the future. to do so lets create a tag

git tag -a v1.0.0 -m 'initial commit' 

You can think of this as a bookmark, usually when you have a project you will have hundreds if not thousands of check ins, by marking one with a tag we are just saying that this one is special, how special you may ask well that is what you specify in the message.

next lets push the tag up to our remote

git push --tags

simple as that, now our tags are stored in our remote repository and available to anyone who makes a pull request.  

to view our existing tags locally in our terminal you can execute

git tag -n

to see a list of all the existing tags with their annotations.

finally before we wrap this post up lets create a dev branch and push it upstream 

simply type in 

git checkout -b dev

then 

git push

which will prompt you that this branch doesn't exist in the remote repo and needs to be created by executing the command 

git push --set-upstream origin dev

and simple as that now we have a dev and prod branch, you can go ahead and do the same thing for test and stage if you would like, but I'm not sure if it will be necessary.