Sounds like a lot of fun.
CentOS or Ubuntu will do what you want. Both can satisfy your application software requirements. I'm a CentOS guy myself, but then I'm also a "don't install X Windows" kind of guy, too. If you're looking for a nice GUI for administration you'd probably like Ubuntu.
I'd do my file sharing for accessing the server's filesytem with Samba. Samba serves the SMB protocol (native filesharing protocol for Windows) and Mac OS has an SMB client built-in. There are some nice HOWTO documents out there on setting up Samba (example, Basic Samba Setup in Ubuntu 9.10 Karmic Koala ). The Mac OS machines have NFS clients built in, so you could use the NFS protocol in lieu of Samba, but while Windows 7 can be an NFS client it really "wants" to use SMB out-of-the-box.
You'll have command-line access to the Linux machine through SSH. I'd use PuTTY on Windows, but there are many SSH clients out there. Mac OS has OpenSSH built-in, I believe.
You can "share" the printer from the Windows 7 machine with the Mac machines either using SMB, or by installing the "Print Services for Unix", which will allow the Windows 7 machine to "export" the printer as an LPR port. You'll "share" the printer on the Windows 7 machine and the LPR queue name will be the same as the "share name". I've never "connected" to printers on a Windows machine from any version of Mac OS. I'd guess that LPR would be the cleanest way to go.
Using the DHCP server on the LinkSys router is fine, but I'd give the Linux box a static IP address. If the Windows 7 box is going to be "sharing" printers I'd probably give it a static IP address, too.
To get access to your environment from outside you're going to want to port-forward the appropriate ports on your router to the LAN IP addresses and ports of the right machines. If you want SSH access from the outside, then forward port 22, etc. I can't tell you about exposing Git, because I don't know what ports / protocols it uses, but there are very likely guides out there on the 'net about how to do it.
You might want to get a Dynamic DNS account if you don't have a static IP address at home. I use Dyndns.org, but there are several out there. You'd run a piece of software on one of your computers to update their records of your IP address periodically. If you're looking for easy configuration I'd get their Windows-based "official" updater client and run it on the Windows 7 box. If the Windows 7 box will only be turned on periodically you can get one that runs under Linux, too, but I doubt the setup will be as "friendly" as the Windows client.
I'll see how other people answer you and edit as necessary if other good points come up. I don't know where you are in terms of familiarity with all the OS's involved. Be prepared for some learning curve, but everything you want to do is pretty much "mainstream" type usage now.
You should think about some kind of backup mechanism for your documents / code. There are a slew of offerings out there, both locally-hosted and online. I'm assuming that you'd "dump" your various applications (database server, Git repository, etc) to files and backup these files, but it's really so wide-open as to how you might do this that I'm not even going to try and speak to it. My main point would be not to neglect backup as a last-minute thing. It's your livelihood, so spend a little bit of time / money and get something that provides off-site and offline backup storage. (Even some large flash drives or a couple of external hard disk drives that you rotate to a trusted off-site location periodically is better than nothing.) Having had a friend go thru a house fire and have a lot of his personal computer equipment burn up (as well as having Customers go thru fires and thefts) I've really gained an appreciation for good backup.