How do I backup a git repo?

26

14

I am planning to switch from SVN to git. With svn I just copy my repo folder when I want to back it up. However git doesn't have one so what do I do?

Should I create a clone on a separate drive and update by pulling from my project? Then I can burn/archive this folder and it will have all the history?

This is probably obvious but I want to make sure when it comes to backups. I still pretend there is a root repository.

user3109

Posted 2010-12-08T10:59:37.300

Reputation:

See also: Backup a GitHub repository (the answers work for non-GitHub git projects, too)

– Martin Thoma – 2014-10-29T11:45:47.797

Answers

14

You just copy it. git does use a repo folder, it's just hidden from normal directory views. (The folder is named .git on *nix systems, so it only appears if you use ls -a. I assume that it sets the "hidden" attribute in Windows, but I've never used git in a Windows environment, so I'm not certain about how it's handled there.)

Dave Sherohman

Posted 2010-12-08T10:59:37.300

Reputation: 5 143

Theres a couple project files in my trunk i ignore. So i literally can copy it? (i'll assume it works the same way as linux). So is clone just a file copy? i guess if i pull all the data i want is in the folder. I checked there are .git files but there are .svn files in my svn trunk and didnt think to check if history data was in there – None – 2010-12-08T11:32:38.540

2On Windows, it's still .git, with the "Hidden" attribute. – user1686 – 2010-12-08T12:25:16.923

1@acidzombie24: The .git directory contains the entire repository state, including the history. (That's the "distributed" part.) – user1686 – 2010-12-08T12:27:10.993

5@grawity: its more the "selfcontained" part, the distributed part is when you exchange diffs between the selfcontained repositories :) – akira – 2010-12-08T12:49:21.500

19

The akira answer is correct, but you can add --mirror to create a bare repo (for a slightly smaller backup).

We use the following strategy (almost exactly):

git clone --mirror yourrepo backup.repo
tar cjf backup.repo.tar.bz2 backup.repo
scp backup.tar.bz2 ssh://somewhereelse

Then, to recover from your backup:

tar xjf backup.repo.tar.bz2
git clone backup.repo yourrepo

akirisol

Posted 2010-12-08T10:59:37.300

Reputation: 191

2This is helpful, thanks. How do I use the backed-up repo to restore the working tree? – Jonathan Day – 2011-11-07T11:49:19.497

10

I'm using git bundle. For making a copy file (one backup file) execute:

git bundle create backup.bundle master

To restore the repository with branch master simply clone the backup.bundle file:

git clone backup.bundle -b master my-project

MariuszS

Posted 2010-12-08T10:59:37.300

Reputation: 221

2

create a new clone somewhere else:

 % git clone yourepo somewhereelse

btw, git has a repo folder, you can locate it in your working copy underneath the subdirectory .git. every working copy has that "repo folder".

akira

Posted 2010-12-08T10:59:37.300

Reputation: 52 754

10I do not think a clone is acceptable as a backup, as it is not an exact copy. At least the remote branches of the cloned repo will be missing in the clone, and the branches of the cloned repo will appear as remote branches in the clone. – sleske – 2011-11-02T19:36:37.303