我有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
答案 0 :(得分:0)
index.lock
可能是您唯一需要担心的文件。由于您正在使用互斥锁来同步您的操作,因此此代码应该没问题。
Git只有在需要对index.lock
进行一段时间的单独控制时才能真正创建index
文件(并防止其他Git进程破坏东西)。这只会在拉动完成时发生。