Add git implementation

Change-Id: I3bb5986fe244b310038b7b2ec4359d8439a158de
diff --git a/server/git/example.go b/server/git/example.go
new file mode 100644
index 0000000..c261604
--- /dev/null
+++ b/server/git/example.go
@@ -0,0 +1,149 @@
+package git
+
+import (
+	"context"
+	"fmt"
+	"log"
+)
+
+// Example demonstrates how to use the Git interface
+func Example() {
+	ctx := context.Background()
+
+	// Create a new Git instance
+	git := DefaultGit("/path/to/your/repo")
+
+	// Get repository status
+	status, err := git.Status(ctx)
+	if err != nil {
+		log.Fatalf("Failed to get status: %v", err)
+	}
+
+	fmt.Printf("Current branch: %s\n", status.Branch)
+	fmt.Printf("Repository is clean: %t\n", status.IsClean)
+
+	// List branches
+	branches, err := git.ListBranches(ctx)
+	if err != nil {
+		log.Fatalf("Failed to list branches: %v", err)
+	}
+
+	fmt.Println("Branches:")
+	for _, branch := range branches {
+		current := ""
+		if branch.IsCurrent {
+			current = " (current)"
+		}
+		fmt.Printf("  %s%s\n", branch.Name, current)
+	}
+
+	// Get recent commits
+	logOptions := LogOptions{
+		MaxCount: 5,
+		Oneline:  true,
+	}
+
+	commits, err := git.Log(ctx, logOptions)
+	if err != nil {
+		log.Fatalf("Failed to get log: %v", err)
+	}
+
+	fmt.Println("Recent commits:")
+	for _, commit := range commits {
+		fmt.Printf("  %s: %s\n", commit.Hash[:8], commit.Message)
+	}
+}
+
+// ExampleWorkflow demonstrates a typical Git workflow
+func ExampleWorkflow() {
+	ctx := context.Background()
+
+	// Initialize a new repository
+	git := DefaultGit("/path/to/new/repo")
+
+	// Initialize the repository
+	if err := git.Init(ctx, "/path/to/new/repo"); err != nil {
+		log.Fatalf("Failed to initialize repository: %v", err)
+	}
+
+	// Set user configuration
+	userConfig := UserConfig{
+		Name:  "John Doe",
+		Email: "john@example.com",
+	}
+
+	if err := git.SetUserConfig(ctx, userConfig); err != nil {
+		log.Fatalf("Failed to set user config: %v", err)
+	}
+
+	// Create a new file and add it
+	// (In a real scenario, you would create the file here)
+
+	// Stage all changes
+	if err := git.AddAll(ctx); err != nil {
+		log.Fatalf("Failed to add files: %v", err)
+	}
+
+	// Commit the changes
+	commitOptions := CommitOptions{
+		AllowEmpty: false,
+	}
+
+	if err := git.Commit(ctx, "Initial commit", commitOptions); err != nil {
+		log.Fatalf("Failed to commit: %v", err)
+	}
+
+	// Create a new branch
+	if err := git.CreateBranch(ctx, "feature/new-feature", ""); err != nil {
+		log.Fatalf("Failed to create branch: %v", err)
+	}
+
+	// Switch to the new branch
+	if err := git.Checkout(ctx, "feature/new-feature"); err != nil {
+		log.Fatalf("Failed to checkout branch: %v", err)
+	}
+
+	fmt.Println("Repository initialized and feature branch created!")
+}
+
+// ExampleRemoteOperations demonstrates remote repository operations
+func ExampleRemoteOperations() {
+	ctx := context.Background()
+
+	git := DefaultGit("/path/to/your/repo")
+
+	// Add a remote
+	if err := git.AddRemote(ctx, "origin", "https://github.com/user/repo.git"); err != nil {
+		log.Fatalf("Failed to add remote: %v", err)
+	}
+
+	// List remotes
+	remotes, err := git.ListRemotes(ctx)
+	if err != nil {
+		log.Fatalf("Failed to list remotes: %v", err)
+	}
+
+	fmt.Println("Remotes:")
+	for _, remote := range remotes {
+		fmt.Printf("  %s: %s\n", remote.Name, remote.URL)
+	}
+
+	// Fetch from remote
+	fetchOptions := FetchOptions{
+		All:  true,
+		Tags: true,
+	}
+
+	if err := git.Fetch(ctx, "", fetchOptions); err != nil {
+		log.Fatalf("Failed to fetch: %v", err)
+	}
+
+	// Push to remote
+	pushOptions := PushOptions{
+		SetUpstream: true,
+	}
+
+	if err := git.Push(ctx, "origin", "main", pushOptions); err != nil {
+		log.Fatalf("Failed to push: %v", err)
+	}
+}