blog of Guganeshan.T

September 29, 2013

Setting up Git and TortoiseGit with Bitbucket, step by step

Filed under: Featured Articles,Git — Tags: , , , , , — Guganeshan.T @ 1:48 am

I wanted a set of instructions for my colleagues and friends when they want to setup Git and TortoiseGit on Windows (connected to Bitbucket). There are some steps that I have to Google myself too every time, because I don’t install Git & TortoiseGit everyday.

Okay, so this post is going to be a bare-bones, step by step guide for me or anyone (No backgrounds, theories and other noise)

Basics:

  • Git – is a free and open source distributed version control system.
  • TortoiseGit – is a Git client (GUI interface).
  • Bitbucket – is a web-based project hosting service (supports Git and Mercurial)

Assumptions:

  • You already have a Bitbucket account. If not, you can create one here.
  • I’m installing this on Windows 7 – 64bit. I assume you can adapt to minor differences in your flavor of Windows.

Installing Git

1. Download the latest Git for Windows → http://git-scm.com/download/win

2. Start the installation and continue clicking “Next” until you come to the “Select Components” view (see below).

We only mark “Git Bash Here”, as shown in the image (This will add an entry in the right-click context menu of folders) →

 Select Git components during installation

3. Continue clicking “Next” without changing anything and finally click “Finish” to complete the setup. We have completed installing Git.

Configure Git settings

1. Click Start Menu and type “Git Bash” and press Enter to open a Git command-line window

2. Provide your name and email address to Git, so that it will label your commits properly.

For example, if you want your name to look like “John Doe” in your commits and your email address (registered with Bitbucket) is johndoe@doebrothers.com, you would enter the following two commands (press Enter after each line) →

git config –global user.name “John Doe” git config –global user.email “johndoe@doebrothers.com”

This is how it would look in Git Bash →

Setting username and email address in git

Create SSH identity and copy public key to clipboard.

To make sure we don’t enter our username and password every time we push to or pull from the Bitbucket repository, we should use SSH (secure shell) to communicate with Bitbucket. Lets go ahead and create our SSH identity to communicate with Bitbucket.

1. Click Start Menu and type “Git Bash” and press Enter to open the Git command line (if it is not already open)

2. Type the following command and press Enter →

ssh-keygen –t rsa –C “johndoe@doebrothers.com”

(Use your email address registered with Bitbucket)

You will be prompted to provide file location and to enter a passphrase twice. Keep pressing the Enter key to accept the default file locations and to skip providing a passphrase.

Now the key files are generated. Easiest way to copy the contents of the public key to the clipboard is to use the “clip” command as follows →

clip < ~/.ssh/id_rsa.pub

Once you press Enter, the contents will be in clipboard, ready to be pasted.

This is how it will look in Git Bash →

Create ssh identity and associate with bitbucket

Add the copied public key to Bitbucket

1. Log into Bitbucket and click on your avatar (bottom left-hand corner). Click “Bitbucket settings”

2. Click on the “SSH keys” link under “Security” section of the settings and click on “Add Key” button on the right, to add a new key.

Add SSH keys option

3. In the “Add SSH key” popup that comes up, paste the copied contents of the public key in the “Key” text box.

4. Provide a label for this key in the “Label” text box, to identify it (optional). For example it could be “Personal Laptop”.

5. Click on the “Add key” button to save and close the popup. Key with the “Personal Laptop” label (or any other name provided) should be listed like in the following image →

Added public key in bitbucket

At this point we have everything ready to work with Git and Bitbucket… ONLY if you are someone who loves the command-line! Winking smile

If you were one of those rare breeds, you wouldn’t even be here reading this guide. So let’s continue and see how we can install and setup TortoiseGit as our GUI interface for Git (there are many other excellent Git clients too, that you can try, e.g.: SourceTree)

Installing TortoiseGit

1. Download the latest TortoiseGit here → http://code.google.com/p/tortoisegit/ (Make sure you select the right setup for your PC – 32bit or 64bit).

2. Start the installation and keep clicking “Next” until you come to the following view (Choose SSH client). Choose “OpenSSH, Git default SSH Client” here.

Choose ssh client

Note: If you don’t see the “Choose SSH Client” option during installation, don’t worry. This can happen if you are reinstalling TortoiseGit (The settings are left behind in a previous installation in the Registry).

