diff --git a/cmd/gitmirror/gitmirror.go b/cmd/gitmirror/gitmirror.go
index 9545ff2..38b87d2 100644
--- a/cmd/gitmirror/gitmirror.go
+++ b/cmd/gitmirror/gitmirror.go
@@ -84,6 +84,7 @@
 		gerritClient: gerrit.NewClient("https://go-review.googlesource.com", gerrit.NoAuth),
 		mirrorGitHub: *flagMirrorGitHub,
 		mirrorCSR:    *flagMirrorCSR,
+		timeoutScale: 1,
 	}
 	http.HandleFunc("/", m.handleRoot)
 
@@ -213,6 +214,7 @@
 	homeDir                 string
 	gerritClient            *gerrit.Client
 	mirrorGitHub, mirrorCSR bool
+	timeoutScale            int
 }
 
 func (m *gitMirror) addRepo(meta *repospkg.Repo) *repo {
@@ -456,7 +458,7 @@
 func (r *repo) loop() {
 	for {
 		if err := r.loopOnce(); err != nil {
-			time.Sleep(10 * time.Second)
+			time.Sleep(10 * time.Second * time.Duration(r.mirror.timeoutScale))
 			continue
 		}
 
@@ -499,7 +501,7 @@
 // fetch runs "git fetch" in the repository root.
 // It tries three times, just in case it failed because of a transient error.
 func (r *repo) fetch() error {
-	err := try(3, func(attempt int) error {
+	err := r.try(3, func(attempt int) error {
 		r.setStatus(fmt.Sprintf("running git fetch origin, attempt %d", attempt))
 		if _, stderr, err := r.runGitLogged("fetch", "--prune", "origin"); err != nil {
 			return fmt.Errorf("%v\n\n%s", err, stderr)
@@ -517,7 +519,7 @@
 // push runs "git push -f --mirror dest" in the repository root.
 // It tries three times, just in case it failed because of a transient error.
 func (r *repo) push(dest string) error {
-	err := try(3, func(attempt int) error {
+	err := r.try(3, func(attempt int) error {
 		r.setStatus(fmt.Sprintf("syncing to %v, attempt %d", dest, attempt))
 		if _, stderr, err := r.runGitLogged("push", "-f", "--mirror", dest); err != nil {
 			return fmt.Errorf("%v\n\n%s", err, stderr)
@@ -588,10 +590,10 @@
 	fmt.Fprintf(w, "\n</pre></body></html>")
 }
 
-func try(n int, fn func(attempt int) error) error {
+func (r *repo) try(n int, fn func(attempt int) error) error {
 	var err error
 	for tries := 0; tries < n; tries++ {
-		time.Sleep(time.Duration(tries) * 5 * time.Second) // Linear back-off.
+		time.Sleep(time.Duration(tries) * 5 * time.Second * time.Duration(r.mirror.timeoutScale)) // Linear back-off.
 		if err = fn(tries); err == nil {
 			break
 		}
diff --git a/cmd/gitmirror/gitmirror_test.go b/cmd/gitmirror/gitmirror_test.go
index 2898a4f..344b5f0 100644
--- a/cmd/gitmirror/gitmirror_test.go
+++ b/cmd/gitmirror/gitmirror_test.go
@@ -79,6 +79,21 @@
 	}
 }
 
+// Tests that mirroring an initially empty repository works. See golang/go#39597.
+// The repository still has to exist.
+func TestMirrorInitiallyEmpty(t *testing.T) {
+	tm := newTestMirror(t)
+	if err := tm.m.repos["build"].loopOnce(); err == nil {
+		t.Error("expected error mirroring empty repository, got none")
+	}
+	tm.commit("first commit")
+	tm.loopOnce()
+	rev := tm.git(tm.gerrit, "rev-parse", "HEAD")
+	if githubRev := tm.git(tm.github, "rev-parse", "HEAD"); rev != githubRev {
+		t.Errorf("github HEAD is %v, want %v", githubRev, rev)
+	}
+}
+
 type testMirror struct {
 	gerrit, github, csr string
 	m                   *gitMirror
@@ -107,6 +122,7 @@
 			repos:        map[string]*repo{},
 			mirrorGitHub: true,
 			mirrorCSR:    true,
+			timeoutScale: 0,
 		},
 		t: t,
 	}
