AppRunner: Create .git directory when cloning repository

Change-Id: I733fd2aad5d7ec67c38cb773097b12b86ed69755
diff --git a/apps/app-runner/main.go b/apps/app-runner/main.go
index ebd0ef8..0449ca5 100644
--- a/apps/app-runner/main.go
+++ b/apps/app-runner/main.go
@@ -7,6 +7,7 @@
 	"log"
 	"net"
 	"os"
+	"path/filepath"
 	"strings"
 
 	"golang.org/x/crypto/ssh"
@@ -14,8 +15,9 @@
 	"github.com/go-git/go-billy/v5/osfs"
 	"github.com/go-git/go-git/v5"
 	"github.com/go-git/go-git/v5/plumbing"
+	"github.com/go-git/go-git/v5/plumbing/cache"
 	gitssh "github.com/go-git/go-git/v5/plumbing/transport/ssh"
-	"github.com/go-git/go-git/v5/storage/memory"
+	"github.com/go-git/go-git/v5/storage/filesystem"
 )
 
 var port = flag.Int("port", 3000, "Port to listen on")
@@ -65,7 +67,14 @@
 			},
 		}
 	}
-	repo, err := git.Clone(memory.NewStorage(), osfs.New(path, osfs.WithBoundOS()), opts)
+	repo, err := git.Clone(
+		filesystem.NewStorage(
+			osfs.New(filepath.Join(path, ".git"), osfs.WithBoundOS()),
+			cache.NewObjectLRUDefault(),
+		),
+		osfs.New(path, osfs.WithBoundOS()),
+		opts,
+	)
 	if err != nil {
 		return nil, err
 	}
diff --git a/apps/app-runner/server.go b/apps/app-runner/server.go
index 89f621a..e917754 100644
--- a/apps/app-runner/server.go
+++ b/apps/app-runner/server.go
@@ -151,7 +151,7 @@
 			Commands: []CommandStatus{},
 		}
 	}
-	if s.agentMode {
+	if s.agentMode && s.repoAddr == "" {
 		if _, err := os.Stat(filepath.Join(newDir, ".git")); err != nil && os.IsNotExist(err) {
 			commands = append(commands, command{cmd: "git config --global user.name dodo"})
 			s.status.Commands = append(s.status.Commands, CommandStatus{