diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,11 @@
+propellor (2.15.3) unstable; urgency=medium
+
+  * Added Git.bareRepoDefaultBranch property
+    Thanks, Sean Whitton.
+  * Add missing Control.Applicative imports needed by older versions of ghc.
+
+ -- Joey Hess <id@joeyh.name>  Tue, 12 Jan 2016 12:37:22 -0400
+
 propellor (2.15.2) unstable; urgency=medium
 
   * Added GNUPGBIN environment variable or git.program git config
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+propellor (2.15.3) unstable; urgency=medium
+
+  * Added Git.bareRepoDefaultBranch property
+    Thanks, Sean Whitton.
+  * Add missing Control.Applicative imports needed by older versions of ghc.
+
+ -- Joey Hess <id@joeyh.name>  Tue, 12 Jan 2016 12:37:22 -0400
+
 propellor (2.15.2) unstable; urgency=medium
 
   * Added GNUPGBIN environment variable or git.program git config
diff --git a/propellor.cabal b/propellor.cabal
--- a/propellor.cabal
+++ b/propellor.cabal
@@ -1,5 +1,5 @@
 Name: propellor
-Version: 2.15.2
+Version: 2.15.3
 Cabal-Version: >= 1.8
 License: BSD3
 Maintainer: Joey Hess <id@joeyh.name>
diff --git a/src/Propellor/Git.hs b/src/Propellor/Git.hs
--- a/src/Propellor/Git.hs
+++ b/src/Propellor/Git.hs
@@ -4,6 +4,8 @@
 import Utility.Exception
 
 import System.Directory
+import Control.Applicative
+import Prelude
 
 getCurrentBranch :: IO String
 getCurrentBranch = takeWhile (/= '\n')
diff --git a/src/Propellor/Git/Config.hs b/src/Propellor/Git/Config.hs
--- a/src/Propellor/Git/Config.hs
+++ b/src/Propellor/Git/Config.hs
@@ -7,6 +7,8 @@
 import Utility.Monad
 
 import Control.Monad
+import Control.Applicative
+import Prelude
 
 getGitConfigValue :: String -> IO (Maybe String)
 getGitConfigValue key = do
diff --git a/src/Propellor/Property/Git.hs b/src/Propellor/Property/Git.hs
--- a/src/Propellor/Property/Git.hs
+++ b/src/Propellor/Property/Git.hs
@@ -149,3 +149,14 @@
 	refuses = repoConfigured repo ("receive.denyNonFastForwards", "true")
 		`describe` desc "rejects"
 	desc s = "git repo " ++ repo ++ " " ++ s ++ " non-fast-forward pushes"
+
+-- | Sets a bare repository's default branch, which will be checked out
+-- when cloning it.
+bareRepoDefaultBranch :: FilePath -> String -> Property NoInfo
+bareRepoDefaultBranch repo branch =
+	userScriptProperty (User "root")
+		[ "cd " ++ repo
+		, "git symbolic-ref HEAD refs/heads/" ++ branch
+		]
+	`changesFileContent` (repo </> "HEAD")
+	`describe` ("git repo at " ++ repo ++ " has default branch " ++ branch)
