(resend with correct 'identity')
Hi Karo,
You asked about a feature race - Obviously, at some point there needs to
be a little management applied (i.e a workable decision made) as to
which feature 'goes first'.
One aspect that can go wrong in these discussions is the potential
confusion between 'features' (user visible) and the 'area / file
responsibility' (devs) way of partitioning and managing the code.
By way of history, the old CM systems were based on the very historic
idea of the 'single master / source of truth', the difficulty of copying
it, and of preserving it. So now you have/had a system/tool/process that
'managed' the individual files, but the product coordination was
elsewhere. [Think of being asked to 're-touch' the Mona Lisa to correct
the smile.., before photography]
The Git model is that of one repository = one project [instead of a file
viewpoint], so the overall control is at the project level. Plus there
is the one 'golden' company build repository, as well as the individual
forks and local clones. There is a decision to be made about how devs
interact with the corporate storage server(s).
Personally, I'd suggest to get started, each dev should be able to have
their own project fork on the server, distinct from the golden build
server (that is the protected one!). This allows/encourages devs to push
their daily/hourly/15mins work up to their fork so that they get
protection from having a desktop/laptop crash. It also allows them to
indicate to the integrator which branch is ready to pull, and also act
as a reference point for discussions with area experts where they are
working on a 'co-requisite'.
Proving these mini snapshot commits is quick easy and uses almost no
space, and it is self managed. Because each dev has their own personal
copy of the files, they can try out things (committing locally and
pushing to their fork, but it won't be accepted 'upstream', without
mutual review by the integrator (and area specialist). The neat thing is
the Integrator can simply redirect the dev to rebase and improve the
code/doc, usually without needing to do any fix-up themselves.
I presume that you will also be looking at the test coverage, integrated
tests, etc. etc. Small incremental changes that the dev can test
/before/ upstream submission is important - without that capability the
partnership goes sour.
The other aspect is to re-think the old commit policy. I bet it was
major chunks of work only done infrequently with it only getting
accepted once everyone was tired out from putting in their
two-pennyworth... or something like that (it's a consequence of the old
master system that protected/prevented the master from change).
As noted above, the commits should be frequent, and hence very small,
almost obviously correct, with a sequence of preparatory patches, and
with doc patches. These are much easier to review and get accepted,
meaning one can more easily 'see the wheat for the chaff' on the key
change aspects. These small changes means that the merges get easier and
are almost always a success.
Some folk are still wedded to squashing all the small patches together
for the mainline. Personally I'd disagree with that, but it could be
that you create a nominal three-way branch, one which is the original
string of pearls, the second is the same changes squashed together,
resulting in a 'mainline-squashed-pearls' merge. Without the string of
pearls you won't be able to drill (bisect) down to the particular small
change.
It maybe worth having a review of how the git.git project sets itself up
and is managed
(https://github.com/git/git/blob/master/Documentation/SubmittingPatches)
and particularly how they structure the commit subject and messages.
Once it has been appreciated it makes the short sharp commits much
easier to do.
In summary, Git is project based, not file based. While 'control' is
distributed, the integration to the golden repo mainline is moderated &
managed by the Integration Authority. Co-requisites become easier to
work on /together!/
Philip
PS I've tried to avoid any tool based advice. I tried to stick at the
knowledge and understanding level so you can make choices that best suit
you.
On 21/09/2018 00:30, Karo Zans wrote:
Hi Philip. Thanks for the response.
Right now we are trying to migrate from IBM CMVC to GIT. We haven't
really migrated yet, we are trying to get a plan ready for the
migration, but we need some answers first on how GIT handles certain
things that CMVC already does.
We are running just vanilla GIT on Github Enterprise, and just GIT or
Github Desktop on our local dev machines.
Let's say Developer A starts working on Feature A, and Developer B
starts working on Feature B. If Feature B needs code from Feature A
to work, then Developer B will mark Feature A as a "corequisite".
This ensures that the build team gets both Feature A into the code
when it comes time for Feature B to be included in the main build.
What I am worried about is that if Feature B gets finished before
Feature A is complete, and Feature B is included in a build without
Feature A, then the build will be broken, because Feature B depends on
Feature A.
On Thu, Sep 20, 2018 at 3:58 PM Philip Oakley <philipoak...@iee.org
<mailto:philipoak...@iee.org>> wrote:
Karo,
You don't say what the existing 'tool' is, and whether there is a
way of running both old and new (Git) tooling in parallel.
When using Git branches (and local forks), it is possible for
individual devs to 'break' the rules regarding which files they
can touch, but only as a temporary measure, thereby allowing the
dev to indicate a _potential_ solution to the real owner of that
area.
The responsibility for the 'foreign area' is still with the old
hands, who get to pick and choose what they use in 'their' area
(cherry-picking ideas and code segments from those other
branches). Obviously they get to do the same back to the young
whippper-snappers (showing who are the wiser coders), and
hopefully everyone benefits from the mutual working.
The key step is that the area owners retain responsibility for
what they will accept into their segment of the master/trunk,
without having to actually do the work (when someone offers a
finished work item).
Most of this is careful social engineering using the best parts of
each particular tool and the process flows.
HTH
On 18/09/2018 00:37, Karo Zans wrote:
I see. Thank you for the response. I agree with what you say.
Unfortunately, I am dealing with about 250 different developers
who have been on the same project for 15, 25, and even 35 years
and they are all stuck in the old school way of doing things.
Asking them to adopt a new tool is like extracting teeth. I
can't tell you how many times I've heard, "What we do now works,
so why change?". Frankly the only reason why we are moving to
GIT from the old system is because the old tool isn't being
supported anymore.
Thanks for the information on the workflows. I think I have
heard that some people like Google use Gerrit in combination with
GIThub. That is supposed to enforce permissions, is that right?
Where can I find these workflow models? I think I saw some basic
ones in the GIT user manuals, but they didn't seem to work for
us. Is there a good place I can look at several workflows?
Thanks
On Mon, Sep 17, 2018 at 4:23 PM Philip Oakley
<philipoak...@talktalk.net <mailto:philipoak...@talktalk.net>> wrote:
Hi,
Most processes are driven by the limitations of the local
tool and the
experiences of local staff and managers. This also affects
the way teams
are structured (see Conway's Law).
Git, with it's 'Distributed control' model, tends to break
the old
paradigms which were based on the 'absolute single master '
idea (one
master drawing / paper record). Git avoids the need to limit
peoples
scope by separating the modification step from the acceptance
step.
Clearly it us reasonable that people generally stay within
their lead
area, but there is nothing wrong with stepping into other
areas with
carefully crafted and explained changes. They won't be
accepted, I hope,
if they fail that criteria. It is important to have a high
quality
senior dev at the acceptance stage who is firm but fair.
The fact that git branches are free and easy makes this
freedom easier.
Have a look at the various workflow models, including Nvie's
and that of
git itself (4 layer: master, next, pu (potential updates),
maint).
Philip
On 17/09/2018 21:17, Karo Zans wrote:
> Hi everyone. I have a question. At my current company, we
have quite a
> few developers. Each team has about 10 or 15 developers
that are only
> allowed to modify their specific code areas.
>
> On our current bug and new development tracking system, we
have bug ticket
> that code changes are tied too, and sometimes a bug ticket
is marked at a
> CoRequisite of another bug ticket.
>
> Basically if a person on another team has to implement a
function or
> feature or bug fix in their code, I will mark my bug ticket
as a
> CoRequisite of their bug ticket, if my code depends on the
new function
> they are adding or fixing.
>
> So I was wondering, how does GIT enforce this?
>
> I realize that I could simply create a branch off of
another person's
> branch and that will indicate that my code depends on their
code, but
> suppose I finish my code before they finish their code.
>
> If a sub branches code is merged into Master before, the
parent branch is,
> the code will be broken.
>
> How does GIT mitigate/enforce this so that the build isn't
broken?
>
> Thanks
>
--
You received this message because you are subscribed to the Google
Groups "Git for human beings" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to git-users+unsubscr...@googlegroups.com
<mailto:git-users+unsubscr...@googlegroups.com>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Git for
human beings" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to git-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.