Makgaba, who finished second in the 2012 race, was the first runner across the line in 65 minutes and 28 seconds (65:28), with Tsoane closely behind in 66:14 seconds.
Precious Mashele finished third in 67:21 seconds.
Running in hot and windy conditions, Makgaba said he used the race to prepare for the Two Oceans marathon in April and was happy with his performance.
“The course was tough today and I’m very happy to have won the race,” Makgaba said after the race.
“The first 10km’s went by slow because it was very hilly and I started to push hard from there.
“Kgosi challenged me a lot through the race and really gave me a tough time, but I’m happy because he made me push myself so I can measure my fitness before the Two Oceans marathon and I believe I’m ready for it now.”
In the women’s race, Thabitha Tsatsa powered to victory in 82:55 seconds, two-time Olympian Zola Pieterse (Budd) came in second while Prudence Zwane finished third.
Two Oceans half marathon champion Stephen Mokoka took the honours in the 10km men’s race, finishing in a time of 30:06 seconds, while Rutendo Nyahora won the women’s race in 34:30 seconds.
Mokoka said he wanted to break the course record of 29:35 seconds, set by Tsoane in last year’s race, but was slowed down by the many uphills throughout the course.
Mokoka set the course record for the 21km men’s race in 2012, clocking a time of 64:35.
“I was targeting the course record today and kept the record pace up to the first 5km’s,” Mokoka said after the race.
“From that point the course changed a bit, it had a lot of hills and it became very difficult for me to run on my own.
“But I pushed in the last 2km’s and I managed to pick up my speed. It was a nice experience.”