Wednesday, April 24, 2013

A first time using Git, with Bitbucket - add existing code.

If you are new to Git, it can be a bit much to get your head around. The content below assumes you are making use of - a good alternative for small commercial teams, which is roughly as good as Github in a number of areas.

Git (Windows)
First, let's get a git client. If you are on windows, I recommend one called msysgit. It gives you access to a start menu item, known as Git Bash - this will look and feel a lot like a Linux terminal.

  2. Grab Git-, the "Official installer for windows"
  3. Install, next, next, next, leave the line endings settings to whatever it defaulted to, next some more, SUCCESS!

Much of the bitbucket UI for signup, create repository, etc is fairly self explanatory. Let's go ahead and create a repository.

When you've done that successfully, you'll be confronted with a screen:

  • I am starting from scratch
  • I have code to import

Selecting "I have code to import" will give you a number of git commands as examples - to initialize a repository, to add your content, and to add a remote.

There are two main protocols that git can make use of - https and ssh. The https URLs look like

... and for the moment, are the simplest to understand. If you already know about SSH and SSH keys, use the other protocol.

When you add a remote, you give it a name - in this case, origin. This is just a shortcut for the bitbucket server - you can choose any name you like; however there is a widespread convention to use origin with the main repository.

For windows users,

  • Start
  • Git Bash - this is much like the windows command line (cmd), with a few different commands.
  • Find your existing code - cd /c/path/on/your/hard/disk - note the direction of the slashes!
In Git Bash, instead of seeing a prompt like c:\>, the prompt ends in a $. 

To get to your c:\ drive
$ cd /c/

To get to another path
$ cd /c/path/to/location

If you aren't sure, you can hit the TAB key repeatedly to autocomplete your filenames or show you a list of suggestions.

Once you have located the right directory with your existing code, we want to initialize a repository

$ git init

Next, add a remote called origin pointing at bitbucket.
$ git remote add origin

Tell Git to monitor the files - this is like an svn add.
$ git add .

To see the affect of git add, do
$ git status
# On branch master
# Initial commit
# Changes to be committed:
#   (use "git rm --cached ..." to unstage)
#       new file:   A.xml
#       new file:
#       new file:   C.wsdl
#       new file:   D.wsdl
you@yourcomputer ~/path/to/local/code (master)

You can see the code is now being tracked. It wants you to commit.

So, perform your first commit:
$ git commit -m "Importing my code" -a

[master (root-commit) 0bba05d] Importing my code
 4 files changed, 127 insertions(+)

All done, right? Not quite. You've made a commit, but this is only local to your repository. Think of it as the save command in a word document - it doesn't publish anything, but it lets you undo/redo changes.
From here you can do as many changes and as many commits as you want.

$ git commit -m "fix typo"
$ git commit -m "remove swearwords"

Also, you probably saw some warnings like:

*** Please tell me who you are.

  git config --global ""
  git config --global "Your Name"

It's worth doing this, as each commit is attributed to a user - you'll only have to do this once. Don't worry too much: your commit will still have succeeded.

Anyway, you can check the status again with
$ git status
# On branch master
nothing to commit, working directory clean

It should tell you if there are any untracked files (git add them), or uncommmited files (git commit them) - but ideally, it should look like the above.

To publish your changes, you need to push them. For simplicity, we'll also set a default destination (via -u) - the origin remote repository; master branch.

$ git push -u origin master
Password for '':
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 3.81 KiB, done.
Total 6 (delta 1), reused 0 (delta 0)
remote: bb/acl: you is allowed. accepted payload.
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
you@yourcomputer ~/path/to/code (master)

... and check - your code should be published!

Great - but what just happened? If you look at the diagram, we've done everything on the left hand side - have a local, have a remote, and pushed changes. It's now possible for someone else to clone your repo, or fork it, and pull changes.

You can see that there can be many repositories - sometimes teams will maintain a 'core' repo, and people on the outside take a 'fork'.


Tarun K. said...

Thanks a lot for the tutorial. The Bitbucket official tutorial was really a pain to read. This got the work done simple and fast.


Rabia Ashfaq said...

Great tutorial. But i am getting an error when i write the command
git push -u origin master

the error says that

cannot resolve host '' while accessing
fatal: HTTP request failed

if u could help with it, it would be great.


Daniel O'Connor said...

That... sounds like is down, at least for you.

Remember also to change the placeholders in the URL to your account name, and repository name.