diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 12decbbfeee2ea707b1c11f6d8a022bc23d21c95..6428e0196a859d088fab55426323624a1f68a85e 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -443,6 +443,7 @@ def project_params(attributes: [])
     params.require(:project)
       .permit(project_params_attributes + attributes)
       .merge(import_url_params)
+      .merge(object_format_params)
   end
 
   def project_feature_attributes
@@ -513,7 +514,6 @@ def project_params_attributes
       :merge_method,
       :initialize_with_sast,
       :initialize_with_readme,
-      :use_sha256_repository,
       :ci_separated_caches,
       :suggestion_commit_message,
       :packages_enabled,
@@ -532,6 +532,12 @@ def custom_import_params
     {}
   end
 
+  def object_format_params
+    return {} unless Gitlab::Utils.to_boolean(params.dig(:project, :use_sha256_repository))
+
+    { repository_object_format: Repository::FORMAT_SHA256 }
+  end
+
   def active_new_project_tab
     project_params[:import_url].present? ? 'import' : 'blank'
   end
diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb
index e4b0fca729af8beb12ac4d71fe4ad188e4fab78c..6f29c72e25af7fce3d42701d2e070a30910b8fec 100644
--- a/app/services/projects/create_service.rb
+++ b/app/services/projects/create_service.rb
@@ -13,11 +13,11 @@ def initialize(user, params)
       @skip_wiki = @params.delete(:skip_wiki)
       @initialize_with_sast = Gitlab::Utils.to_boolean(@params.delete(:initialize_with_sast))
       @initialize_with_readme = Gitlab::Utils.to_boolean(@params.delete(:initialize_with_readme))
-      @use_sha256_repository = Gitlab::Utils.to_boolean(@params.delete(:use_sha256_repository)) && Feature.enabled?(:support_sha256_repositories, user)
       @import_data = @params.delete(:import_data)
       @relations_block = @params.delete(:relations_block)
       @default_branch = @params.delete(:default_branch)
       @readme_template = @params.delete(:readme_template)
+      @repository_object_format = @params.delete(:repository_object_format)
 
       build_topics
     end
@@ -214,7 +214,10 @@ def create_sast_commit
     end
 
     def repository_object_format
-      @use_sha256_repository ? Repository::FORMAT_SHA256 : Repository::FORMAT_SHA1
+      return Repository::FORMAT_SHA1 unless Feature.enabled?(:support_sha256_repositories, current_user)
+      return Repository::FORMAT_SHA256 if @repository_object_format == Repository::FORMAT_SHA256
+
+      Repository::FORMAT_SHA1
     end
 
     def readme_content
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index 1da786c9fc4f9ef75d5f6f06ba4d3b09d87a5490..5a7abf6cde802fbbe46c5fa7466c58a682b1443a 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -814,7 +814,7 @@ def wiki_repo(project)
 
   context 'when SHA256 format is requested' do
     let(:project) { create_project(user, opts) }
-    let(:opts) { super().merge(initialize_with_readme: true, use_sha256_repository: true) }
+    let(:opts) { super().merge(initialize_with_readme: true, repository_object_format: 'sha256') }
 
     before do
       allow(Gitlab::CurrentSettings).to receive(:default_branch_name).and_return('main')