code: func (o *FilterProcessScanner) Init() error {
  	tracerx.Printf("Initialize filter-process")
  	reqVer := "version=2"
  
  	initMsg, err := o.pl.readPacketText()
  	if err != nil {
  		return errors.Wrap(err, "reading filter-process initialization")
  	}
  	if initMsg != "git-filter-client" {
  		return fmt.Errorf("invalid filter-process pkt-line welcome message: %s", initMsg)
  	}
  
  	supVers, err := o.pl.readPacketList()
  	if err != nil {
  		return errors.Wrap(err, "reading filter-process versions")
  	}
  	if !isStringInSlice(supVers, reqVer) {
  		return fmt.Errorf("filter '%s' not supported (your Git supports: %s)", reqVer, supVers)
  	}
  
  	err = o.pl.writePacketList([]string{"git-filter-server", reqVer})
  	if err != nil {
  		return errors.Wrap(err, "writing filter-process initialization failed")
  	}
  	return nil
  }
docs: // Init initializes the filter and ACKs back and forth between the Git LFS
  // subprocess and the Git parent process that each is a git-filter-server and
  // client respectively.
  //
  // If either side wrote an invalid sequence of data, or did not meet
  // expectations, an error will be returned. If the filter type is not supported,
  // an error will be returned. If the pkt-line welcome message was invalid, an
  // error will be returned.
  //
  // If there was an error reading or writing any of the packets below, an error
  // will be returned.