处理Local Git Repo中的多次拉动

时间:2016-11-17 06:27:51

标签: ruby git synchronization sinatra

我有Sinatra服务,通过在命中时执行git pull来更新本地git repo。由于它是一个写入,我希望一次只能发生一个git pull。如何有效地检测pull是否已经发生?目前我只是检查index.lock目录中是否存在.git文件。

if @file_obj.exists? "#{@data_dir}/.git/index.lock"
    @log.info('********* LOCKED **********')
else
  MUTEX.synchronize do
    @log.info('********* Inside Sync **********')
    @executor.run(git_pull_command, in: @data_dir)
  end
end

1 个答案:

答案 0 :(得分:0)

index.lock可能是您唯一需要担心的文件。由于您正在使用互斥锁来同步您的操作,因此此代码应该没问题。

Git只有在需要对index.lock进行一段时间的单独控制时才能真正创建index文件(并防止其他Git进程破坏东西)。这只会在拉动完成时发生。