This page is a work in progress. If you have notes/hints/tips on DSpace development with Git/GitHub, please feel free to suggest their addition, or even add them to this page directly.

Git Resources

A list of some possibly useful external Git resources:
(Feel free to add to the list)

Still want to use SVN locally, even though DSpace is on GitHub?

Overview of the Git Lifecycle

(Borrowed from Fedora's Git Guidelines and Best Practices)

Git allows a developer to copy a remote subversion repository to a local instance on their workstation, do all their work and commits in that local repository, then push the state of that repository back to a central facility (github).

Bearing in mind that you will always being doing your work and commits locally, a typical session looks like this:

git clone git@github.com:DSpace/DSpace.git && cd dspace
Get a copy of the central storage facility (the repository).

git branch DS-123
Create a local branch called "DS-123".

git checkout DS-123
Create a local copy of the branch from master if it doesn't exist, make it your active working branch.

Now, start creating, editing files, testing. When you're ready to commit your changes:

{{git add \[file\]}}
This tells git that the file(s) should be added to the next commit.  You'll need to do this on files you modify, also.

{{git commit \[file\]}}
Commit your changes locally.

Now, the magic:

git push origin DS-123
This command pushes the current state of your local repository, including all commits, up to github. Your work becomes part of the history of the DS-123 branch on github.

git push is the command that changes the state of the remote code branch. Nothing you do locally will have any affect outside your workstation until you push your changes.

git pull is the command that brings your current local branch up-to-date with the state of the remote branch on github. Use this command when you want to make sure your local branch is all caught up with changes push'ed to the remote branch.

Some useful terms

master: this is the main code branch, equivalent to trunk in Subversion. Branches are generally created off of master.

origin: the default remote repository that all your branches are pull'ed from and push'ed to. This is defined when you execute the initial git clone command.

unpublished vs. published branches: an unpublished branch is a branch that only exists on your local workstation, in your local repository. Nobody but you know that branch exists. A published branch is one that has been push'ed up to github, and is available for other developers to checkout and work on.

fast-forward: the process of bringing a branch up-to-date with another branch, by fast-forwarding the commits in one branch onto the other.

rebase: the process by which you cut off the changes made in your local branch, and graft them onto the end of another branch.

Some useful Git Guidelines

The DSpace Developers/Committers are still working on our Git Guidelines & Best Practices.

But in the meantime, here's some development guidelines from a few "third parties" (feel free to add additional links)