Using BitBucket as Assignment Submission System For The Courses

When I was studing computer science in the Marmara University, we were sending the project documents and the codes we developed in the courses to the instructors via floppy disks. The deadlines were strict. If we missed the deadlines, the projects were rejected. In some cases, we were losing grades on the every single day after the deadline. For example, if we submit our projects 5 days late, we were able to get at most 50 points.

I know that project submission method is different in many other universities. In some courses, people send files to instructors via emails. In others, there exist submit pages and students upload the files via these pages. If the deadline is reached, submit button disappears and no one can submit after the deadline.

Sometimes students are able to submit projects by using command line tools, like we use in coursera submissions.

Even though these methods are handy and pretty easy to use, instructors cannot gather the following useful information very easily.

  1. Instructors cannot follow the status of the project without asking the project team members.
  2. Instructors have lots of throubles while running the projects if the project is not build in correct way.
  3. Instructors cannot understand how project is developed if there is no efficient documentation.
  4. For group projects, instructors cannot detect who has worked on the development of the project and who does nothing.

The world is changing and even the philosophy and principles of software development are changing. We have to find a new submission method that should make the instructors’ life easier and should let the students develop software as if these are open source projects.

BitBucket Based Submission System

Version control is a system that records changes to a file or set of files over time so that you can recall specific versions later. The source code of all projects and course assignments has to be maintained in version control systems.

Git is a distributed revision control and source code management (SCM) system with an emphasis on speed. Git will be used for managing the codebase and the project. Therefore, it is important to learn how git is used in detail.

Bitbucket is a web-based hosting service for projects that use either the Mercurial or Git revision control systems. Bitbucket offers both commercial plans and free accounts. It offers free accounts with an unlimited number of private repositories (which can have up to five users in the case of free accounts). The project teams will use for hosting code repositories.

Let’s say that you are in a team of 3 students and you are to build a software as an assignment of your course. The rules for managing code and submitting the assignments are as simple as follows:

  1. Each team member should have a BitBucket account.
  2. One member should create a team via “create a team” page of bitbucket.
  3. The admin of the team account should add the other members to the team settings. The team should have a separate name and an email address. No one except the instructors and the team members is allowed to join to the team.
  4. Account of the instructor should also be added to the team as a team member.
  5. Important notice: The free plan in BitBucket gives you a team account with five members on an unlimited number of private repositories. That’s why, it is not possible to let the 6th developer access the team’s private repository.
  6. If it is an assignment (and the code has to be kept as private due to course regulations), a private repository should be created.
  7. If there is no need to keep the source private (and allowed by the instructor), than it is not mandatory to create a private repository. The team can create a public repository to make the code open to public. In that case, the team size and the number of people who can access the public repository can exceed 5 members. Note that it is important not to accept pull requests from outside the team.
  8. Code should be maintained in BitBucket. Instructors can check the commit history and the code to guide the team throughout the project.
  9. Read me” file has to be available in the root of the project describing the details of the project, such as how we can build and run the project, how to install prerequisite technologies, etc.
  10. All documents (i.e. analysis documents, design documents, presentations, papers, progress reports, etc.) related with the project should also be committed to the project repository. That allows the teams to version documents as well.
  11. Any Vagrantfile, or config file can also be managed in the repository to make deployment and delivery easier.
  12. The team members should push their commits to the private repository. That let’s the instructors follow who works on the project and who does nothing.
  13. When the deadline is reached, there is no way to stop the team from developing the project. But that’s fine..
  14. When the instructor wants to evaluate the project, the instructor schedules a cronjob at the time of the deadline that clones all repos (this can be done with a single POST to the API) for later examination and grading. [Thanks Erik van Zijst for the tip]

Why BitBucket, not GitHub

The main reason to prefer BitBucket is the ability of users to create unlimited number of private repositories for free. On GitHub, only paid users are able to create private repositories.

Actually both Github and BitBucket have offerings to university students. If you register with your university email address and verify it, BitBucket offers you unlimited free private repositories. Also GitHub offers free micro plan, which lets the students be able to create 5 private repositories for free.

BitBucket and Git 101

I got several requests to give information about how to use BitBucket and Git from scratch. That information will be valuable to the students or to the ones who has not been experienced git or Bitucket before.

Please check the documentation section for learning git. Knowing git is the main prerequisite for following the submission steps. After you learn how to install & configure git, checkout, commit, push and pull commands, it is time to use BitBucket for your projects. Creating a repository and pushing your codebase to it is as easy as follows.

  1. Log on to BitBucket.
  2. Set up a repository.
  3. Click clone in the webapp in your repository and copy the command to your clipboard.
  4. Paste the command into your terminal (assuming you have git installed).
  5. Copy all files for your project into the directory you cloned.
  6. Type ‘git push’ and enter your BitBucket password.

I recommend to read Atlassian’s BitBucket 101 Tutorial, basic git commands to use BitBucket and tutorial for first time BitBucket and git users if you need more details.


The main objective of BitBucket based submission system is to let students manage their assignments as if they are open source projects and make the submission super easy by not submitting anything. The evaluation process will become easier than the ones in old submission methods. That will be good for both instructors and the students.


  • [03.10.2013] The 14th step is updated with the warning of Erik van Zijst. For more info, please refer to his comment.
  • [04.10.2013] Added information about the offers BitBucket and GitHub have for university students.
  • [07.10.2013] Added “BitBucket and Git 101” section to give more beginner level information
Tagged , ,

3 thoughts on “Using BitBucket as Assignment Submission System For The Courses

  1. Note that the 5-user restriction only applies to private repos. Nothing will stop you from having 100 users on your team as long as not all of them have access to private repos.

    So if you’re only using public repos, there are no restrictions at all.

    Nitpick: if the instructor later clones the repo and then checks out the version from the date of the deadline, he’s relying on the commit timestamps being accurate. If the user adds a commit after the deadline, but rewinds his system’s clock to before the deadline, it’s impossible to know that that commit is more recent than it claims.

    An alternative would be for the instructor to schedule a cronjob at the time of the deadline that clones all repos (this can be done with a single POST to the API: for later examination and grading.

    • otuzbesli says:

      Thanks a lot for the information and the trick. We made an experiement and validated your point. Your proposal seems to be more reliable then. I will edit the post. Thanks.

  2. +1, we do the same on the AI and web engineering courses we dictate at UCSE DAR (a university from Argentina), and is great both for teachers and for students 🙂

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: