I've largely given up on trying to "catch cheaters." At this point, either a student wants to really learn the information or they don't.
What are you gonna do? Cheat your way to a programming degree and then... bomb at some programming job because you don't know how to actually code or think?
I try to set students up for success, w/clear & obvious requirements (e.g. test suites for project grading) and then appeal to their sense of reciprocity: I'm trying to be cool to you, please be cool w/me & don't cheat. If you feel like you need to cheat to pass, come talk to me so we can address the material instead.
Regurgitating was never a great way to measure understanding anyway. In an ideal world, I'd have the time to sit down with each student and have a 10 minute talk, and get a sense of how well they understand the material, like the old english system.