diff --git a/src/applications/diffusion/engine/DiffusionCommitHookEngine.php b/src/applications/diffusion/engine/DiffusionCommitHookEngine.php
--- a/src/applications/diffusion/engine/DiffusionCommitHookEngine.php
+++ b/src/applications/diffusion/engine/DiffusionCommitHookEngine.php
@@ -126,7 +126,6 @@
 
   public function execute() {
     $ref_updates = $this->findRefUpdates();
-    $all_updates = $ref_updates;
 
     $caught = null;
     try {
@@ -140,21 +139,32 @@
         throw $ex;
       }
 
-      $this->applyHeraldRefRules($ref_updates, $all_updates);
-
       $content_updates = $this->findContentUpdates($ref_updates);
+      $all_updates = array_merge($ref_updates, $content_updates);
+
+      // If this is an "initial import" (a sizable push to a previously empty
+      // repository) we'll allow enormous changes and disable Herald rules.
+      // These rulesets can consume a large amount of time and memory and are
+      // generally not relevant when importing repository history.
+      $is_initial_import = $this->isInitialImport($all_updates);
+
+      if (!$is_initial_import) {
+        $this->applyHeraldRefRules($ref_updates);
+      }
 
       try {
-        $this->rejectEnormousChanges($content_updates);
+        if (!$is_initial_import) {
+          $this->rejectEnormousChanges($content_updates);
+        }
       } catch (DiffusionCommitHookRejectException $ex) {
         // If we're rejecting enormous changes, flag everything.
         $this->rejectCode = PhabricatorRepositoryPushLog::REJECT_ENORMOUS;
         throw $ex;
       }
 
-      $all_updates = array_merge($all_updates, $content_updates);
-
-      $this->applyHeraldContentRules($content_updates, $all_updates);
+      if (!$is_initial_import) {
+        $this->applyHeraldContentRules($content_updates);
+      }
 
       // Run custom scripts in `hook.d/` directories.
       $this->applyCustomHooks($all_updates);
@@ -186,12 +196,10 @@
       throw $caught;
     }
 
-    // If this went through cleanly, detect pushes which are actually imports
-    // of an existing repository rather than an addition of new commits. If
-    // this push is importing a bunch of stuff, set the importing flag on
-    // the repository. It will be cleared once we fully process everything.
+    // If this went through cleanly and was an import, set the importing flag
+    // on the repository. It will be cleared once we fully process everything.
 
-    if ($this->isInitialImport($all_updates)) {
+    if ($is_initial_import) {
       $repository = $this->getRepository();
       $repository->markImporting();
     }
@@ -281,28 +289,21 @@
 
 /* -(  Herald  )------------------------------------------------------------- */
 
-  private function applyHeraldRefRules(
-    array $ref_updates,
-    array $all_updates) {
+  private function applyHeraldRefRules(array $ref_updates) {
     $this->applyHeraldRules(
       $ref_updates,
-      new HeraldPreCommitRefAdapter(),
-      $all_updates);
+      new HeraldPreCommitRefAdapter());
   }
 
-  private function applyHeraldContentRules(
-    array $content_updates,
-    array $all_updates) {
+  private function applyHeraldContentRules(array $content_updates) {
     $this->applyHeraldRules(
       $content_updates,
-      new HeraldPreCommitContentAdapter(),
-      $all_updates);
+      new HeraldPreCommitContentAdapter());
   }
 
   private function applyHeraldRules(
     array $updates,
-    HeraldAdapter $adapter_template,
-    array $all_updates) {
+    HeraldAdapter $adapter_template) {
 
     if (!$updates) {
       return;