HOW-TO check out PKP applications from git

From PKP Wiki
Revision as of 19:45, 9 February 2010 by (Talk | contribs) (Bug fix)

Jump to: navigation, search


This is the official process to check out OMP with the PKP library as a sub-module.

Create user

Go to and create a user account. Log in to your user account.

Delete existing personal forks

First you have to delete existing personal forks of omp/pkp-lib if you have cloned these repositories before. You obviously shouldn't do this when there are still changes in there you don't have in other locations!

  • Go to your personal github dashboard.
  • In "Your Repositories" select the forks you want to delete.
  • Go to Admin tab.
  • Down on the page click on "Delete This Repository".
  • Repeat these steps for both omp and pkp-lib

Fork the official omp/pkp-lib repositories

Clone your personal omp locally

Please replace "your-pkp-workspace" and "your-user" with the appropriate values.

cd ~/your-pkp-workspace
git clone omp

Set up pkp submodule in your local omp clone

cd omp/
git submodule init

edit .git/config with your favourite editor and find (or add if it's not there):

[submodule "lib/pkp"]
        url =

Change the url to

        url =


git submodule update

Add the official repository

The 'official' respositories can be compared to the role that PKP's old CVS repositories used to fill. Adding the official branch allows you to synchronize your code with the rest of the team, and should be pulled from before creating a patch or making a commit.


cd lib/pkp/
git remote add official  # this only works if you already have write access to the official rep.
git fetch official
git checkout -b master official/master
cd ../..
git remote add official
git fetch official

Now edit .git/config again. Find:

[branch "master"]
        remote = origin
        merge = refs/heads/master

And change it to:

[branch "master"]
        remote = official
        merge = refs/heads/master

Save the file and execute

git pull

This should give you the output 'Already up-to-date'.

Create development branches

Create development branches in the main project and the sub-module. I'll use the branch "modal" here but this is arbitrary. The branch name should represent the development topic you intend to work on. Also am I assuming here that you want to develop off the master branch. There my be scenarios however where it might be more practical to develop off another developer's branch. In that case you can replace "official/master" by any other remote or local branch you want to base your work on.

git checkout -b modal official/master
cd lib/pkp/
git checkout -b modal official/master
cd ../..

Never develop directly on the master branch. We can use the master branch to track released code and tested changes.

Start pulling changes

Now you can start pulling in changes from other people's repositories. The following is just an example. See for yourself what others are working on (or better: ask them) and pull in what you need to get started. To see developers who have forked pkp-lib, visit "PKP-lib watchers". Similar pages exist for all PKP project repositories. These users can be added as remotes to your repository where you can pull their latest changes:

cd lib/pkp
git remote add juan \
git pull juan modal
cd ../..
git remote add juan \
git pull juan modal

Pulling in changes from others may cause merge conflicts if you are not starting off the same commit point. See 'man git-merge' for more info on how to solve merge conflicts.

If you want to see another developer's code without merging it into your branch (e.g. because you just want to have a look at it or test it without developing off it), you'll want to pull their branch into its own branch. Use 'git stash' if you have uncommitted changes you want to save. I.e. execute:

git stash save "Temporarily stashing code"
git fetch juan          // Optional: This is only necessary if you didn't pull or fetch the latest changes before
git checkout -b juanmodal juan/modal
......Play with Juan's code.......
git checkout modal
git branch -d juanmodal // Optional: This deletes the temporary branch you created.
git stash pop

Make your own changes

Make your own changes, publish them to your own repository for others to pull from

touch my-new-file.tmp
git add my-new-file.tmp
git commit -m "added a useless file"
git push origin modal

Use 'git status' liberally to give you information on what files will be in the next commit, which files are marked for deletion, etc. That's all. Enjoy developing PKP applications on git!

Where to go from here?

Have a look at frequent git use cases for typical git use cases you'll encounter in your day to day work with git.


"Git cheat sheet"