code: def store_file(self, path, data, fast_lane=True):
          
  
          self.stream_files_lock.acquire()
          try:
  
              full_path = os.path.normpath(self.temp_path + '/store-blob/' + self.job_id + '/' + path)
              if not os.path.exists(os.path.dirname(full_path)):
                  os.makedirs(os.path.dirname(full_path))
  
              if hasattr(data, 'encode'):
                  data = data.encode("utf-8", 'replace')
  
              already_set = path in self.store_files and self.store_files[path] == data
  
              if is_debug3():
                  sys.__stderr__.write('git:store_file(%s, %s, %s), already_set=%s\n'
                                       % (str(path), str(data)[0:180], str(fast_lane), str(already_set)))
  
              if already_set:
                  return
  
              open(full_path, 'wb').write(data)
              self.store_files[path] = data
  
              if self.client.online is not False:
                  self.client.send({'type': 'store-blob', 'path': path, 'data': data}, channel='' if fast_lane else 'files')
          finally:
              self.stream_files_lock.release()
docs: Store the file in temp folder and stream it to server if online. 
          
          This makes sure that we have all newest data of this file on the server directly. 
          
          This method always overwrites the content of path. If you want to append always the content, 
          use Git.stream_file() instead.
          
          At the end of the job, the content the server received is stored as git blob on the server. It is then committed 
          locally and pushed. Git detects that the server already has the version (through the continuous streaming)
          and won't push it again.