Financial terms of the deal, pending a physical, were not released, but Fox Sports reported that it was worth $31 million.
The 31-year-old Span batted .301 in 61 games for the Washington Nationals in 2015 but was slowed by a injury and had an offseason operation on his left hip, his third surgery in the past 13 months.
The Giants are expected to use Span in center field next season and move Angel Pagan to left.
In eight major league seasons, Span is a .287 hitter with 37 home runs, 336 RBIs and 152 stolen bases. He was with the Minnesota Twins for five years before going to the Nationals in 2013.