It is likely that you created a git init --bare
repository - this will not work as it is only the git repository and not the working stage. I'm going to set this up as a three machine layout - but it can be run on two or even just one machine.
Machine A (your development machine)
Machine B (your remote repository)
Machine C (your production environment)
(But if you have production, development, and "remote" repository on one machine that's fine too)
When you're ready to push to Machine B (Repo) you commit all your work, stage it just right, then perform a git push
(after doing the remote add, etc) this updates the Bare remote repository with all the changes from your machine since the last push (Think of it as syncing the contents of your .git folder on Machine a with the remote repo)
Since Git only cares about the changes of the contents of your files (and not actually about the files or folders themselves - trust me Git does not care about your files - just the content) it doesn't store files one Machine B like you see on your Machine A "Working Stage" Git places those files in the working stage for you to use and develop against - but Git doesn't care about them - again it cares only about the changes to the contents of the "files" since the last time you committed.
To deploy your code you will need to go to Machine C and clone the repository on Machine B - this will sync the ".git" folder down to that machine and then build the subsequent files/folders based off all the content it's tracked. Once you've cloned this repository you can get future updates via git pull
That's about the jist of it. If you have it all on once computer you could do something like:
~/projects/git_project (Your devel area)
/home/repo/git_project.git ("Remote" repo)
/opt/rails/git_project ("Production" machine)
Having a remote repo is redundant on one machine since you can technically pull and push from
~/projects/git_project
to
/opt/rails/git_project
But just keeping the example in line