Importing an existing repository into Stash


I have my brand new Stash server installed, and now I am trying to migrate my Git repositories (which are currently hosted on some remote site). I already created a local copy using "git clone --mirror"(which includes all branches).

My question is:

What is the preferred way to import such a bare repository - including all branches and tags - to Stash?

My ideas so far:

- use a local script that pushes all branches and tags - one by one - to the Stash server

- got to the Stash "data/repositories" directory and execute a "git clone --mirror" there



8 answers

1 accepted

10 votes
Accepted answer

One has to be very careful using

git clone --mirror

This command sets force update for all the references of remote origin:

[remote "origin"]
	url = ...
	fetch = +refs/*:refs/*
	mirror = true

As result one may accidentaly rewrite the whole history of mirrored repository just by running:

git fetch origin

That's why one should remove the remote right after the clone is completed:

git remote rm origin

So the whole sequence should be as follows:

git clone --mirror $ORIGINAL_URL
git remote rm origin
git remote add stash $STASH_URL
git push --all stash
git push --tags stash

Another important note: if you're importing Subversion repository into Stash with git-svn, I'd highly recommend you to use SVN Importer Plugin instead, here are the reasons:

  1. It doesn't use git-svn, git-svn is slow and terrible;
  2. It uses SubGit instead, SubGit is fast and awesome;
  3. SVN Importer Plugin uses Stash users to map SVN authors into Git committers;
  4. SVN Importer Plugin properly handles branches, tags, merge-tracking information, EOLs, MIME types, etc;

Hope that helps.

On clone and remote rm orgin, do we still keep link to the origin one or the old and new report are strictly seperate ?

Hi Martin,

You should be able to push all Branches and Tags to Stash by changing the origin (or adding Stash as another remote) and run "git push --all" and "git push --tags". Note that "all" includes all Branches, but not the Tags.

See the documentation for details:


thx! i missed the "--all" option...

I'm astonished how convoluted it is to get set up to use Stash with an existing git repo.

Why on earth doesn't Stash handle this for us?    I should just have to tell stash where my existing repo is and it should take care of the rest!


On another note... I would suggest to never edit the data directory manually.

For future reference, AppFusions just released a "Source Code Importer for Atlassian Stash" plugin to help reduce the headaches in this.

Initial release supports code from SVN SCM. More SCM support coming!

Questions - don't hesitate to let us know - happy to help!


That plugin doesn't seem to be available any more - the link points to a generic AppFusions page.

When I follow those instructions, I get to the final step (the push --all) and get:

$ git push --all origin
error: --all and --mirror are incompatible

Seb Ruiz Atlassian Team Oct 09, 2012

If you clone a repository with --mirror, you cannot use --all. The mirror option will push all refs to origin.

Maybe you guys should update the docs then?

Seb Ruiz Atlassian Team Oct 11, 2012

Thanks Ben, I've done that now. Sorry for the oversight!

Suggest an answer

Log in or Sign up to answer
Community showcase
Published Nov 06, 2018 in Bitbucket

Upgrade Best Practices

Hello! My name is Mark Askew and I am a Premier Support Engineer for products Bitbucket Server/Data Center, Fisheye & Crucible. Today, I want to bring the discussion that Jennifer, Matt, and ...

1,906 views 7 10
Read article

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you