Een optie is om een shell proces op te starten (spawning) en de Git commando-regel tool gebruiken om het werk te doen. Dit heeft het voordeel van canoniek zijn, en alle mogelijkheden van Git worden ondersteund. Het is toevallig ook nog eens redelijk eenvoudig, omdat de meeste omgevingen waarin het programma draait een relatief eenvoudige manier hebben om een proces met commando-regel argumenten te aan te roepen. Echter, deze aanpak heeft ook een aantal nadelen.
Een ervan is dat alle uitvoer in platte tekst is. Dit houdt in dat je de soms gewijzigde uitvoer van Git moet parsen om de voortgang en resultaat informatie te lezen, wat inefficiënt en foutgevoelig kan zijn.
Een ander is een gebrekkige fout herstel. Als een repository op de een of andere manier corrupt is geraakt, of de gebruiker heeft een configuratiewaarde misvormd, zal Git simpelweg weigeren om een groot aantal operaties uit te voeren.
Weer een ander is proces beheer. Git eist dat je een shell omgeving bijhoudt in een separaat proces, wat ongewilde complexiteit kan toevoegen. Het coördineren van veel van dit soort processen (vooral als de kans bestaat dat dezelfde repository door een aantal processen wordt benaderd) kan een nogal grote uitdaging zijn.