The 26-year-old winger began his career at Chelmsford City before joining Barnet in 2010.
He has agreed a two-year contract at Fratton Park and will officially become a Portsmouth player on July 1.
"It's taken some time to get the deal over the line. Now I'm just excited about getting on the pitch and playing in front of the crowd," he told Portsmouth's official website.
"There were other clubs interested in me, but signing for a side like Pompey is a dream come true. The history of this club is known across the world, so it wasn't really a hard decision.
"Hopefully I can get the crowd onto their feet. I work hard, dribble the ball, get past defenders and try to excite the crowd."
Holmes made 27 appearances for Barnet last season, scoring five goals.