POV-Ray : Newsgroups : povray.off-topic : Git tutorial : Re: Git tutorial Server Time
30 Jul 2024 06:28:46 EDT (-0400)
  Re: Git tutorial  
From: Orchid XP v8
Date: 23 Apr 2011 15:23:59
Message: <4db3274f$1@news.povray.org>
>>> git keeps a history that can tell me what changes rely on other changes
>>> semantically, not just syntactically.
>>
>> How?
>
> Exactly that "linear" order you're complaining about. The DAG of commits
> tells you which changes were written with one version in mind but
> without other changes in mind.

In other words, Git is *guessing* which changes depend on each other 
semantically from which changes were written at the same point in time 
in the same repo.

I could change thing X, and then change thing Y which has nothing to do 
with thing X, and still Git will assume a relationship exists there. 
Darcs, on the other hand, only concerns itself with *real* dependencies. 
It's true Darcs can't guarantee that a particular combination of patches 
will produce runnable code. It's also true that Git can't guarantee that 
the code in any particular commit object is runnable either.

> If I change on April 1 the semantics of function XYZ, then I write code
> on April 3 depending on the new semantics, and you on April 5 write code
> depending on the old semantics, you now have a dependency from your code
> to the April 1 code that isn't recorded anywhere in Darcs. It's recorded
> in git, tho.

For every true dependency, there will be a bazillion spurious ones. So 
it's a case of "Which is worse? Missing some real dependencies, or 
recording millions of fake ones?" Given that the former is much simpler 
conceptually, I'll go with that thanks.

> If I have a repository and I merge in a bunch of your changes and apply
> them, then I merge in a bunch of changes from Jim, I could very well get
> tons of conflicts if Jim didn't apply your changes when he started working.

Is this not the case for every known distributed version control system?

> It seems fragile to me to have a working directory and a repository
> where I can incorporate changes into the repository that I cannot get
> into the working directory to work on.

Why can't you get them into the working directory?

>>> git doesn't have to spend tens of hours applying 240,000 change sets to
>>> the repository in order to give me the latest version of the files.
>>
>> Neither does Darcs.
>
> Sure it does. Delete your working directory.
>
> When you clone git, it pulls down the repository, then creates the
> working directory from that. When you clone darcs, it sounds like it
> pulls down both the repository and the working copy (which would seem
> problematic if the working copy had changes to it that weren't recorded,
> yes?).

Wrong.

It doesn't pull down the working directory at all. Indeed, in the copy I 
put on my webserver, I *deleted* the working directory.

It pulls down the *pristine* copy, which contains only recorded changes. 
[And is compressed.] If you're silly enough to delete that, then you 
just broke your repo. (I'm not sure whether the repair command can fix 
this... I believe so, but I've never tried it. It probably won't be fast 
though.)

>>> git has all kinds of sweet tools to manipulate the repository in ways
>>> Darcs can't very easily.
>>
>> Ways such as what?
>
> Like the bisecting command, just as an example. Or the stash command.

Without looking those up, I don't know what they do.

> Or commiting things in phases.

You mean like if you go to record something and realise you want to 
tweak it first?

> Or efficiently giving me a copy of the files
> as they existed at a specific point in time. (Indeed, since Darcs
> doesn't actually record what order you pulled changes in, it seems Darcs
> can't really even do that inefficiently.)

You could add a tag before you pull anything in. Then if you have 
problems, you can go back to the tag. (Or just query exactly what 
happened after the tag.) But yes, I suppose the fact that you need to 
remember to do this could be considered a weakness. There's no really 
fundamental reason why Darcs couldn't keep a history of what's happened 
to your repo though. (And keep it local to that repo, not part of the 
shared change history.)

> BTW, if you ever want to play, there's a script for git that will import
> the changes from and export to a Darcs repository.

Given the radically different ways in which the two systems work, I 
imagine the history gets pretty mangled in the conversion - no matter 
which system you believe is the "correct" one.

>> 1. I will never wind up "working" on anything that's
>> version-controlled. I
>> am apparently doomed to spend the rest of my /working/ life rebooting
>> people's PCs because Word crashed, rather than doing interesting
>> coding tasks.
>
> <Yoda> And that is why you fail. </Yoda>

Is this the same Yoda who lived in a universe where you can literally 
make inanimate objects physically move just by *believing* that you can?

-- 
http://blog.orphi.me.uk/
http://www.zazzle.com/MathematicalOrchid*


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.