git workflow draft

Aaron J. Seigo aseigo at kde.org
Tue Feb 15 17:51:35 GMT 2011


hi all....

so after the meeting on Sunday, here is where we are in terms of a draft 
workflow. more complete meeting minutes can be seen here:

	http://titanpad.com/SnJwFW2iXL

the goal of the meeting was to come up with a draft of a mutually agreeable 
git workflow for kdelibs and kde-runtime. the hope is that this can become a 
template for the rest of the SC modules (kde-workspace will follow the kdelibs 
workflow, for instance), as well as as many other KDE projects as possible. 
this is to help ensure a general continuity to how we work across KDE.

Topic Branches
=============

All new development should happen in a branch. Git makes branches very cheap 
and they can be local or remote. There are few if any really good reasons not 
to use branches, so development directly in master should be generally 
discouraged.

Topic / feature branches should be public and pushed to the main repository 
where they are easy for others to find and collaborate on. They should start 
as a branch off of master. We do not want git to become, even unintentionally, 
a road to segregated, private development at the expense of our collaboration 
as a community. With public branches in a shared repository, even a git pull 
will inform of new development that is happening. Git then becomes an 
important piece of our development communication with each other: a new branch 
means new activity.

Only features / topics that are intended from the state to be merged with 
master should end up in the main repository, however. More experimental and/or 
long term efforts (an example presented was the kconfig refactor leading up to 
4.0) should start in a personal clone, and when/if the work crosses the border 
into "this is realistically going to be merged with master" it can be moved 
into a branch in the main repository.

After merge with master, topic branches should be deleted from the main 
repository.

Branch Naming: if a branch is specific to a subproject, e.g. solid, specify it 
in the branch name such as "solid/udevbackend". This will make it easier to 
use git branch listings (along with grep, etc) to pick out branches of 
interest based on the project in question. If there is not a sepcific 
subproject that it belongs to, give it a good descriptive name such as 
"pluggable-kconfig". 

No branches should be prefixed with "KDE"; we consider that a reserved name. 
Nor topic should branches be numeric in nature (such as a version number) as 
those are reserved for actual release branches. (Sys admin at the meeting 
indicated that it is likely they will eventually put a push hook in place that 
prevents such "incorrectly" named branches.)

Branch names should not include the committer name as we have git log and it 
will help discourage "ego coding" where one person has overt "ownership" of 
the branch. This is still a team effort after all :)

"Dead" branches: on every maor every release, a check will be done on branches 
in the main repository. Any branches that have not seen any work done on them 
in the last <TBD: 12? 18?> months  will be deleted. Deleted branches are 
backed up automatically on git.kde.org, so work will be retrievable. This will 
keep our branch count sane over the years.

Open questions / topics for further discovery:

	* documenting best practices for keeping a topic branch in sync with 
master, keeping in mind that later a merge from the topic branch to master 
needs to be done and the git history sould be kept as clean as possible

	* process for announcing that a branch is ready to be merged so as to 
gather feedback (particularly important for the shared "crown jewels" in 
kdelibs); this is something like a "kdereview 2.0" though on the level of 
feature branches.

	* topic branches and our release cycle: is it acceptable to create a new 
topic branch even when we are in feature freeze?

	* more advanced workflows involving, e.g., an integration branch is not 
something we seem equipped for right now as it brings overhead and additional 
coordination with it. Perhaps in the future though ....

	* best practice "recipes" for merging, e.g. using "git merge --log"

Bugfixes
=======
The big question here was forward-porting vs. backporting. Backporting has the 
advantage that it is what we do currently and people run and test master more. 
Forward-porting ensures that all bug fixes in the stable release branch end up 
in the master branch and it is easier to test against a branch with fewer 
changes (e.g. new features). It will take discipline either way: two bug fixes 
we found in 4.6 that weren't in master.

Merge is prefered over cherry-pick: it cleans up the git history a bit; each 
commit is only there once instead of the cloned commits created by cherry-
pick.

The two methods (forward vs backward ports) are not mutually exclusive: on the 
contrary, backporting commits that made it into master can make it easier for 
the next person who wants to merge the stable branch into master.

Generally, we will encourage people to develop and test bug fixes against the 
stable branch and forward port them by way of a merge into master. Due to the 
obvious cases for exceptions, this will not be a "hard and fast" rule.

Documenting best practices considerations
==================================

There is a lot we need to document. The above needs to be refined, fleshed out 
and turned into point-by-point documentation. There are many pages on Techbase 
that need updating as a result of moving from svn to git as well. I'll 
organize and hopefully also host a docu day on irc for this specifically once 
the dust settles a bit more.


We'll need to have further discussion on these topics and your feedback is 
welcome. Questions as well as answers are valuable, as both will help define 
what needs to be further defined and documented.

-- 
Aaron J. Seigo
humru othro a kohnu se
GPG Fingerprint: 8B8B 2209 0C6F 7C47 B1EA  EE75 D6B7 2EB1 A7F1 DB43

KDE core developer sponsored by Qt Development Frameworks
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20110215/f1166ae2/attachment.sig>


More information about the kde-core-devel mailing list