diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index d689742..4462eac 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -5,7 +5,7 @@ class ApplicationController < ActionController::Base
 	include RenderExpand
 	include RenderHelper
 	include ControllerRescueHandler
-	include LaboratoryHelper
+	# include LaboratoryHelper
 	include GitHelper
 	include LoggerHelper
 	include LoginHelper
diff --git a/app/forms/gitea/user_form.rb b/app/forms/gitea/user_form.rb
index f673fef..ac94337 100644
--- a/app/forms/gitea/user_form.rb
+++ b/app/forms/gitea/user_form.rb
@@ -1,12 +1,13 @@
 class Gitea::UserForm
   include ActiveModel::Model
-  EMAIL_REGEX = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
+  EMAIL_REGEX = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_\-.]+(\.[a-zA-Z0-9_-]+)+$/
 
   include ActiveModel::Model
   attr_accessor :username, :email, :password
 
   validates :username, presence: true
   validates :email, presence: true, format: { with: EMAIL_REGEX, multiline: true }
+
   validates :password, presence: true
 
   validate :check_username, :check_email
diff --git a/app/jobs/sync_forge_job.rb b/app/jobs/sync_forge_job.rb
index 2559976..5766cf5 100644
--- a/app/jobs/sync_forge_job.rb
+++ b/app/jobs/sync_forge_job.rb
@@ -6,68 +6,36 @@ class SyncForgeJob < ApplicationJob
     Rails.logger.info("#######______sync__start__########")
     sync_params = ActiveSupport::JSON.decode(sync_params)
 
-    keys_to_delete = %w(id created_on updated_on platform)
-    keys_other_delete = %w(id created_at updated_at user_id)
     all_target_params = sync_params["target_params"]
     roles_params = sync_params["roles"]
     user_params = sync_params["user_params"]["user_params"]
     owner_extension_params = sync_params["user_params"]["user_extension_params"]
     platform = sync_params["platform"]
-    user_params = user_params["user"] if old_version_source.include?(platform)   #trustie上需要
 
     if user_params.present?
-      owner_params = user_params&.except!(*keys_to_delete)
-      user_password = random_password
-      if User.exists?(login: owner_params["login"])
-        new_user = User.find_by(login: owner_params["login"])
-      else
-        new_user = User.new(owner_params.merge(platform: platform))
-        interactor = Gitea::RegisterInteractor.call({username: owner_params["login"], email: owner_params["mail"], password: user_password})
-        if interactor.success?
-          gitea_user = interactor.result
-          new_user.gitea_uid = gitea_user['id']
-        else
-          response = Gitea::User::GetTokenService.new("#{owner_params["login"]}").call
-          if response.status == 200
-            user_id = JSON.parse(response.body)["id"]
-            new_user.gitea_uid = user_id
-          else
-            new_user.gitea_uid = ""
-          end
-        end
-        if new_user.gitea_uid.present?
-          result = Gitea::User::GenerateTokenService.new(owner_params["login"], user_password).call
-          new_user.gitea_token = result['sha1']
-        end
-
-        if new_user.save!
-          owner_extension_params = owner_extension_params["user_extensions"] if old_version_source.include?(platform)  #trustie上需要
-          if owner_extension_params.present?
-            owner_extension_params = owner_extension_params&.except!(*keys_other_delete).merge(user_id: new_user.id)
-            UserExtension.create!(owner_extension_params)
-          end
-        end
-      end
+      new_user = sync_user(user_params, owner_extension_params,platform)
       if new_user.present?
         ActiveRecord::Base.transaction do
           begin
             Watcher&.where(user_id: user_params["id"]).update_all(user_id: new_user.id)
             ProjectTrend&.where(user_id: user_params["id"]).update_all(user_id: new_user.id)
             sync_roles(roles_params, platform)
