diff --git a/CHANGELOG b/CHANGELOG
index 288adccbba21c2b417de94073f08abe7e5ee1c79..b5f1b1a56b0131d0d371239fb0fd18db9475553e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -28,6 +28,7 @@ v 8.11.0 (unreleased)
   - Change requests_profiles resource constraint to catch virtually any file
 
 v 8.10.3 (unreleased)
+  - Fix hooks missing on imported GitLab projects
 
 v 8.10.2
   - User can now search branches by name. !5144
diff --git a/lib/gitlab/import_export/command_line_util.rb b/lib/gitlab/import_export/command_line_util.rb
index 5dd0e34c18ea5b04420b66dab081895660ed3780..e522a0fc8f69a6ba1b906bdf9124458bda24f6ba 100644
--- a/lib/gitlab/import_export/command_line_util.rb
+++ b/lib/gitlab/import_export/command_line_util.rb
@@ -17,6 +17,10 @@ module Gitlab
         execute(%W(#{git_bin_path} clone --bare #{bundle_path} #{repo_path}))
       end
 
+      def git_restore_hooks
+        execute(%W(#{Gitlab.config.gitlab_shell.path}/bin/create-hooks) + repository_storage_paths_args)
+      end
+
       private
 
       def tar_with_options(archive:, dir:, options:)
@@ -45,6 +49,10 @@ module Gitlab
         FileUtils.copy_entry(source, destination)
         true
       end
+
+      def repository_storage_paths_args
+        Gitlab.config.repositories.storages.values
+      end
     end
   end
 end
diff --git a/lib/gitlab/import_export/repo_restorer.rb b/lib/gitlab/import_export/repo_restorer.rb
index f84de652a572e602c7cb89b642eb712fef8f2e9f..6d9379acf25869458600edb6d4daf552a22fbd93 100644
--- a/lib/gitlab/import_export/repo_restorer.rb
+++ b/lib/gitlab/import_export/repo_restorer.rb
@@ -14,7 +14,7 @@ module Gitlab
 
         FileUtils.mkdir_p(path_to_repo)
 
-        git_unbundle(repo_path: path_to_repo, bundle_path: @path_to_bundle)
+        git_unbundle(repo_path: path_to_repo, bundle_path: @path_to_bundle) && repo_restore_hooks
       rescue => e
         @shared.error(e)
         false
@@ -29,6 +29,16 @@ module Gitlab
       def path_to_repo
         @project.repository.path_to_repo
       end
+
+      def repo_restore_hooks
+        return true if wiki?
+
+        git_restore_hooks
+      end
+
+      def wiki?
+        @project.class.name == 'ProjectWiki'
+      end
     end
   end
 end
diff --git a/spec/features/projects/import_export/import_file_spec.rb b/spec/features/projects/import_export/import_file_spec.rb
index 2d1e3bbebe552b38a2424d1866267e192c851335..7835e1678ad0596a1ed2c60fedada963261df467 100644
--- a/spec/features/projects/import_export/import_file_spec.rb
+++ b/spec/features/projects/import_export/import_file_spec.rb
@@ -8,6 +8,7 @@ feature 'project import', feature: true, js: true do
   let(:file) { File.join(Rails.root, 'spec', 'features', 'projects', 'import_export', 'test_project_export.tar.gz') }
   let(:export_path) { "#{Dir::tmpdir}/import_file_spec" }
   let(:project) { Project.last }
+  let(:project_hook) { Gitlab::Git::Hook.new('post-receive', project.repository.path) }
 
   background do
     allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path)
@@ -37,7 +38,7 @@ feature 'project import', feature: true, js: true do
     expect(project).not_to be_nil
     expect(project.issues).not_to be_empty
     expect(project.merge_requests).not_to be_empty
-    expect(project.repo_exists?).to be true
+    expect(project_hook).to exist
     expect(wiki_exists?).to be true
     expect(project.import_status).to eq('finished')
   end