If this happened to you, Click “Finish” and try the “Extra Step” provided blow. Then you can continue from “Let’s test our installation” topic.

3. Click “Finish” to complete the setup

Let’s test our installation

We need a valid Git repository in Bitbucket to test our installations and configurations.

Go to an existing repository or create a new repository (this can even be a repository to only test Git with Bitbucket, that you can delete immediately).

1. Click on the “Clone” button on top (next to the “Fork” button).

2. Select “SSH” from the drop-down.

3. You will see a text box to the right with all its text selected. “git clone” is a command and we don’t need that now. So, copy everything else.

This is how it would look in Bitbucket →

Clone repository settings in bitbucket

If you paste the copied text to a text editor like Notepad, it should look something like the following (Note that there’s no “git clone” command in it. If you accidentally copied that too, copy again WITHOUT it).


git@bitbucket.org:guganeshanthambiraja/sample-repository.git

Some parts will be different for you because you will have a different username and repository name. This is our clone URL.

4. Let’s “clone” the repository on the desktop (you can delete and try a different location later). Right-click on the Desktop and select “Git Clone…” from the context menu.

5. A window will popup. Paste the copied clone URL in the “URL” box and click Ok →

Cloning the repository in Windows

6. If this is the 1st ever time you are communicating with Bitbucket using SSH, you will see the following message (Git doesn’t know Bitbucket as a host yet) →

Bitbucket authenticity warning message

Just click “Yes” to remember bitbucket.org in future sessions.

If everything went on fine, you should see a blue success message at the bottom in TortoiseGit once the cloning is complete →

Success cloning repository

Commit a new file to your repository and Push to Bitbucket

Only when you could commit and push a file to Bitbucket without a problem, that we can confidently say our setup works.

Yeah, that’s “home-work” for you and I’m not going to list any steps here Winking smile

Since the purpose of this article was to setup the necessary tools, “how to” work with these tools is beyond scope (Can be discussed in another article maybe).

EXTRA STEP, only if you didn’t get the “Choose SSH client” option

If you didn’t see the “Choose SSH Client” option during installation (which can happen if you are reinstalling TortoiseGit – the settings are left behind in a previous installation in the Registry). You can set this later in TortoiseGit settings after installing TortoiseGit as described below →

  1. Right-click on any folder and select: TortoiseGit → Settings, from the context menu.
  2. Click on the “Network” node.
  3. You will see the “SSH client:” option on the right.
  4. Make sure it has only ssh.exe in it.
  5. Click Ok.

Here’s a screenshot of the Network options in TortoiseGit settings →

Change SSH client in Network options of TortoiseGit Settings

Your feedback!

I want to keep this post as simple as possible for anybody to follow. If you found any areas where it is not clear, please let me know below in the comments, so that I can make sure its simple for everyone.

Adiós

