diff --git a/src/Handler.php b/src/Handler.php
index c3ccc34b346672f2249168d9b218ec68ccd448c2..91e5224e12202509d4aee8953c57b6a49ec41497 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -118,12 +118,10 @@ class Handler {
     $twig_loader = new \Twig_Loader_Array([]);
     $twig = new \Twig_Environment($twig_loader);
     $options['webRoot'] = $webRoot . '/';
+    $orig_ignored = FALSE;
     foreach ($this->getFiles($projectRoot, $webRoot, $settingsPath) as $template => $def) {
       $file = $def['dest'] . '/' . $template;
       if ($overwrite || !$fs->exists($file)) {
-        if ($fs->exists($file)) {
-          $fs->rename($file, $file . '.orig');
-        }
         $twig_loader->setTemplate($template, file_get_contents($pluginRoot . '/templates/' . $template . '.twig'));
         $rendered = $twig->render($template, $options);
         if (!empty($def['add2yaml']) && isset($options[$template])) {
@@ -131,6 +129,23 @@ class Handler {
           $yaml  = array_merge_recursive($yaml, $options[$template]);
           $rendered = Yaml::dump($yaml, 9, 2);
         }
+        if ($fs->exists($file)) {
+          if (md5_file($file) == md5($rendered)) {
+            continue;
+          }
+          $orig_file = $file . '.orig';
+          if ($fs->exists($orig_file)) {
+            $fs->remove($orig_file);
+          }
+          $fs->rename($file, $orig_file);
+          if (!$orig_ignored) {
+            $this->git('ignore *.orig');
+            $orig_ignored = TRUE;
+          }
+        }
+        else {
+          $this->git('ignore ' . $template);
+        }
         file_put_contents($file, $rendered);
       }
       if (isset($def['link']) && ($def['link'] != $settingsPath)) {
@@ -153,16 +168,6 @@ class Handler {
       }
     }
 
-    // Initialize local git working copy
-    try {
-      foreach ($this->getFiles($projectRoot, $webRoot, $settingsPath) as $template => $def) {
-        $this->git('ignore ' . $template);
-      }
-    }
-    catch (\Exception $ex) {
-      // We're ignoring this for now
-    }
-
     $traefik = new Traefik($options['projectname']);
     $traefik->update();
   }
@@ -204,65 +209,65 @@ class Handler {
     $env = new Dotenv('docker4drupal', $this->io);
     $env->put('COMPOSE_PROJECT_NAME', $projectname);
     $extra = $this->composer->getPackage()->getExtra() + ['docker4drupal' => []];
-    $options = $extra['docker4drupal'] + [
-        'projectname' => $projectname,
-        'docker0' => [
-          'ip' => $this->getLocalIpv4('docker0'),
-        ],
-        'live' => [
-          'root' => '',
-          'uri' => '',
-          'host' => '',
-          'user' => $env->receive('live_host_username', 'Remote username for host of the live site', getenv('USER')),
-        ],
-        'drupal' => [
-          'version' => '8',
-        ],
-        'php' => [
-          'version' => '7.0',
-          'xdebug' => 1,
-        ],
-        'webserver' => [
-          'type' => 'nginx',
-          'version' => '1.13',
-        ],
-        'varnish' => [
-          'enable' => 0,
-        ],
-        'redis' => [
-          'version' => '4.0',
-        ],
-        'adminer' => [
-          'version' => '4.3',
-        ],
-        'solr' => [
-          'enable' => 0,
-          'version' => '6.6',
-        ],
-        'node' => [
-          'enable' => 0,
-          'key' => '',
-          'path' => '',
-        ],
-        'memcached' => [
-          'enable' => 0,
-        ],
-        'rsyslog' => [
-          'enable' => 0,
-        ],
-        'athenapdf' => [
-          'enable' => 0,
-          'key' => '',
-        ],
-        'blackfire' => [
-          'enable' => 0,
-          'id' => '',
-          'token' => '',
-        ],
-        'webgrind' => [
-          'enable' => 0,
-        ],
-      ];
+    $options = NestedArray::mergeDeep([
+      'projectname' => $projectname,
+      'docker0' => [
+        'ip' => $this->getLocalIpv4('docker0'),
+      ],
+      'live' => [
+        'root' => '',
+        'uri' => '',
+        'host' => '',
+        'user' => $env->receive('live_host_username', 'Remote username for host of the live site', getenv('USER')),
+      ],
+      'drupal' => [
+        'version' => '8',
+      ],
+      'php' => [
+        'version' => '7.0',
+        'xdebug' => 1,
+      ],
+      'webserver' => [
+        'type' => 'nginx',
+        'version' => '1.13',
+      ],
+      'varnish' => [
+        'enable' => 0,
+      ],
+      'redis' => [
+        'version' => '4.0',
+      ],
+      'adminer' => [
+        'version' => '4.3',
+      ],
+      'solr' => [
+        'enable' => 0,
+        'version' => '6.6',
+      ],
+      'node' => [
+        'enable' => 0,
+        'key' => '',
+        'path' => '',
+      ],
+      'memcached' => [
+        'enable' => 0,
+      ],
+      'rsyslog' => [
+        'enable' => 0,
+      ],
+      'athenapdf' => [
+        'enable' => 0,
+        'key' => '',
+      ],
+      'blackfire' => [
+        'enable' => 0,
+        'id' => '',
+        'token' => '',
+      ],
+      'webgrind' => [
+        'enable' => 0,
+      ],
+    ], $extra['docker4drupal']);
     return $options;
   }
 
@@ -271,13 +276,9 @@ class Handler {
    *
    * @param $command
    *   Git command name, arguments and/or options.
-   * @throws \Exception
    */
   protected function git($command) {
-    passthru(escapeshellcmd('git -c "user.email=d8-project@lakedrops.com" ' . $command), $exit_code);
-    if ($exit_code !== 0) {
-      throw new \Exception('Git returned a non-zero exit code');
-    }
+    passthru(escapeshellcmd('git -c "user.email=d8-project@lakedrops.com" ' . $command));
   }
 
   private function getLocalIpv4($interface = NULL) {
diff --git a/src/NestedArray.php b/src/NestedArray.php
new file mode 100644
index 0000000000000000000000000000000000000000..e36c0727ba2f918434df358274f227fe2a14cbe7
--- /dev/null
+++ b/src/NestedArray.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace LakeDrops\Docker4Drupal;
+
+class NestedArray {
+
+  public static function mergeDeep() {
+    return self::mergeDeepArray(func_get_args());
+  }
+
+  public static function mergeDeepArray(array $arrays, $preserve_integer_keys = FALSE) {
+    $result = [];
+    foreach ($arrays as $array) {
+      foreach ($array as $key => $value) {
+        if (is_int($key) && !$preserve_integer_keys) {
+          $result[] = $value;
+        }
+        elseif (isset($result[$key]) && is_array($result[$key]) && is_array($value)) {
+          $result[$key] = self::mergeDeepArray([$result[$key], $value], $preserve_integer_keys);
+        }
+        else {
+          $result[$key] = $value;
+        }
+      }
+    }
+    return $result;
+  }
+
+}