Skip to content

A widget to sync your private bitbucket repos to your local machine

License

Notifications You must be signed in to change notification settings

trickyearlobe/bitsync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

428f04e · Jan 27, 2025

History

17 Commits
Jun 10, 2024
Jul 23, 2023
Jan 27, 2025
Jul 29, 2023
Jul 29, 2023
Jan 27, 2025
Jan 21, 2025
Jan 21, 2025
Jan 21, 2025
Jan 21, 2025
Jan 21, 2025

Repository files navigation

BitSync

A simple utility to sync git repos from your hosted BitBucket and GitHub private organisations to your local machine.

  • The utility can discover the organisations you have access to
  • Repos are placed in
    • $HOME/repos/bitbucket/<bitbucket workspaces>/<projects>/<repos>
    • $HOME/repos/github/<github organisations>/<repos>

Installing

First of all, install GO (aka Golang) if you don't already have it.

Then use GO to install BitSync.

go install github.com/trickyearlobe/bitsync@latest

The BitSync binary will be downloaded, compiled and installed to ~/go/bin/bitsync so make sure it gets added to your path, ideally into a shell startup script like .bash_profile or .zshrc

export PATH=$PATH:~/go/bin

Finally, make sure you have an up to date command line version of git installed on your PATH (this app shell's out to it)

Configuring Bitbucket for access

  • In BitBucket WebUI click the gear icon and select Personal Bitbucket settings
  • In Account settings, make a note of your username under Bitbucket Profile Settings. It is usually different to your eMail.
  • In SSH keys, upload your SSH public key to enable GIT to authenticate with bitbucket over SSH (use ssh-keygen if you don't have one in ~/.ssh/id_rsa.pub or similar)
  • In App passwords create and copy an App password which has read rights to account, workspace membership, projects and repositories so that we can autodiscover your repos.

Configuring Github for access

  • In GitHub WebUI click your picture in top right and select Settings then SSH and GPG Keys
  • Click New SSH key and upload your public key to enable GIT to authenticate with GitHub over SSH (use ssh-keygen if you don't have one in ~/.ssh/id_rsa.pub or similar)
  • If you use SSO to access your GitHub Org, click Configure SSO next to your uploaded SSH key and authorise the key for the Org(s) you want to sync
  • Scroll down in settings to Developer Settings and create a personal access token (classic)
  • Grant the token sufficient rights to access your github orgs/repos and configure SSO if necessary (just like we did for the SSH key)

Bare mirroring (optional)

If BITSYNC_MIRROR is set to true then cloning will happen with the --mirror git option. This has the effects

  • Repo's will be deleted before cloning if they exist
  • The repos will be cloned bare with the mirror flag set
  • All branches and tags will be mirrored
  • Mirrors will be placed under ~/mirrors instead of ~/repos

This is effectively a full archive of the repo, but it cannot be used for normal git workflows as it has the following git config options set

[core]
	bare = true

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

Using

Pass the credentials, and optional org lists, as environment variables and sync your repos.

# For Bitbucket
export BBUSER=ebeneezer
export BBAPPPASS=iurfhiuhfIUHFIEUiuehfeuiwF8734Jjhewjfew
export BBORG="nerds-org,jocks-org" # Optional comma seperated list of BB Orgs with no spaces

# For GitHub
export GHTOKEN=ghr-ieufwhiuehfuwehfiuehfuiwhqiuefh
export GHORG="nerds-org,jocks-org" # Optional comma seperated list of GH Orgs with no spaces

# Now get syncing
bitsync

About

A widget to sync your private bitbucket repos to your local machine

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages