[Kde-scm-interest] [Kde-pim] Git and the needs of KDE PIM
Thiago Macieira
thiago at kde.org
Fri Jan 15 09:18:46 CET 2010
Em Quinta-feira 14. Janeiro 2010, às 11.32.48, Josef Kufner escreveu:
> Patrick Ohly píše v Čt 14. 01. 2010 v 09:59 +0100:
> > On Tue, 2010-01-12 at 19:54 +0000, Stephen Kelly wrote:
> > > The "blocked" commits issue poses bigger problems I think. My knowledge
> > > of the internals of git is not strong, but I don't think it would be
> > > possible to identify commits to keep only in one branch and not merge
> > > with the rest.
> >
> > What you could do is a "git merge --no-commit". Then look at all changes
> > that would be committed and revert those that are not wanted in the
> > branch that is getting merged into. Commit. The next "git merge" will
> > only merge changes made since the last merge, so this manual selection
> > only needs to be done once per patch.
> >
> > Disclaimer: haven't tried this myself.
>
> I thing, it would be better to do merge without '--no-commit' and then
> revert those commits that are not wanted. So everyone will see in log
> what patches are not merged. Question is, if we wish to see that.
We don't.
I don't think we want to have complex scripts that forbid certain commits in
certain branches. This will get very complex, very soon.
For Qt, we have one pre-receive script that makes sure the initial Qt commit
back in 1994 doesn't end up in the public repository. But that's one commit
for *all* public Qt repositories, for all branches. That's easy to maintain
(i.e., do nothing) and it's an easy script.
If we wanted this, the proper way of doing it is via git log.
# Check if the commit exists
if ! git cat-file -t $THE_COMMIT 2>/dev/null; then
out=`git log -n1 $currentbranch..$THE_COMMIT`
if [ -z "$out" ]; then
echo >&2 "You've merged $THE_COMMIT to branch $currentbranch."
echo >&2 "Sorry, I can't accept your push."
exit 1
fi
fi
git cat-file will return with an error if the commit doesn't exist. If it
doesn't exist, it can't be part of any branch.
git log A..B lists the commits between A and B. The -n1 option makes it show
at most one commit. So we know that it will print either zero or one commits.
If B is an ancestor of A, then A..B is an empty output and that's what we
check.
--
Thiago Macieira - thiago (AT) macieira.info - thiago (AT) kde.org
Senior Product Manager - Nokia, Qt Development Frameworks
PGP/GPG: 0x6EF45358; fingerprint:
E067 918B B660 DBD1 105C 966C 33F5 F005 6EF4 5358
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/kde-scm-interest/attachments/20100115/8570d87b/attachment.sig
More information about the Kde-scm-interest
mailing list