diff --git a/config/feature_flags/development/log_discrepancies_repository_info_for_repository_size.yml b/config/feature_flags/development/log_discrepancies_repository_info_for_repository_size.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ea63d86eb008e4216cc90cfcf415e522550fb4c1
--- /dev/null
+++ b/config/feature_flags/development/log_discrepancies_repository_info_for_repository_size.yml
@@ -0,0 +1,8 @@
+---
+name: log_discrepancies_repository_info_for_repository_size
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127050
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/419300
+milestone: '16.3'
+type: development
+group: group::source code
+default_enabled: false
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index 71be986882ce36caadb3a539bfe44b2d22e637bc..b573bbbc1f5f35c66d4ab8197892f2d6ee66a631 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -338,13 +338,24 @@ def archive_version_path
       # Return repo size in megabytes
       def size
         if Feature.enabled?(:use_repository_info_for_repository_size)
-          bytes = gitaly_repository_client.repository_info.size
-
-          (bytes.to_f / 1024 / 1024).round(2)
+          repository_info_size_megabytes
         else
           kilobytes = gitaly_repository_client.repository_size
+          repository_size_megabytes = (kilobytes.to_f / 1024).round(2)
+
+          if Feature.enabled?(:log_discrepancies_repository_info_for_repository_size)
+            repository_info_megabytes = repository_info_size_megabytes
+            if repository_info_megabytes != repository_size_megabytes
+              Gitlab::AppJsonLogger.info(
+                message: "Discrepancy between RepositorySize and RepositoryInfo",
+                repository_size_megabytes: repository_size_megabytes,
+                repository_info_megabytes: repository_info_megabytes,
+                project_id: container.id
+              )
+            end
+          end
 
-          (kilobytes.to_f / 1024).round(2)
+          repository_size_megabytes
         end
       end
 
@@ -1166,6 +1177,12 @@ def replicas
 
       private
 
+      def repository_info_size_megabytes
+        bytes = gitaly_repository_client.repository_info.size
+
+        Gitlab::Utils.bytes_to_megabytes(bytes).round(2)
+      end
+
       def empty_diff_stats
         Gitlab::Git::DiffStatsCollection.new([])
       end
diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb
index 9ce8a674146738b1d66a7f5c786160cfe96b12db..9c7f393490e4208a513d8910301f993385914d82 100644
--- a/spec/lib/gitlab/git/repository_spec.rb
+++ b/spec/lib/gitlab/git/repository_spec.rb
@@ -306,6 +306,36 @@
 
         subject
       end
+
+      context 'when repository_size does not match repository_info' do
+        before do
+          allow(repository.gitaly_repository_client).to receive(:repository_size).and_return(0)
+          allow(repository.gitaly_repository_client).to receive(:repository_info).and_return(
+            Gitaly::RepositoryInfoResponse.new(size: 1.megabytes)
+          )
+        end
+
+        it 'logs the difference' do
+          expect(Gitlab::AppJsonLogger).to receive(:info).with(
+            message: "Discrepancy between RepositorySize and RepositoryInfo",
+            repository_size_megabytes: 0.0,
+            repository_info_megabytes: 1.0,
+            project_id: project.id
+          ).and_call_original
+          subject
+        end
+
+        context 'when the log_discrepancies_repository_info_for_repository_size flag is disabled' do
+          before do
+            stub_feature_flags(log_discrepancies_repository_info_for_repository_size: false)
+          end
+
+          it 'does not log' do
+            expect(Gitlab::AppJsonLogger).not_to receive(:info)
+            subject
+          end
+        end
+      end
     end
   end