Pushing your local Git repository to a DreamHost server — Linux & Mac OS X


These instructions assume that you've created your application or website on your home computer, and then used Git to create a local repository.

The following steps describe how to push your local Git repository to your DreamHost server. In this way, you can develop your website on your home computer and push the changes to your live DreamHost website.

Pushing from Linux or Mac OS X

  1. On your local computer, navigate to your user's ~/.ssh directory:
    [local ~]$ cd ~/.ssh
    If the directory doesn't exist, create it:
    [local ~]$ mkdir ~/.ssh
  2. Set up SSH keys by running the following command:
    [local ~]$ ssh-keygen -t rsa -b 4096 -C "DreamHost Git repo"
  3. Enter a name for the file when prompted, such as dreamhost-git-key.
  4. When prompted to enter a password, click Enter twice to skip.
    Two new files are created in your user's .ssh directory:
    [local ~]$ cd ~/.ssh
    [local ~]$ ls -la
  5. Use the following instructions to copy your public key into your DreamHost server's authorized_keys file.

    To run the following commands, you need the name of your DreamHost server and the user/pass your website is under. View the following articles to locate this information:

    If you're using Linux:
    [local ~]$ ssh-copy-id -i ~/.ssh/dreamhost-git-key.pub user@server.dreamhost.com
    If you're using Mac OS X (also works with Linux):
    [local ~]$ cat ~/.ssh/dreamhost-git-key.pub | ssh user@server.dreamhost.com "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

    You may receive the following error when running this command:

    mkdir: cannot create directory `/home/username/.ssh': File exists

    This simply means the /.ssh directory already exists on the web server. If you see this, remove the portion of the command that creates the directory and run again. For example:

    [local ~]$ cat ~/.ssh/dreamhost-git-key.pub | ssh user@server.dreamhost.com "cat >> ~/.ssh/authorized_keys"
  6. Log into your DreamHost server via SSH:
    [local ~]$ ssh user@server.dreamhost.com

    If you receive an error when attempting to log in, you may need to use ssh-agent. See the following article for more information:

  7. Confirm your key has been added to the DreamHost server by running the following (this should output your key):
    [server]$ cat ~/.ssh/authorized_keys
  8. Create a new directory for your new remote repository on your DreamHost server. If this code is meant to replace your existing website, you could name it the same as your website ending in .git.

    Since this is a remote repository and not a working repository, the directory name you create must end with .git. You can then checkout this repository in the future to work on it.

    [server]$ cd ~
    [server]$ mkdir example.com.git
    [server]$ cd ~/example.com.git
    [server]$ git init --bare
    [server]$ exit
  9. Navigate to your git repository on your local computer, and then push to the remote repository on your DreamHost server. Make sure to change user and server to your actual DreamHost username and servername:
    [local ~]$ git remote add dreamhost ssh://user@server.dreamhost.com/~/example.com.git
    [local ~]$ git push -u dreamhost master
    You should see the following response:
    Counting objects: 3, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 200 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To ssh://username@server.dreamhost.com/~/example.com.git
    * [new branch] master -> master

How can I confirm my repository was correctly pushed to my DreamHost server?

If you run git status in the ~/example.com.git directory, the following error appears:

[server]$ git status
fatal: This operation must be run in a work tree

This is because it's a 'bare' repository, not a working directory you can use. You could clone this remote repository into a working Git repository. This allows you to view the files that were pushed to the server.

  1. Log into your DreamHost server via SSH.
  2. Clone the repo to a new location by running the following in your user's directory:
    [server]$ mkdir ~/cloned.example.com.git
    [server]$ git clone ~/example.com.git ~/cloned.example.com.git
    [server]$ cd ~/cloned.example.com.git
    [server]$ ls -la
    This cloned directory now contains all the files you pushed from your local machine.

How can I use Git for web development?

View the following article for instructions on how to push changes on your local computer to your live website.

See also

Did this article answer your questions?

Article last updated PST.

Still not finding what you're looking for?