Several Apache projects (e.g. ServiceMix, Karaf, Camel) moved from Subversion to Git. Is it time for Sling to move also?
dev@discussions:
- [jira] [Created] (SLING-3987) move from Subversion to Git
- moving sling to git
- [git] Which git system do we want to use?
- [git] Please test sample migrated git projects and repo setup
- [git] Whiteboard migration
See also - SLING-3987Getting issue details... STATUS
Tools and scripts
Some WIP tools can be found at https://svn.apache.org/repos/asf/sling/trunk/tooling/scm/scripts/ .
Can Sling (committers and contributors) benefit from moving to Git?
Pros
- offline support
- cherry picking
- easy to move projects (e.g. between bundles, contrib, whiteboard...)
- adpoting the Github workflow using the Git Dual Master system
- ...
Cons
- not eating our own dog food
- slow for big repositories (many modules)
- tagging is global
- ...
What needs to be prepared for moving to Git?
- repository layout
- release process
- documentation
- CI
Git at Apache
http://wiki.apache.org/general/GitAtApache
http://www.apache.org/dev/git.html
Repository Layout and Projects (Modules)
There are currently 250 projects (modules) in our repository, counted using the tooling/scm/scripts/gen-repo-candidates.sh
script ( repo-candidates.txt ).
Currently we consider every Maven project for extraction into its own repository. As exception we have:
- tooling/ide, which is a releasable unit by itself and not buildable as individual modules due to toolchain limitations
- tooling/scm, which contains various utility scripts
- tooling/jenkins, which contains the Groovy scripts used to generate the Jenkins jobs
Additionally, we will probably have one aggregator repo used to generate the full view over the git repositories, using repo, gitslave, or another tool that we will settle on.
Idea
- one Git repository per project/module (we should keep it that simple - is launchpad really different, a release unit, Justin Edelson?)
- grouping repositories with Google repo, e.g.
core
(bundles
),launchpad
,testing
,samples
,tooling
as needed - using
artifactId
as repository name for artifacts (bundles, plugins, jars, ...) and simple names for grouping (builder/reactor) repositories - using Google repo allows developers to set up their own grouping repositories - even non Sling committers
Grouping repositories (projects/modules)
There are some tools for grouping repositories (projects/modules):
Some posts comparing different tools:
- http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/
- https://codingkilledthecat.wordpress.com/2012/04/28/why-your-company-shouldnt-use-git-submodules/
Pros and Cons
[TODO]