-            all_target_params.each do |project|
-              target_params = {
-                project_params: project["project_params"],
-                member_params: project["member_params"],
-                issue_params: project["issue_params"],
-                versions_params: project["versions_params"],
-                project_score_params: project["project_score_params"],
-                pull_request_params: project["pull_request_params"],
-                repo_params: project["repo_params"],
-                commit_params: project["commit_params"],
-                watchers_params: project["watchers_params"],
-                praise_trends_params: project["praise_trends_params"]
-              }
-              sync_projects(new_user, user_params["id"],target_params, platform)
+            if all_target_params.present?
+              all_target_params.each do |project|
+                target_params = {
+                  project_params: project["project_params"],
+                  member_params: project["member_params"],
+                  issue_params: project["issue_params"],
+                  versions_params: project["versions_params"],
+                  project_score_params: project["project_score_params"],
+                  pull_request_params: project["pull_request_params"],
+                  repo_params: project["repo_params"],
+                  commit_params: project["commit_params"],
+                  watchers_params: project["watchers_params"],
+                  praise_trends_params: project["praise_trends_params"]
+                }
+                sync_projects(new_user, user_params["id"],target_params, platform)
+              end
             end
           rescue Exception => e
             Rails.logger.info("#######_________user__sync__failed__#########{e}")
@@ -86,6 +54,49 @@ class SyncForgeJob < ApplicationJob
 
   private
 
+  def sync_user(owner_params,owner_extension_params,platform)
+    Rails.logger.info("#######______sync_user_start__########")
+    keys_other_delete = %w(id created_at updated_at user_id)
+    keys_to_delete = %w(id created_on updated_on platform)
+    owner_params = owner_params["user"] if old_version_source.include?(platform)   #trustie上需要
+
+    owner_params = owner_params&.except!(*keys_to_delete)
+    user_password = random_password
+    if User.exists?(login: owner_params["login"])
+      new_user = User.find_by(login: owner_params["login"])
+    else
+      new_user = User.new(owner_params.merge(platform: platform))
+      interactor = Gitea::RegisterInteractor.call({username: owner_params["login"], email: owner_params["mail"], password: user_password})
+      if interactor.success?
+        gitea_user = interactor.result
+        new_user.gitea_uid = gitea_user['id']
+      else
+        response = Gitea::User::GetTokenService.new("#{owner_params["login"]}").call
+        if response.status == 200
+          user_id = JSON.parse(response.body)["id"]
+          new_user.gitea_uid = user_id
+        else
+          new_user.gitea_uid = ""
+        end
+      end
+      if new_user.gitea_uid.present?
+        result = Gitea::User::GenerateTokenService.new(owner_params["login"], user_password).call
+        new_user.gitea_token = result['sha1']
+      end
+
+      if new_user.save!
+        if owner_extension_params.present?
+          owner_extension_params = owner_extension_params["user_extensions"] if old_version_source.include?(platform)  #trustie上需要
+
+          owner_extension_params = owner_extension_params&.except!(*keys_other_delete).merge(user_id: new_user.id)
+          UserExtension.create!(owner_extension_params)
+        end
+      end
+    end
+    Rails.logger.info("#######______sync_user_end__########")
+    new_user
+  end
+
   def random_password
     [*('a'..'z'),*(0..9),*('A'..'Z')].shuffle[0..8].join
   end
@@ -108,16 +119,12 @@ class SyncForgeJob < ApplicationJob
         praise_trends_params = targets[:praise_trends_params]
         watchers_params = targets[:watchers_params]
 
-        if old_version_source.include?(platform) #trustie上需要
-          project = project["project"]
-          repo_params = repo_params["gitlab"]
-        end
-
         if project.present?
-          unless Project.exists?(identifier: project["identifier"])
+          project = project["project"] if old_version_source.include?(platform)
+          unless Project.exists?(user_id: new_user.id, identifier: project["identifier"])
             new_project = Project.new(project&.except!(*keys_to_delete).merge(user_id: new_user.id))
             if new_project.save!
