|Go to Bitbucket and create a new repository (its better to have an empty repo)|
|git clone firstname.lastname@example.org:abc/myforkedrepo.git|
|Now add Github repo as a new remote in Bitbucket called "sync"|
|git remote add sync email@example.com:def/originalrepo.git|
|Verify what are the remotes currently being setup for "myforkedrepo". This following command should show "fetch" and "push" for two remotes i.e. "origin" and "sync"|
|git remote -v|
|Now do a pull from the "master" branch in the "sync" remote|
|git pull sync master|
|Setup a local branch called "github"track the "sync" remote's "master" branch|
|git branch --set-upstream github sync/master|
|Now push the local "master" branch to the "origin" remote in Bitbucket.|
|git push -u origin master|
Although the above is not a real forking (in the sense that it doesn't provide all the goods that forking gives, like push request) importing is a very different thing.
Well explained "how to", thank you.
Just adding a comment about new Git versions (currently I'm in v2.16.1). When I set up to track synced remote repository I got a fatal error:
$ git branch --set-upstream github sync/master fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
Then I used recommended option
$ git branch --track github sync/master Branch 'github' set up to track remote branch 'master' from 'sync'.
Well explained how-to fork a github repo in a bitbucket server (initial status).
@ralcon: One possible way I can think off is; you maintain two branches in your destination (e.g. Bitbucket) repo. One branch which you wish to own (let's call it "master") and modify(maybe) and another which is replica of source (e.g. github.com) and let's call it "source". Now you need to keep updating your "source" and there shouldn't be any merge conflicts as every-time it is syncing to the latest or source. Later you can decide to merge "source" to "master" as and when you need.