Automatically pushing git repositories to Bitbucket
Bitbucket gives you unlimited private repositories. It’s the perfect place to archive all my crap to. Here is a script to create remotes for all repositories in a folder and push them up. I had 38 of them.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
$usr = "xaviershay" $remote = "bitbucket" def main directories_in_cwd.each do |entry| existing_remotes = remotes_for(entry) action_performed = if existing_remotes if already_added?(existing_remotes) "EXISTING" else create_remote_repository(entry) push_local_repository_to_remote(entry) "ADD" end else "SKIP" end puts action_performed + " #{entry}" end end def directories_in_cwd Dir.entries(".").select {|entry| File.directory?(entry) && !%w(. ..).include?(entry) } end def remotes_for(entry) gitconfig = "#{entry}/.git/config" return unless File.exists?(gitconfig) existing_remotes = `cat #{gitconfig} | grep "url ="`.split("\n") end def already_added?(existing) existing.any? {|x| x.include?($remote) } end def create_remote_repository(entry) run %{curl -s -i --netrc -X POST -d "name=#{entry}" } + %{-d "is_private=True" -d "scm=git" } + %{https://api.bitbucket.org/1.0/repositories/} end def push_local_repository_to_remote(entry) Dir.chdir(entry) do run "git remote add #{$remote} git@bitbucket.org:#{$usr}/#{entry}.git" run "git push #{$remote} master" end end def run(cmd) `#{cmd}` end main |
So you aren’t prompted for username and password every time, you should create a `.netrc` file.
1 2 |
> cat ~/.netrc machine api.bitbucket.org login xaviershay password notmyrealpassword |