In order to ignore some files/directories, you have to create a .gitignore file ( http://kernel.osuosl.org/pub/software/scm/git/docs/v1.6.0.6/gitignore.html )
Depends on your requirements.
We mostly use C++ & SVN, but the idea should be the same for C# & git. We usually don't include debug/release & bin folders and .suo/.user files. We only include source/header files, resource files, data files and projects/solutions.
These are enough (as far as i can remember) for the others to checkout the project & compile themselves.
If you want others to be able to checkout the executables, you should add your bin folder too. But this causes a lot of conflicts between developers if they commit their bin folders because everyone is working on something else hence the contents of bin frequently changes.
As the other answers say you do not want to include bin folders, temp files etc.
The rule of thumb I use is to try to only check in code that is edited by humans, and everything else should be generated when you build the code. Obviously binaries get built for you but also things like autogenerated code should be created at build time. This isn't always practical, sometimes it is a lot easier to check in, say, a proxy to a web service to save having to build it everytime you recompile. You have to make compromises sometimes.
You should also avoid checking in any kind of local settings files generated by VS (e.g. .suo files). But DO check in project wide settings such as custom dictionaries and the like.
whatever can be generated/compiled out from you source code, don't source control it.