Hi Everybody,
A while back I setup a private Git mirror of the Lazarus SubVersion (trunk only) repository. This was for my personal use. Since then I thought others might enjoy a Git mirror as well. Seeing that our company has limited internet bandwidth I decided to move the mirror repository to a more public place. The Git mirror is hosted on GitHub at the following URL and is sync'ed with Lazarus SubVersion trunk every 15 minutes.
git://github.com/graemeg/lazarus.git
The Lazarus Trunk (exact duplicate) is mirrored in the 'upstream' branch which I'll explain shortly.
I just completed a repository clone from GitHub to make sure everything is working properly. The whole history of Lazarus (trunk) gets downloaded by default and is just 57MB!! With the testing I done locally, that is even less than SubVersion's 'svn co ..../trunk' which only gets ONE revision!
To clone Lazarus Git repository with full history
-------------------------------------------------
$ git clone git://github.com/graemeg/lazarus.git...this will download 57MB of data and unpack to
around 144MB on your hard drive. This has the whole history of Lazarus. A checkout via SubVersion of only the trunk revision is over 320MB - more than double what Git is with full history.
To clone only partial history of Lazarus Git repository ------------------------------------------------------- Lets say we want only the history since the last 10 commits.
$ git clone --depth 10 git://github.com/graemeg/lazarus.git...this will download 14MB of data and unpack to around 96MB on your hard drive. You will now only have the last 10 commits as your history.
Considering that the Lazarus source code alone is 82MB in size (excluding all the hidden .svn directories), Git gives you a pretty sweet deal! ;-)
About that 'upstream' branch
----------------------------
Because I'm mirroring the Lazarus svn repository (GitHub considers it as a fork), I want to make sure I always have a pristine copy of what is in SubVersion. That's what the 'origin/upstream' branch is all about. The default 'master' branch is my playground and might contain my customized version of Lazarus (something like my private fork though it will probably never get used or updated much).
So for you to work with the original upstream version of Lazarus (the one that lives in SVN trunk) you need to do the following:
$ git checkout -b work origin/upstream...this creates a new branch called 'work' which tracks the original SVN trunk branch and also allows you to create your own custom changes or bug fixes. That's the one MOST users would want!
Now to keep up to date with what's happening in SVN trunk, git 'upstream' branch, you simply need to run the following git command to update your local repository.
$ git pullThe nice thing about Git's merge is that if you created a patch and it was later included in Lazarus's SVN trunk (assuming it's applied verbatim), it will filter through to 'upstream' and then filter into your 'work' branch. Git is supposedly smart enough to realize that it's the same change you have locally and keep things nice and tidy. Else you can force a merge and trash your local changes.
If you want to make local changes like bug fixes (after all, we do love to help the core developers out) and you want to submit those patches to the mailing list or to Mantis, you would have the following workflow.
$ git pull (make sure we are up to date with SVN)
$ (edit..edit..edit) (create a bug fix)
$ git add <filename> (stage the file for next commit)
$ git commit -m 'describe what I changed'
$ git format-patch HEAD^..HEAD
or replace the last line with
$ git log -1 (to see the last commit message and SHA1)
$ git format-patch -1 <commit_SHA1>...You will now have a numbered patch file which you can attach to an email or submit via Mantis. If you specified a larger revision range you will have multiple patch files in order which you can submit to Mantis.
For more info on any git commands simply type:
$ git help <command>
eg:
$ git help format-patch
$ git help commit
$ git help addOr go to the Git website where there are plenty of tutorials, downloadable PDF books etc..
Hope you enjoy! :-)
Regards,
- Graeme -
_______________________________________________
fpGUI - a cross-platform Free Pascal GUI toolkit
http://opensoft.homeip.net/fpgui/
