Maybe it came too late. Probably it came too late. But if you’re Georgia Tech and you’ve waited three years, you’re thrilled it came at all.

The Yellow Jackets beat No. 5 Louisville 64-58 here Wednesday. It marked their first victory over a ranked team since Jan. 28, 2017, when Josh Pastner was a first-year coach working wonders and his program hadn't settled into mediocrity and landed on probation. Tech has played a bunch of folks close this season — of its eight ACC losses, six were by nine points or fewer — but it hadn't beaten anyone of consequence. Now it has.

And it was, we say for the record, no fluke. The Jackets didn’t trail. They made Louisville look as bad as a No. 5 team has ever looked. They held Jordan Nwora, the ACC’s leading scorer, to two points (against four turnovers). They limited the Cardinals, who arrived at McCamish Pavilion having made 44.9 percent of their 3-pointers in conference play to three treys on 24 tries — 36% off their norm.

» PHOTOS: A celebration at McCamish

And here’s the thing: Tech didn’t induce this horrid shooting by zoning it up and praying the opponent had a bad night. Said Louisville coach Chris Mack: “They played us man-to-man the whole game and we couldn’t score.”

“Great win for our program,” Pastner said, and nobody rose to object. His first season at Tech saw victories over three ranked opponents in the span of 29 days — first North Carolina, then Florida State, then Notre Dame — but there has been nothing of note since. Not a single victory in the ACC tournament. Not even a win against Georgia. Nothing until this.

Said Jose Alvardo, who scored 18 points and played a tremendous two-way game: “I’m just so proud of my guys.”

Nwora is 6-foot-8, technically a small forward. He was pestered for much of the night by Alvarado, who’s eight inches shorter. Mack was so flustered by Nwora’s absence of aggression that his first substitute was for the guy who might be the ACC player of the year.

Said Mack: “In the course of this press conference, I’m going to talk about our lack of toughness and our lack of execution and all the things that plagued us, but I don’t want that to be misconstrued. I thought Josh’s team was ready to play, excited to play, and they took the fight to us.”

Not to say you could see anything good coming for a program that has lately known so much bad, but you sort of could this night. The Cardinals hadn’t lost since Jan. 4, but they trailed at the half in three of their past six games. They allowed Tech to lead for 25:24 of the Jan. 22 meeting in the ’Ville. In their last outing, they’d allowed Virginia, which averages 56.5 points, to score 73. And let’s face it: Nothing about facing 11-13 Georgia Tech again was apt to induce the Cards to snap to attention.

By the time Louisville got interested, it trailed 12-2. Alvarado sank two quick 3’s, prompting a Louisville timeout. (Said Mack: “The first four minutes, we looked like zombies.”) At the under-12 TV break, the nation’s No. 5 team had managed five points and trailed 16-5.

The Jackets couldn’t pull away, but it took Louisville the longest time to draw near. Down four inside the final nine minutes, the Cards managed this possession of epic awfulness — air ball on a 3-point try, air ball on a 2-point try, then two missed foul shots. Then Michael Devoe, Tech’s leading scorer on the season, made a 3-pointer, his first basket of the night, to make the score 46-39. Four minutes later, he would complete a driving 3-point play — a called bit of motion after a Pastner timeout — to push a one-point lead back to four.

Tech center James Banks, who scored 10 points, fouled out with 3:57 left. With 1:37 left, Moses Wright missed from the lane with the lead at two. Louisville broke quickly. David Johnson rose for the tying layup. The backtracking Wright slapped the shot off the backboard. It looked like a goaltend as it happened, though the initial call was to play on. Then referee Jamie Luckie blew his whistle and signaled goaltending. Then he walked to the scorer’s table.

Said Mack: “I thought Jamie Luckie did a great job. He called goaltend specifically so he could go to the monitor. That’s a heck of an official who can do that.”

After much video consultation, the ruling came: No goaltend. Tech ball. Whew.

Stationed in the high post against Louisville’s zone, Wright scored to make the score 55-51. Louisville hoisted another shot that missed everything. Devoe lost the ball in backcourt. Johnson made two free throws. When Jordan Usher missed a free throw with 13.5 seconds left, the Cardinals were again within two. To cap a thoroughly miserable night for the visitors, Lamarr Kimble — he goes by his nickname, which is Fresh — drove the lane and dribbled the ball off his leg. Tech had held.

Said Pastner: “Our record could be so much different. We’ve had so many games we could have won. ... We had a lot that you’re right there. A lot of times teams can have (those losses) and they just tank.”

One victory, however sweet, doesn’t put the still-sub-.500 Jackets anywhere near the NCAA tournament bubble. Still, six regular-season games remain, and none will come against a team as good as Louisville is — most nights, anyway. Said Pastner of the Cards: “It wouldn’t surprise me for them to be here (meaning at Mercedes-Benz Stadium) in April, possibly cutting down the nets.”

Someone asked if, over those frantic final minutes, Pastner told himself this would be just another in a series of narrow losses. He smiled and said: “We’ve played well and lost some close games. ... Sometimes you just need a lucky break. It’s a make-or-miss game, and sometimes you need the ball to bounce your way.”

Maybe, probably, this result came too late to change the course of Tech’s season. But it came, finally and mercifully. Three years, two weeks and a day had passed since a Georgia Tech result caught anyone’s attention. That ended Wednesday.