-              if repo_params.present?
+              unless Repository.exists?(user_id: new_user.id,identifier: project["identifier"]) || repo_params.blank?
                 repository_params = {
                   hidden: project["is_public"],
                   user_id: new_user.id,
@@ -127,10 +134,11 @@ class SyncForgeJob < ApplicationJob
                 # SyncRepositoryJob.perform_later(new_user.login, project["identifier"])  #暂时不迁移版本库
               end
 
-              project_score = project_score["project_score"] if old_version_source.include?(platform) #trustie上需要
               if project_score.present?
+                project_score = project_score["project_score"] if old_version_source.include?(platform) #trustie上需要
                 ProjectScore.create!(project_score&.except!(*score_to_delete).merge(project_id: new_project.id))
               end
+
               sync_user_issues(new_project.id, new_user.id,old_user_id,issue_params, platform)
               sync_members(new_project.id, member_params,platform)
               sync_commits(new_project.id,new_project.gpid, commit_params,platform)
@@ -157,8 +165,11 @@ class SyncForgeJob < ApplicationJob
         if watchers_params.present?
           Watcher.transaction do
             watchers_params.each do |r|
-              r = r["watcher"] if old_version_source.include?(platform)  #trustie上需要
-              Watcher.create!(r&.except!(*roles_other_delete).merge(watchable_id: project_id)) if r.present?
+              if r.present?
+                r = r["watcher"] if old_version_source.include?(platform)
+                new_wathcer = Watcher.new(r&.except!(*roles_other_delete).merge(watchable_id: project_id))
+                new_wathcer.save(:validate => false)
+              end
             end
           end
         end
@@ -180,8 +191,11 @@ class SyncForgeJob < ApplicationJob
         if praises_params.present?
           PraiseTread.transaction do
             praises_params.each do |r|
-              r = r["praise_tread"] if old_version_source.include?(platform)  #trustie上需要
-              PraiseTread.create!(r&.except!(*roles_other_delete).merge(praise_tread_object_id: project_id)) if r.present?
+              if r.present?
+                r = r["praise_tread"] if old_version_source.include?(platform)  #trustie上需要
+                new_tread = PraiseTread.new(r&.except!(*roles_other_delete).merge(praise_tread_object_id: project_id))
+                new_tread.save(:validate => false)
+              end
             end
           end
         end
@@ -203,9 +217,11 @@ class SyncForgeJob < ApplicationJob
         if roles.present?
           Role.transaction do
             roles.each do |r|
-              r = r["role"] if old_version_source.include?(platform)  #trustie上需要
-              unless Role.exists?(name: r["name"])
-                Role.create!(r&.except!(*roles_other_delete)) if r.present?
+              if r.present?
+                r = r["role"] if old_version_source.include?(platform)  #trustie上需要
+                unless Role.exists?(name: r["name"])
+                  Role.create!(r&.except!(*roles_other_delete))
+                end
               end
             end
           end
@@ -223,8 +239,6 @@ class SyncForgeJob < ApplicationJob
   def sync_members(project_id,members_params,platform)
     Rails.logger.info("#######______sync_members_start__#######")
     member_to_delete = %w(id created_on user_id project_id)
-    member_user_delete = %w(id created_on updated_on platform)
-    keys_other_delete = %w(id created_at updated_at user_id)
     ActiveRecord::Base.transaction do
       begin
         if members_params.present?
@@ -234,34 +248,16 @@ class SyncForgeJob < ApplicationJob
             member_user_exten = m["member_extension"]
             member_roles = m["member_roles"]
             member_issues = m["member_issues"]
-            member_user = member_user["user"] if old_version_source.include?(platform) #trustie上需要
             if member_user.present?
-
-              unless User.exists?(login: member_user["login"])
-                u = User.new(member_user&.except!(*member_user_delete).merge(platform: platform))
-                user_password = random_password
-                interactor = Gitea::RegisterInteractor.call({username: member_user["login"], email: member_user["mail"], password: user_password})
-                if interactor.success?
-                  gitea_user = interactor.result
-                  result = Gitea::User::GenerateTokenService.new(member_user["login"], user_password).call
-                  u.gitea_token = result['sha1']
-                  u.gitea_uid = gitea_user['id']
-                  if u.save!
-                    member_user_exten = member_user_exten["user_extensions"] if old_version_source.include?(platform) #trustie上需要
-                    if member_user_exten.present?
-                      UserExtension.create!(member_user_exten&.except!(*keys_other_delete).merge(user_id: u.id))
-                    end
+              u = sync_user(member_user,member_user_exten, platform)
+              if u.present? && member.present?
+                member = member["member"] if old_version_source.include?(platform) #trustie上需要
+                unless Member.exists?(user_id: u.id, project_id: project_id)
+                  new_member = Member.new(member&.except!(*member_to_delete).merge(project_id: project_id, user_id: u.id))
+                  if new_member.save!
+                    sync_user_issues(project_id, u.id, member["user_id"],member_issues, platform)
+                    sync_member_roles(new_member.id, member_roles,platform)
                   end
-                  member = member["member"] if old_version_source.include?(platform) #trustie上需要
-                  if member.present?
-                    new_member = Member.new(member&.except!(*member_to_delete).merge(project_id: project_id, user_id: u.id))
-                    if new_member.save!
-                      sync_user_issues(project_id, u.id, member["user_id"],member_issues, platform)
-                      sync_member_roles(new_member.id, member_roles,platform)
-                    end
-                  end
-                else
-                  raise Error, "gitea的项目创建失败"
                 end
               end
             end
@@ -283,8 +279,8 @@ class SyncForgeJob < ApplicationJob
       if members.present?
         MemberRole.transaction do
           members.each do |m|
-            m = m["member_role"] if old_version_source.include?(platform) #trustie上需要
             if m.present?
+              m = m["member_role"] if old_version_source.include?(platform) #trustie上需要
               role_id = Role.select(:id,:position)&.where(position: m["role_id"])&.first&.id
               MemberRole.create!(m&.except!(*member_role_delete).merge(member_id: member_id, role_id: role_id)) if m.present?
             end
@@ -310,8 +306,9 @@ class SyncForgeJob < ApplicationJob
             jours_params = is_params["jours_params"]
             commit_params = is_params["commit_params"]
             Issue.select(:id, :assigned_to_id).where(assigned_to_id: old_user_id)&.update_all(assigned_to_id: new_user_id)
-            issue_params = issue_params["issue"] if old_version_source.include?(platform) #trustie上需要
+
             if issue_params.present?
+              issue_params = issue_params["issue"] if old_version_source.include?(platform) #trustie上需要
               assgin_user = issue_params["assigned_to_id"]
               if issue_params["assigned_to_id"].to_i == old_user_id
                 assgin_user = new_user_id
@@ -344,8 +341,11 @@ class SyncForgeJob < ApplicationJob
         if jours_params.present?
           Journal.transaction do
             jours_params.each do |i|
-              i = i["journal"] if old_version_source.include?(platform) #trustie上需要
-              Journal.create!(i&.except!(*jour_to_delete).merge(journalized_id: issue_id, user_id: user_id)) if i.present?
+              if i.present?
+                i = i["journal"] if old_version_source.include?(platform) #trustie上需要
+                Journal.create!(i&.except!(*jour_to_delete).merge(journalized_id: issue_id, user_id: user_id))
+              end
+
             end
           end
         end
@@ -367,8 +367,11 @@ class SyncForgeJob < ApplicationJob
         if commit_params.present?
           CommitIssue.transaction do
             commit_params.each do |i|
-              i = i["commit_issues"] if old_version_source.include?(platform) #trustie上需要
-              CommitIssue.create!(i&.except!(*commit_to_delete).merge(issue_id: issue_id, project_id: project_id)) if i.present?
+              if i.present?
+                i = i["commit_issues"] if old_version_source.include?(platform) #trustie上需要
+                CommitIssue.create!(i&.except!(*commit_to_delete).merge(issue_id: issue_id, project_id: project_id))
+              end
+
             end
           end
         end
@@ -390,8 +393,11 @@ class SyncForgeJob < ApplicationJob
         if pull_params.present?
           PullRequest.transaction do
             pull_params.each do |i|
-              i = i["pull_request"] if old_version_source.include?(platform) #trustie上需要
-              PullRequest.create!(i&.except!(*commit_to_delete).merge(user_id: user_id, project_id: project_id)) if i.present?
+              if i.present?
+                i = i["pull_request"] if old_version_source.include?(platform) #trustie上需要
+                PullRequest.create!(i&.except!(*commit_to_delete).merge(user_id: user_id, project_id: project_id))
+              end
+
             end
           end
         end
@@ -412,8 +418,11 @@ class SyncForgeJob < ApplicationJob
         if commit_params.present?
           Commit.transaction do
             commit_params.each do |i|
-              i = i["commit"] if old_version_source.include?(platform) #trustie上需要
-              Commit.create!(i&.except!(*commit_to_delete).merge(repository_id: repository_id, project_id: project_id)) if i.present?
+              if i.present?
+                i = i["commit"] if old_version_source.include?(platform) #trustie上需要
+                Commit.create!(i&.except!(*commit_to_delete).merge(repository_id: repository_id, project_id: project_id))
+              end
+
             end
           end
         end
@@ -434,8 +443,10 @@ class SyncForgeJob < ApplicationJob
         if version_params.present?
           Version.transaction do
             version_params.each do |i|
-              i = i["version"] if old_version_source.include?(platform) #trustie上需要
-              Version.create!(i&.except!(*version_to_delete).merge(user_id: new_user_id, project_id: project_id)) if i.present?
+              if i.present?
+                i = i["version"] if old_version_source.include?(platform) #trustie上需要
+                Version.create!(i&.except!(*version_to_delete).merge(user_id: new_user_id, project_id: project_id))
+              end
             end
           end
         end
diff --git a/app/models/searchable/dependents/user.rb b/app/models/searchable/dependents/user.rb
index e77bc9a..35b3719 100644
--- a/app/models/searchable/dependents/user.rb
+++ b/app/models/searchable/dependents/user.rb
@@ -8,16 +8,16 @@ module Searchable::Dependents::User
   private
 
   def check_searchable_dependents
-    if firstname_previously_changed? || lastname_previously_changed? || user_extension&.school_id_previously_changed?
-      # reindex shixun
-      created_shixuns.each(&:reindex)
-
-      # reindex course
-      manage_courses.each(&:reindex)
-
-      # reindex subject
-      created_subjects.each(&:reindex)
-      subjects.each(&:reindex)
-    end
+    # if firstname_previously_changed? || lastname_previously_changed? || user_extension&.school_id_previously_changed?
+    #   # reindex shixun
+    #   created_shixuns.each(&:reindex)
+    #
+    #   # reindex course
+    #   manage_courses.each(&:reindex)
+    #
+    #   # reindex subject
+    #   created_subjects.each(&:reindex)
+    #   subjects.each(&:reindex)
+    # end
   end
 end
\ No newline at end of file
diff --git a/app/models/user.rb b/app/models/user.rb
index af0f691..e8c0fb4 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -3,7 +3,7 @@ class User < ApplicationRecord
   include Likeable
   include BaseModel
   include ProjectOperable
-  include Searchable::Dependents::User
+  # include Searchable::Dependents::User
 
   # Account statuses
   STATUS_ANONYMOUS  = 0
diff --git a/app/services/repositories/create_service.rb b/app/services/repositories/create_service.rb
index 674b7cb..25511b8 100644
--- a/app/services/repositories/create_service.rb
+++ b/app/services/repositories/create_service.rb
@@ -49,8 +49,8 @@ class Repositories::CreateService < ApplicationService
     hash = {
       name: params[:identifier],
       private: !params[:hidden],
-      readme: "ReadMe"
-      # "auto_init": true,
+      # readme: "ReadMe",
+      "auto_init": true,
       # "description": "string",
       # "gitignores": "string",
       # "issue_labels": "string",