106 Comments »

  1. […] colleague and resident Git evangelist Guhan has written a very useful blogpost that gives a Step-by-step guide on how to set up Git clients for Windows. If you’re just now joining a Git project, this is exactly what you […]

    Pingback by Setting up Git and TortoiseGit for Bitbucket – step by step » Thinking Inside a Bigger Box — October 4, 2013 @ 6:34 pm

  2. Thank you very much. That was a great tutorial ;). Everything worked as described.

    Comment by NDonchev — October 14, 2013 @ 10:20 pm

  3. Glad to help… thanks for the feedback 🙂

    Comment by Guganeshan.T — October 14, 2013 @ 11:24 pm

  4. Great article!

    I would recommend the git client SourceTree by Aladdin though. 🙂

    Comment by Magnus — October 18, 2013 @ 11:44 pm

  5. Thanks Magnus! 🙂

    Comment by Guganeshan.T — October 19, 2013 @ 6:00 pm

  6. Great tutorial, saved a lot of pain for me and my colleagues. Nice one Guganeshan.
    Tom W´s last blog post ..Umbraco UK Festival 2013 – heralding the launch of Umbraco 7

    Comment by Tom W — November 21, 2013 @ 6:41 pm

  7. Glad to help Tom. Thanks for the feedback!

    Comment by Guganeshan.T — November 23, 2013 @ 12:53 am

  8. Thanks – big help!

    Comment by Bil C. — January 6, 2014 @ 11:53 pm

  9. Glad I could help Bil! You are welcome 🙂

    Comment by Guganeshan.T — January 19, 2014 @ 1:05 am

  10. Hi,
    Thanks for sharing the details. I followed the steps. But when I do clone, i get a window with below message:

    “Disconnected: No Supported authentication methods available (server sent: publickey)

    Any gusses?

    Comment by Harish — January 13, 2014 @ 4:55 am

  11. Hi. Please ignore my last question. That was due to the wrong open choosen as SSH client.

    Can you please add the instructions for changing SSH client from settings when reinstalling.

    We only have to add ssh.exe without any path. This article would be complete with this info.

    Comment by Harish — January 13, 2014 @ 5:29 am

  12. Hi Harish,

    I didn’t explain that scenario thinking the guide will become complex (only mentioned the possibility of missing the SSH setting page of the wizard)

    I will include that too, so that it will be complete. Thanks for the feedback!

    Comment by Guganeshan.T — January 19, 2014 @ 12:49 am

  13. I get stuck on that part until I check the comment of Harish. So, I prefer the tutorial to be more complexe and more complete rather than incomplete and I took 2h searching for a resoluton…

    Great Info Guganeshan, thank you..

    Comment by Pedro — March 19, 2014 @ 9:43 pm

  14. If you do not have git installed in the default location (my C drive is an SSD, so I don’t install many things there) you have to enter the full path, not just ssh.exe.

    For example, I had to enter “D:\Installs\Git\usr\bin\ssh.exe”.

    Comment by Corey — October 31, 2015 @ 10:39 am

  15. Corey, you don’t have to enter the full location of Git if you are using Git Bash itself. But if you are using the standard Windows command line, you can select the option to add Git to the “path” variable during installation. Then there’s no need to enter the full path there too. Or you can add Git’s location to the “path” variable manually.

    Hope that helps

    Comment by Guganeshan.T — November 9, 2015 @ 6:58 pm

  16. This was an extremely useful (comprehensive- just what was needed!) post . Suffered installing GitHub so was advised to try out BitBucket and SourceTree but this helps.

    Thanks a lot! Now to push, pull and commit!

    Comment by Pooja — January 15, 2014 @ 8:47 pm

  17. Hi Pooja,

    Glad that it helped 🙂

    Thanks for stopping by and Good luck!

    Comment by Guganeshan.T — January 19, 2014 @ 12:54 am

  18. Great tutorial!
    Just want to add that if you can’t select the ssh client. Just go to right click > tortoisegit > settings > network > and just type ssh.exe twithout any path in front, as mentioned by Harish.

    Comment by Martin — January 17, 2014 @ 6:59 pm

  19. Hi Martin,

    Yup, didn’t include that detail to keep the guide simple, as I have mentioned in the reply to Harish.

    But I thought I will add that too, to make it complete.

    Thanks for the feedback!

    Comment by Guganeshan.T — January 19, 2014 @ 12:58 am

  20. Hi Guganeshan

    can you help me out this with git bash , how to add it with it. Coz i m trying and its always says failed

    Comment by Devraj — January 24, 2014 @ 6:16 pm

  21. Hi Devraj, I’m not sure what your exact problem is. Which part fails for you?

    Comment by Guganeshan.T — January 28, 2014 @ 11:55 pm

  22. thanks Guganeshan… you saved my day!!!

    Comment by mag — February 21, 2014 @ 11:49 am

  23. you are welcome mag!

    Comment by Guganeshan.T — February 27, 2014 @ 6:45 pm

  24. Thank you so much above tutorial works nicely. you save my day. but how to commit and pull?

    Comment by Ana — March 21, 2014 @ 7:09 am

  25. now I can commit and pull 😀 Thank you so much, you save my whole week :)))))

    Comment by Ana — March 21, 2014 @ 8:26 am

  26. Hi Ana, that’s great! 🙂 thanks for the feedback

    Comment by Guganeshan.T — June 12, 2014 @ 12:39 pm

  27. Cool stuff! Thanks dude! Now I can work like a pro 🙂

    Comment by Robert Kabat — April 7, 2014 @ 7:48 am

  28. Glad to help Robert. Thanks for the feedback!

    Comment by Guganeshan.T — June 12, 2014 @ 12:40 pm

  29. Hai Guganeshan,

    I have followed step by step like what you wrote but when I want “CLONE” the repository, I have this error message : git did not exit cleanly (exit code 128)

    Need your advice, please.. Thanks

    Comment by dian — July 7, 2014 @ 1:27 pm

  30. Hi Dian,

    There’ll be more information above that explaining why it didn’t exit cleanly. if you can copy those messages, then we can analyze what went wrong. Sorry for the delayed reply.

    Comment by Guganeshan.T — July 13, 2014 @ 8:52 pm

  31. Word of warning: the ‘-‘ character in the command line functions on this web page doesn’t copy paste properly in chrome

    Comment by Russ — July 15, 2014 @ 9:12 pm

  32. There was a problem in Chrome. Not only that… after seeing your comment, I noticed that two minus symbols were displayed as one!

    Had to edit the post in HTML level to fix it.

    Thank you for pointing that out Russ! 🙂

    Comment by Guganeshan.T — July 27, 2014 @ 10:19 pm

  33. Amazing post, Guganeshan! It really helped me to quickly configure Tortoise Git to work with my newly created BitBucket account.

    Thanks for sharing this information with the community.

    Best regards,
    Rui Figueiredo

    Comment by Rui Figueiredo — August 11, 2014 @ 6:36 am

  34. thanks for leaving your feedback Rui!

    Comment by Guganeshan.T — August 12, 2014 @ 5:53 pm

  35. Hi,
    First of all, thanks for this tutorial 🙂 I’ve tried exactly the same steps as yours, but when right-clicking and cloning a repository from bitbucket on a local directory on my computer, it fails with the error : Could not read from the remote repository. I verified your steps one by one, and I can certify you that I’m well configured concerning your post. Where can it come from so ? My antivirus and firewall was disabled for the tests.

    Comment by Vespira — August 11, 2014 @ 7:06 pm

  36. Hi Vespira,

    It could mean an SSH key problem. Or something else too. Too narrow it down, can you copy and paste the full error log from TortoiseGit?

    Comment by Guganeshan.T — August 12, 2014 @ 6:18 pm

  37. Thanks for your useful article bro…..

    Comment by Hamelraj — September 8, 2014 @ 3:56 pm

  38. you are welcome!

    Comment by Guganeshan.T — September 8, 2014 @ 8:13 pm

  39. Extremely helpfull, thanks a lot!

    Comment by guest — September 9, 2014 @ 4:10 pm

  40. Wow!
    Thanks a lot for your very detailed instructions, your time and efforts. It works fine for me…!

    Comment by Sven — September 14, 2014 @ 1:58 pm

  41. You are welcome Sven 🙂

    Comment by Guganeshan.T — September 24, 2014 @ 1:19 pm

  42. Excellent. Loved the tutorial and this is a good way you explained everything. Clear like water.
    Kudos to your effort.

    Comment by Mayeenul Islam — September 27, 2014 @ 2:21 pm

  43. thanks for the feedback!

    Comment by Guganeshan.T — September 27, 2014 @ 2:49 pm

  44. […] folks. It took me some time to grasp it. With the help of Tortoise-GIT, a guide, and some patience I learned to use […]

    Pingback by The tools of my craft – Interested — October 4, 2014 @ 5:47 am

  45. […] folks. It took me some time to grasp it. With the help of Tortoise-GIT, a guide, and some patience I learned to use […]

    Pingback by GIT (the source code revision system) – Pt 1/2 – Interested — November 4, 2014 @ 5:36 pm

  46. Thanks for the nice tutorial. I had some problems with “error code 3328” after following the tutorial. For all who also encounter that problem: Make sure that the path to Git.exe in the General Settings of TortoiseGIT is set to the newly installed Git-path (probably C:\Program Files (x86)\Git\bin). For some reason this was not correctly set because I had some older console development setup on the same system and it pointed to that one. After that everything worked fine!

    Comment by Mark — December 2, 2014 @ 7:01 pm

  47. Thanks for sharing Mark!

    Comment by Guganeshan.T — March 27, 2015 @ 3:39 pm

  48. Thank you very much for the superb guide. Greatly appreciated.

    Comment by Carlos Tre — December 4, 2014 @ 12:53 am

  49. You are welcome Carlos 🙂

    Comment by Guganeshan.T — March 27, 2015 @ 3:40 pm

  50. Thanks for this article. After giving up on Sourcetree (crashes constantly on Windows) I almost gave up on git GUI’s altogether. Now up and running and getting ready to put all my sites into BitBucket and get everything synced up!

    Comment by Glenn Dixon — December 6, 2014 @ 5:04 am

  51. Great to hear that Glenn!

    Comment by Guganeshan.T — March 27, 2015 @ 3:41 pm

  52. Saved my Day. Thanks Guhan!

    Comment by Dilini — December 17, 2014 @ 12:45 pm

  53. 🙂 you are welcome Dilini

    Comment by Guganeshan.T — March 27, 2015 @ 3:42 pm

  54. It just worked! I’ve had to do this for multiple computers over the years, a chore made far worse by the many bad tutorials out there. Many just don’t work, some are needlessly complicated and filled with unnecessary steps. Thank you!

    Comment by Josh — December 21, 2014 @ 11:02 pm

  55. I put this guide up exactly for that purpose and I’m very happy that it helped. Thanks for the feedback Josh!

    Comment by Guganeshan.T — March 27, 2015 @ 3:48 pm

  56. It is really useful this is great tutorial for GIT

    Comment by Logesh — December 27, 2014 @ 11:06 am

  57. Hi Logesh… glad to know it helped!

    Comment by Guganeshan.T — March 27, 2015 @ 3:49 pm

  58. Hi, thanks for your guidance. is good!

    Comment by cw22 — January 7, 2015 @ 8:18 pm

  59. You are welcome!

    Comment by Guganeshan.T — March 27, 2015 @ 3:49 pm

  60. THANK YOU!!!!!!!!!

    Comment by Jane — January 8, 2015 @ 9:13 pm

  61. You are welcome Jane! 🙂

    Comment by Guganeshan.T — March 27, 2015 @ 3:50 pm

  62. Doesn’t work. Tried with latest versions of Git, Bitbucket, & TortoiseGit. I still get prompted for userid/password

    Comment by Andrew — March 13, 2015 @ 5:01 am

  63. Eh, delete this comment. I did something stupid, works now.

    Comment by Andrew — March 13, 2015 @ 5:04 am

  64. Hi Andrew… that’s ok, we make mistakes all the time 🙂 glad it helped

    Comment by Guganeshan.T — March 27, 2015 @ 3:51 pm

  65. Very helpful, saved my day !

    Thanks mate ! 🙂

    Comment by Ranga — April 1, 2015 @ 3:50 am

  66. Hello Ranga! Glad to see you here 😀
    You’re welcome and thanks for leaving your feedback.

    Comment by Guganeshan.T — June 3, 2015 @ 4:06 pm

  67. Thank you very much, this helped me a lot!

    In my case, as I was trying to setup my machine at work, I received various errors that a connection could not be established.

    It looked more like network related stuff than credential problems, and indeed it was.

    I resolved this by configuring the PROXY settings in TortoiseGit.

    => Giving a hint to this would be a great addition for your artice to help others with the same problems.

    Comment by Jens H — April 15, 2015 @ 5:03 pm

  68. Thanks for sharing it with us Jens!

    Comment by Guganeshan.T — June 3, 2015 @ 4:07 pm

  69. Sir How to upload code in bitbucket.

    Comment by Ravi Kumar Gupta — June 24, 2015 @ 12:13 am

  70. Hi Ravi Kumar… Sorry for the delay. I have not discussed about how to add your existing code to Bitbucket etc. in this post to keep it simple.

    Did you manage to solve the problem?

    Comment by Guganeshan.T — July 14, 2015 @ 7:59 pm

  71. Hi ,
    first of all thanks for your post. Very nice. If suppose, I want to go with tortoisegit, then I no need to do Configure Git settings ( create ssh key and save it in bitbucketwebsite). i download git and tortoisegit as per your advise and start working or i have to do entire process what you mentioned in this site?

    Please give clear definition about this.because i will go with tortoisegit only. what are all configuration I have to do for this?

    Comment by giri — June 29, 2015 @ 1:05 pm

  72. Hi Giri. Sorry for the late reply.

    You can skip the SSH part and continue. TortoiseGit will ask for your password. Is that what you wanted to know?

    Hope you have already solved your problem.

    Comment by Guganeshan.T — July 14, 2015 @ 7:53 pm

  73. Guganeshan.T you are a hero!

    Comment by Ted Thomas — July 3, 2015 @ 2:30 pm

  74. Glad to help Ted! 🙂

    Comment by Guganeshan.T — July 14, 2015 @ 7:55 pm

  75. Awesome!

    Comment by Sun — July 23, 2015 @ 6:59 am

  76. This helped a lot, but… I got stuck at the last part.

    There was no way to clone the desktop. I have the options to “git sync” and “git commit -> .” I’m not sure how to clone the directory.

    Comment by Brittany — September 15, 2015 @ 3:34 am

  77. Hi Brittany, sorry for the delayed reply. Did you manage to solve the problem?

    You have said “There was no way to clone the desktop” – I didn’t understand what that means. Did you mean to clone something into a folder on the Desktop?

    Comment by Guganeshan.T — October 6, 2015 @ 6:02 pm

  78. Great tutorial, perfect work!

    Comment by Nina — November 9, 2015 @ 8:17 pm

  79. Grate stuff guhan.. It saves my time.
    Little update for RSA key generation.
    Git Version: 2.7.0-64bit

    Command works for me:
    ssh-keygen -t rsa -b 4096 -C “your_email@example.com”

    Ref:https://help.github.com/articles/generating-a-new-ssh-key/

    Comment by Pubudu — January 26, 2016 @ 10:11 am

  80. Little update for my previous comment. Seems like a character is different. Other wise guhan’s command should work regardless of Git Version.

    ssh-keygen –t rsa –C “johndoe@doebrothers.com”

    use “-(En dash) instead –(Em dash)”
    Ref:http://character-code.com/

    Following command works:
    ssh-keygen -t rsa -C “johndoe@doebrothers.com”

    Comment by Pubudu — January 26, 2016 @ 10:29 am

  81. Very nice setup tutorial. Feb 17, 2016 I downloaded the most recent versions of git and tortoiseGit and each step worked perfectly. Thank you for taking the time to document this!

    Comment by Doug — February 17, 2016 @ 11:22 pm

  82. Thanks Doug! Glad it helped

    Comment by Guganeshan.T — February 20, 2016 @ 6:23 pm

  83. I bookmarked this link ages ago. I still come back to it every single time I need to do this setup. Thank you so much for putting it all down in such a concise format so it’s such an easy reference 🙂

    Comment by Bruce Thwaits — April 4, 2016 @ 11:39 pm

  84. Thanks for the feedback Bruce 🙂

    Comment by Guganeshan.T — April 5, 2016 @ 11:12 pm

  85. Excellent description and a lifesaver as I was struggling with bitbucket and windows

    Comment by Richard — May 5, 2016 @ 7:36 am

  86. Hello Guganeshan,

    First of all, thank you very much for your excellent blog on how to set up Git and TortoiseGit with Bitbucket. It has been a life-saver.

    I took the liberty of writing down alternative steps, for those who want to combine TortoiseGit for Bitbucket with GitHub for Windows, on the same PC:

    https://gist.github.com/svanas/87330eeb17313ea50d5cf9c265ab693f

    Thanks!

    Comment by Stefan van As — May 17, 2016 @ 2:08 pm

  87. Glad to help Stefan! Thanks for the alternative steps link.

    Comment by Guganeshan.T — May 18, 2016 @ 9:17 am

  88. Thank you so much! I hope you submitted it on reddit so people can find it easily.

    Comment by Aca — October 27, 2016 @ 2:58 pm

  89. […] To establish the proper version control system on my PC, I have used these clear and intuitive instructions from Guganeshan Thambiraja’s blog. Below, I summarize the actual […]

    Pingback by Version control for thesis writing in MS Word | Karina Shyrokykh — January 3, 2017 @ 7:03 pm

  90. Thank you. Excellent instructions.

    A slight change now that Atlassian has taken over BitBucket:
    Add the copied public key to Bitbucket
    1. Log into Bitbucket and click on your avatar (top right-hand corner). Click “Manage Account” -> Click “BitBucket Settings”

    Comment by John Anson — February 22, 2017 @ 5:21 am

  91. Hi John, thank you for taking your time to point this out.

    I have now updated the screenshot and text in the post 🙂

    Comment by Guganeshan.T — March 10, 2017 @ 2:27 pm

RSS feed for comments on this post. TrackBack URL

Leave a comment

CommentLuv badge

Powered by WordPress