diff --git a/lib/gitlab/import_export/command_line_util.rb b/lib/gitlab/import_export/command_line_util.rb
index 3665e2edb7d6f565a66dacc57be56085d495c883..e8d41a6bd3dc216e6960ebeaf5d17245cb8ce120 100644
--- a/lib/gitlab/import_export/command_line_util.rb
+++ b/lib/gitlab/import_export/command_line_util.rb
@@ -6,11 +6,11 @@ module Gitlab
       end
 
       def untar_czf(archive:, dir:)
-        untar_with_options(archive: archive, dir: dir, options: 'czf')
+        tar_with_options(archive: archive, dir: dir, options: 'czf')
       end
 
       def untar_cf(archive:, dir:)
-        untar_with_options(archive: archive, dir: dir, options: 'cf')
+        tar_with_options(archive: archive, dir: dir, options: 'cf')
       end
 
       def tar_czf(archive:, dir:)
@@ -24,13 +24,7 @@ module Gitlab
       end
 
       def tar_with_options(archive:, dir:, options:)
-        cmd = %W(tar -#{options} #{archive} -C #{dir})
-        _output, status = Gitlab::Popen.popen(cmd)
-        status.zero?
-      end
-
-      def untar_with_options(archive:, dir:, options:)
-        cmd = %W(tar -#{options} #{archive} -C #{dir})
+        cmd = %W(tar -#{options} #{archive} #{dir})
         _output, status = Gitlab::Popen.popen(cmd)
         status.zero?
       end
diff --git a/lib/gitlab/import_export/import_service.rb b/lib/gitlab/import_export/import_service.rb
index 5152d6ac182e427493eda4ba6e614b1e6c8a0a4d..226499030afb437b974ad3fc44848e68db6a3a25 100644
--- a/lib/gitlab/import_export/import_service.rb
+++ b/lib/gitlab/import_export/import_service.rb
@@ -3,7 +3,7 @@ module Gitlab
     class ImportService
 
       def self.execute(*args)
-        new(args).execute
+        new(*args).execute
       end
 
       def initialize(archive_file:, owner:, namespace_id:, project_path:)
@@ -26,7 +26,7 @@ module Gitlab
       end
 
       def project_tree
-        @project_tree ||= Gitlab::ImportExport::ProjectTreeRestorer.new(path: storage_path, user: @current_user)
+        @project_tree ||= Gitlab::ImportExport::ProjectTreeRestorer.new(path: storage_path, user: @current_user, project_path: @project_path)
       end
 
       def restore_repo
diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb
index 9f399845437169f0c0097a00320dc6e1d66fbe79..225e6f349914a0f5f34606f89771bd3ceab831c0 100644
--- a/lib/gitlab/import_export/importer.rb
+++ b/lib/gitlab/import_export/importer.rb
@@ -13,6 +13,7 @@ module Gitlab
       end
 
       def import
+        FileUtils.mkdir_p(@storage_path)
         decompress_archive
       end
 
diff --git a/lib/gitlab/import_export/project_tree_restorer.rb b/lib/gitlab/import_export/project_tree_restorer.rb
index 445f1d884d066140675a2a65ff666af0cc894406..7b41ba0685b2197a82fec537ef10f02ddd6428f7 100644
--- a/lib/gitlab/import_export/project_tree_restorer.rb
+++ b/lib/gitlab/import_export/project_tree_restorer.rb
@@ -3,9 +3,10 @@ module Gitlab
     class ProjectTreeRestorer
       attr_reader :project
 
-      def initialize(path:, user:)
+      def initialize(path:, user:, project_path:)
         @path = File.join(path, 'project.json')
         @user = user
+        @project_path = project_path
       end
 
       def restore
@@ -48,6 +49,7 @@ module Gitlab
         project_params = @tree_hash.reject { |_key, value| value.is_a?(Array) }
         project = Gitlab::ImportExport::ProjectFactory.create(
           project_params: project_params, user: @user)
+        project.path = @project_path
         project.save
         project.import_start
         project