diff --git a/app/models/communication/website/with_git_repository.rb b/app/models/communication/website/with_git_repository.rb
index 02dde76903b9a3171d4efd1b72f3f38d8ab9fb47..c5a12ff05c84b9c14cd64d969b7d96b151be765f 100644
--- a/app/models/communication/website/with_git_repository.rb
+++ b/app/models/communication/website/with_git_repository.rb
@@ -13,6 +13,16 @@ module Communication::Website::WithGitRepository
     @git_repository ||= Git::Repository.new self
   end
 
+  # Synchronisation optimale d'objet indirect
+  def sync_indirect_object_with_git(indirect_object)
+    return unless git_repository.valid?
+    indirect_object.direct_sources.each do |direct_source|
+      add_direct_source_to_sync(direct_source)
+    end
+    git_repository.sync!
+  end
+  handle_asynchronously :sync_indirect_object_with_git, queue: 'default'
+
   # Supprimer tous les git_files qui ne sont pas dans les recursive_dependencies_syncable
   def destroy_obsolete_git_files
     website_git_files.find_each do |git_file|
@@ -37,4 +47,15 @@ module Communication::Website::WithGitRepository
     # Clean website if about was present and changed OR a language was removed
     (saved_change_to_about_id? && about_id_before_last_save.present?) || language_was_removed
   end
+
+  protected
+
+  def add_direct_source_to_sync(direct_source)
+    return unless direct_source.syncable?
+    Communication::Website::GitFile.sync self, direct_source
+    direct_source.recursive_dependencies(syncable_only: true).each do |object|
+      Communication::Website::GitFile.sync self, object
+    end
+    # On ne synchronise pas les références de l'objet direct, car on ne le modifie pas lui.
+  end
 end
diff --git a/app/models/concerns/as_indirect_object.rb b/app/models/concerns/as_indirect_object.rb
index 58859b131206621c37347f3129045ebce9c180d8..460dfd8d4de948b806e895f06c75a84e53b51df5 100644
--- a/app/models/concerns/as_indirect_object.rb
+++ b/app/models/concerns/as_indirect_object.rb
@@ -63,7 +63,9 @@ module AsIndirectObject
   def connect_and_sync_direct_sources
     direct_sources.each do |direct_source|
       direct_source.website.connect self, direct_source
-      direct_source.sync_with_git
+    end
+    websites.each do |website|
+      website.sync_indirect_object_with_git self
     end
   end
 end
\ No newline at end of file