Git – setting up a remote repository and doing an initial push

There is a great deal of documentation and many posts on Git out there, so this is more of a note to self as I keep forgetting the steps needed to set up a remote repository and doing an initial “push”.
So, firstly setup the remote repository:

mkdir my_project.git
cd my_project.git
git init --bare
git update-server-info # If planning to serve via HTTP

On local machine:

cd my_project
git init
git add *
git commit -m "My initial commit message"
git remote add origin
git push -u origin master

Team members can now clone and track the remote repository using the following:

git clone
cd my_project


To have your terminal prompt display what branch you are currently on in green, add the following to your ~/.bash_profile (I have my current directory displayed in cyan):

function git-branch-name {
  git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3
function git-branch-prompt {
  local branch=`git-branch-name`
  if [ $branch ]; then printf " [%s]" $branch; fi
PS1="\u@\h \[\033[0;36m\]\W\[\033[0m\]\[\033[0;32m\]\$(git-branch-prompt)\[\033[0m\] \$ "

110 thoughts on “Git – setting up a remote repository and doing an initial push”

  1. Pingback: Showing the current Git branch in your bash prompt « duesenklipper

  2. That is a great bonus tip! That little ~3 liner will save me countless (50, 60, who knows?!) gba (git branch all) calls in a day. I’ve actually trained myself that to ‘gba’ whenever I enter into a git directory to know which of the several branches I left myself in.
    I think you just made my evening…. and probably even my week. Thank you, thank you, thank you. 🙂

  3. Pingback: 6/12/2010 « Holy Sinster

  4. Thanks for the good tip! I’ve been a Subversion guy for a long time and decided to give git a try for my latest project. I’m still not completely sold, but the info you’ve given has made the initial setup a bit easier.

  5. I beg your parden but can you clarify whether I need to create a user account “git” and makdir my_project.git in its home directory?
    (I presume that you mean that but it helps to state it.)

  6. Pingback: GitHub ile SSH kullanarak Haberleşmek ve ilk Push işlemini Gerçekleştirmek | Taha Yavuz Bodur weblogging..

  7. Instead of requiring the git-track function that you have created, you can just do this instead:
    git push -u origin master
    The remote branch is then automatically tracked. Thanks for the help creating my remote repo though :o)

  8. Pingback: Git remote repository 생성 방법 « 살군의 보조기억 장치

  9. Pingback: Git remotes « Bassed

  10. Pingback: Git – setting up a remote repository and doing an initial ‘push’ « The Lucid | OpCode1300's

  11. In
    mkdir my_project.git
    cd my_project.git
    git init –bare
    git-update-server-info # If planning to serve via HTTP
    The server does not recognize “git-update-server-info” but does appear to accept “git update-server-info”
    When I try the second paragraph,
    “git push origin master”
    I get:
    ! [remote rejected] master -> master (branch is currently checked out)
    Any ideas? Why is it trying to push “master” when I’m telling it “origin”?
    I even logged back into my server and try to create a branch called “origin”, it returns
    $git branch origin
    fatal: Not a valid object name: ‘master’.
    Also tried to commit (since it said “branch is currently checked out”) and I got this
    $git commit -a
    fatal: This operation must be run in a work tree

  12. Brent J. Nordquist

    Thanks for the “push -u” pointer @frak! I had figured out how to do:
    “git push –all origin” and then
    “git branch –set-upstream master origin/master”
    — I didn’t realize you could combine the two as
    “git push -u –all origin”

  13. Thanks for the tips
    My situation: local branch in my laptop, cloned from origin git repo. On same git repo cloned on an other host. I want to see the git log on this host from my latopop:
    > git remote add myTag ssh://user@host:/path/to/git/repo
    > # Log of origin ok
    > git log -n 5 origin
    > But not on remote host
    > git log -n 5 myTag
    > fatal: ambiguous argument ‘myTag’: unknown revision or path not in the working tree.
    > Use ‘–‘ to separate paths from revisions

    1. I would be inclined to to a gig log to show recent commits, then git checkout [the hash of the commit to go back to]. Then commit these changes to master and push.

  14. Pingback: Git Resources and Tutorials | luiscberrocal

  15. Pingback: Come avere un proprio server Git senza usare GitHub | 10tank blog

  16. So I did everything as you said, but when I push something to my remote repository from my local machine, there’s nothing in the remote repository although the push itself seems to be a success. Master-branch is the only branch on the remote repo and there’s nothing I pushed there. What am I doing wrong?

    1. @Damnit The instructions are to setup a bare repository on the remote machine, this means that there will be no working copy and everything is stored within the ‘.git’ repository directory. If you try cloning the remote repo with ‘git clone user@host:repo.git’, you will most likely find it works as expected.
      If you want the remote machine to have a working copy, just leave off the ‘–bare’ option when initialising the repo. Hope this helps.

  17. Pingback: Git – New Remote Repository with Initial “Push” | Pivot Solutions

  18. Hi,
    I new to git now i can push to the local machine but how to push to the another machine. and
    what is in
    mkdir my_project.git
    cd my_project.git
    git init –bare
    git update-server-info # If planning to serve via HTTP

    1. In the example, is a domain name pointing to the server you wish to push to. This could just as easily be an IP address.
      The example also assumes a ‘git’ user, so using an IP address you’d end up with something like: ‘ssh git@’.

  19. Pingback: my git reminder

  20. Make sure the git user and group owns the repository directory on the remote. If it doesn’t, use the chown command to make the proper changes.

  21. Ah, you have to create the remote project first. I skipped that step thinking it would be created automatically with the first push. Of course, it took a few more dead ends to figure out how to get everything in sync again since the remote repository was created after the local one.
    It’s not difficult, just a little confusing figuring it out.
    It would be helpful to update the post for anyone who might make the same mistake. 😉
    Thanks for the tip!

  22. Pingback: Getting Started with GIT for Designers

  23. Pingback: Setting up GIT on a Windows computer | Diary of a Web Dev

  24. Pingback: Git branch in prompt |

  25. Pingback: How to push to git on EC2 - Tech Forum Network

  26. Pingback: 让 shell 显示当前 git 的分支名称 » Gopher beyond Eliphants

  27. Hi,
    I am trying the following and getting the request to enter password. Which password is this ? I am not able to log in with the password which I used for the server at bootup.
    sudo git push -u origin master
    git@‘s password:

  28. Hi,
    I am gettting the following error . The only difference in steps is that I had to use “git add .” instead of “git add *”.
    mohsin@KubuntuVM:~/my_project$ sudo git push -u origin master
    error: src refspec master does not match any.
    error: failed to push some refs to ‘git@’

  29. Hi Jamie,
    I think the error comes when you have no files in my_project. Once I added a file to my_project/ and repeated the procedure it all worked.
    One final question on terminal prompt displaying what branch you are currently on.
    I am using Kubuntu and could not find ~/.bash_profile file. I only have ~/.profile. Do we have to add the code to the ~/.profile ?
    Also, are any changes required or just copy the exact code ? I am asking because, I did add the lines to my .profile and could not login the next time.

  30. This was really great thank you, first time getting into git today and I found this very helpful! Great resource for a learner and well explained, consider yourself bookmarked!
    Thanks 😀

  31. Pingback: git remote cluster & laptop setup for one developer — why a "bare" repository?QueryBy | QueryBy, ejjuit, query, query by,, android doubt, ios question, sql query, sqlite query, nodejsquery, dns query, update query, insert q

  32. Pingback: How to push to git on EC2 | Ask Programming & Technology

  33. Pingback: 让 shell 显示当前 git 的分支名称multiprocess | multiprocess

  34. Pingback: 让 shell 显示当前 git 的分支名称 | Multiprocess

  35. Pingback: GIT server 설정 | CODE Paint

  36. Pingback: Private Remote Git Repository Debian Wheezy and other stories from Hell » Number ONE

  37. Fantastic, really quick to pick up. Just one thing – I had to put a ‘/’ in front of the path to the *.git folder on the server e.g.
    git remote add origin

  38. Thanks for putting this up. I find myself searching every time I need to do this, and the last couple times have ended up here. Cheers.

  39. There is a great deal of documentation and many posts on Git out there, so this is more of a note to self

    And yet, this was the first google entry for the search “git push to new remote repository”. Congrats.

  40. Pingback: Add git status to your bash prompt | Code Snippets

  41. Keith David Bershatsky

    Thank you for the write-up — it put me on the right track. Please consider updating your write-up to include an explanation of the post-receive hook and how to implement this and where to save it — something like this:
    Create a file post-receive in the hooks directory of your repository:
    GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f
    Make sure the target directory exists, as Git won’t create it for you. Finally, set permissions on the file:
    $ chmod +x hooks/post-receive

  42. Pingback: git distant bunch & notebook setup for just one creator — why a “simple” archive? |

  43. What I like about this article is that it is simple, to the point, and has none of the the cruft a lot of other tuts on the same subject have. Brilliant!

  44. Dear Lucid,
    do not assume anything. If something can go wrong it will definitely go wrong and it always goes wrong.
    You could add a few lines when explaining how to set up the initial repository on the remote server, stating with CAPITALS that:
    YOU GUYS NEED FIRST TO CREATE A git USER give it a password which you are going to share with your friends and use the following command for permissions or whatever.
    Otherwise people are confused.

  45. Pingback: Using Git’s post-receive hook to publish WordPress themes | Proper Design

  46. Hi, first thank you for your instructions, Git is going difficult to me.
    I follow your steps carefully but when finally I push my local files to the remote bare repository it looks like run well, I meen I took a bit time but the files are not sent to the remote server project folder???
    It is necesary to push there by using FTP??
    Thanks in advance!!

  47. Pingback: How to initialize a project with git | Jianglin's Blog

  48. Pingback: Setting up a svn server on FreeBSD. | the explorator

  49. Pingback: Derry Birkett › Getting Started with GIT for Designers

  50. Thanks a lot.
    Also, you should run git init --bare with --shared parameter if you are using central git repository with team:

    $ git init --bare --shared foo.git
    Initialized empty shared Git repository in /git/foo.git/
    $ chgrp -R devteam foo.git

  51. I’m used to doing to contribute to repositories but for some reason is missed out in the bitbucket instructions for how to push your first commit – thought perhaps the ‘git remote add origin git@bitbucket.

  52. Pingback: Common Git commands | Netgloo Blog

  53. Pingback: Git: setting up a remote repository and doing an initial push – Davide’s blog

Leave a Reply to brandon Cancel Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.