diff --git i/git_deploy.module w/git_deploy.module
index 661dc7e..6967d4d 100644
--- i/git_deploy.module
+++ w/git_deploy.module
@@ -29,6 +29,14 @@ function git_deploy_system_info_alter(&$info, $file, $type = NULL) {
       $git_dir = "$directory/.git";
       // Theoretically /.git could exist.
       if ($directory && is_dir($git_dir)) {
+        // Check for cached values.
+        $cache_key = 'git_deploy_info_version_'.$file->uri.'_'.filemtime($git_dir);
+        if ($cached = cache_get($cache_key, 'cache')) {
+          $info['version'] = $cached->data['version'];
+          $info['datestamp'] = $cached->data['datestamp'];
+          $info['project'] = $cached->data['project'];
+          return;
+        }
         $git = "git --git-dir $git_dir";
         // Find first the project name based on fetch URL.
         // Eat error messages. >& is valid on Windows, too. Also, $output does
@@ -81,6 +89,15 @@ function git_deploy_system_info_alter(&$info, $file, $type = NULL) {
         if ($datestamp && is_numeric($datestamp[0])) {
           $info['datestamp'] = $datestamp[0];
         }
+
+        // Save values into cache.
+        // The cache is marked to be pruned after one week. Since the cache
+        // key itself contains the timestamp this is only meant to cleanup
+        // irrelevant data.
+        foreach( array('version', 'project', 'datestamp') as $key ) {
+          $cache_data[$key] = isset($info[$key]) ? $info[$key] : NULL;
+        }
+        cache_set($cache_key, $cache_data, 'cache', REQUEST_TIME + 7*24*3600);
       }
     }
   }
