I have a character that moves alright with the rig, except the hair.
Hair is not particles.
Hair is done with curves, which I converted to a mesh. Each curve got transformed into a mesh, and I joined all the separate “hair strand” meshes with ctrl+J.
I have tried to parent the joined mesh that is hair, to the rig with automatic weights. It didn’t move well.
I tried weight painting the hair. With different weights, like entirely red, or entirely blue, or entirely green.
Best it moves is with entirely red for the bone that moves the head I believe.
But when I move the rig, the ponytail gets elongated. The rest of the hair behaves decently I guess.
Autoweights don’t work well on objects composed of multiple, separate meshes, like you have here.
It is probably because the parts that are getting stretched are also weighted to some other bone. Select one of the stretched vertices in edit or weight paint mode (weight paint mode is easier to see, just need to enable vertex masking) and look on sidebar/item/vertex weights to see all of the bones to which that vertex is weighted. For simple use, it should probably be weighted to the head bone and only the head bone.
There is an outside possibility that there is some other cause, like a different modifier.