POV-Ray : Newsgroups : povray.off-topic : Git tutorial Server Time
30 Jul 2024 06:20:49 EDT (-0400)
  Git tutorial (Message 47 to 56 of 76)  
<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>
From: Darren New
Subject: Re: Git tutorial
Date: 23 Apr 2011 13:40:58
Message: <4db30f2a$1@news.povray.org>
On 4/23/2011 4:08, Orchid XP v8 wrote:
> Not to my knowledge, no. It records who created a patch and when, but not
> when it was applied to any particular repo.

That seems a problem to me, yes. :-)

>> So if, for example, I'm working, and everything's good, and I take some
>> patches from you, then work some more, then take some patches from Sam,
>> then work some more, then run my test and it fails, can I figure out
>> that it was Sam's patches, even if he created those patches before I
>> even cloned the repository in the first place?
>
> In that case you're presumably going to revert patches until the problem
> goes away. Maybe one patch broke something, maybe its an interaction of
> several patches. You turn patches on and off until you figure out what's up.

Sure. But I can't tell after the fact when I sucked Sam's patch in, so if 
Sam wrote the patch 2 months ago and I only started seeing the problem a 
week ago, it's not obvious that it might actually be Sam's patch.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Darren New
Subject: Re: Git tutorial
Date: 23 Apr 2011 13:46:22
Message: <4db3106e@news.povray.org>
On 4/23/2011 4:15, Orchid XP v8 wrote:
> Hint: Look up "darcs fetch". It fetches changes without applying them.

OK. It sounded to me like Darcs had one working copy and one repository, and 
applying all the patches from the repository would give you a "pristine" 
version, and the working version was differenced from the pristine version 
to get the next patch.

So it sounds like you can't actually fetch changes without having them 
actually be relevant to the working directory. If you make the WD match the 
repository, then fetch changes without applying them, then ask for diffs, 
isn't Darcs going to tell you the WD doesn't match the repository? If your 
change added the line ABC, isn't darcs diff going to tell you you removed 
ABC from the WD?

So what do you mean "apply"?  What happens if your WD matches the 
repository, then you do a fetch, then you say "record", what does Darcs do?

> It's the fact that you have to commit the merged version of the file as a
> new version. Every time you merge in a new change, you have to commit a new
> version. It just seems clunky and unecessary.

It's mildly clunky, but it tells you which changes are applied to which 
snapshots. git does this because it records files, not changes, yes. It's 
probably the part of git that people like least.

What happens if I have a number of tags in the repository (v1 and v2 and the 
current v3 under development), and I want to apply a bugfix to the v1 
version that doesn't apply to the later versions? How do I do that?

>> In Darcs, that's one step it seems - I can't get changes
>> from you *without* applying them to the work I'm doing.
>
> Not true. You can get changes without applying them. It's just that usually,
> you want to fetch changes to, you know, *use* them.

But if you have multiple branches, like V1, V2, and V3beta1, and someone 
sends you a new feature for V3beta1, you don't want to apply that to V1 or 
V2.  If you get a bugfix for V1 and make V1.01 you might or might not want 
to apply that to V3.

> Then why fetch the changes at all? Why not wait until you're actually ready
> to apply them?

Welcome to DVCS!

Plus, what do you mean "apply"? git stores multiple branches in one 
repository. I could as easily ask you "why wouldn't you apply every change 
you get to every copy of the Darcs repository for your program?"  The answer 
is "because maybe I don't want to change that repository."

I might want to push changes up to a shared repository so everyone in the 
team can work on them, but I don't want it going into production or even to 
people not on the team.

I might want the development branch to apply the changes but not the branch 
that's half way thru QA testing.

>> So if you have something like Linux, where there's a new release every
>> few months, you need a complete repository for every release.
>
> Um... why?

Because you don't want all the changes applied to old versions of Linux? 
Maybe Darcs tags would do the trick there?

>> And if I
>> fix a bug in an old release and you want to incorporate that bug fix
>> into newer releases, what do you do?
>
> Oh, I see. You mean if you actually have multiple versions of something
> being developed concurrently? Yeah, in that case you'd have to move the
> changeset from one branch to another and hope it works.

And *that* is exactly what a git merge is. You don't do a merge every time 
you record a change. You only do a merge when you're actually, you know, 
merging two sets of changes into one branch of the repository.

A git branch is like a darcs repository.
A git commit is like a darcs record.
A git merge is like a darcs fetch-and-apply.

>>> You then have to
>>> *create a new commit object* representing this new combined state.
>>
>> Yes.
>
> So if two people have the same repo, and they merge in change X and then
> later merge in change Y, and then the other guy merges in change Y first and
> later change X, they now apparently have conflicting histories.

Well, you don't really "merge in" a change. You merge a change from one 
branch to another. You're not merging changes, you're merging branches.

You're not going to have conflicting histories. Indeed, you *can't* have 
conflicting histories because history is immutable. You might have different 
histories in each repository, but that's like having two Darcs repositories 
cloned from the same source but with a different set of changes in each.

So if we start at the same version, and you make three changes, and I make 
three changes, and assuming there's no conflicts, when I merge your changes 
into mine, I'll get the same files as if you merged my changes into yours, 
so we'll both wind up with the same files, except yours will say yours 
committed it and mine will say mine committed it.

Normally the only reason you'd both merge in the other person's changes is 
if you're both going to keep developing on your own. Otherwise, what you 
ought to do is I merge in your changes, and then give you the result to 
continue from.

Obviously it's not a problem if you don't later combine the repositories 
into one history. If you do, then you'll have two branches, and your pointer 
will point to yours, and mine will point to mine, and they'll each be 
pointing to a separate commit with the same files in each one (assuming 
they're identical contents and that you didn't resolve merge conflicts 
differently than I did).

 > (And all
> because Git wants to pretend that everything happens in linear order.)

No, git very specifically does *not* pretend things happen in a linear 
order.  There's all kinds of tools to examine the DAG of dependencies 
between versions.

> How do you get out of that?

If it comes time to turn your work and my work into the same branch, you 
just merge the two branches in both repositories and work from there on, 
which won't cause any merge conflicts because they're all the same files. 
It's a DAG.

It would be similar in Darcs as if I set a tag in my repo and you set one in 
your repo, then we merged them, and now you ask "how do you make a tag that 
incorporates all the changes?"  Well, if I took your changeset and you took 
my change set, we'd have two tags. Make a third tag that points to the 
combined set.

> As I say, it just annoys me that you have to assign an arbitrary ordering to
> changes.

It's not really arbitrary. Darcs just ignores the fact that they aren't.

If I add function AAA to file BBB and record that change, then add a call to 
function AAA into file CCC, then record that change, would that really be 
independent unordered changes in Darcs?  That seems awfully fragile.

>> Say you have 25 changes in your Darcs repository, and you want a version
>> that applies every change except #23. What do you put in the repository
>> to represent that?
>
> You ask Darcs to revert change #23.

And how do you do that? "darcs revert" doesn't do that. "darcs unrecord" 
throws the change away entirely. Obliterate deletes the patch entirely as well.

So it sounds like the actual answer is "you have to clone the entire 
repository, then you have to obliterate the patch, and then you have to 
rebuild the working directory from the new repository, and *then* you're 
done, yes?

>>> It also irritates me that Git insists that even unrelated changes must
>>> have a linear time ordering.
>>
>> No they don't. Indeed, if unrelated changes had to have a linear time
>> ordering, you wouldn't get merge conflicts at all, would you?
>
> This doesn't make any sense to me at all...

Patches within any one branch have a linear time ordering. But git handles 
multiple branches in the same repository. So changes between branches aren't 
linearly ordered.

If changes were all linearly ordered, you'd never have to resolve merges, 
because you could never have two independent patches trying to be applied to 
the same place in the file, because one would definitely come before the 
other, right?

Even on the same branch, while the changes are recorded linearly, if there 
aren't conflicts between them, it's trivial to rearrange the order however 
you want. Just like in Darcs you can't rearrange a patch that deletes a line 
to be applied earlier than the patch that creates the line, so there's a 
partial ordering in Darcs also. Same in git - it's a DAG with a partial 
ordering. It's not linear.

For example, attached is a picture of the last few dozen commits to the 
Linux kernel.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message


Attachments:
Download 'image1.png' (172 KB)

Preview of image 'image1.png'
image1.png


 

From: Darren New
Subject: Re: Git tutorial
Date: 23 Apr 2011 13:48:11
Message: <4db310db$1@news.povray.org>
On 4/23/2011 4:14, Orchid XP v8 wrote:
> Seems more like because it's so difficult to merge two files,

It's no more difficult in git than in darcs. It's exactly the same process. 
You apply one set of diffs, then the other. If there are no conflicts, 
you're done. If there are conflicts, you fix them, and you're done.

If there's a branch called "newstuff" and I'm working on "master", and I 
want to merge in the changes from newstuff, I say

git merge newstuff
git commit

If file ABC has a conflict in it, I say

git merge newstuff
vi ABC
git add ABC
git commit

> after you've
> done it you have to save it to prevent you having to redo all that complex
> hard work.

Yes.  Except it's exactly as hard and complex as in Darcs.

> And in the process, all change application is forced to become
> strictly linear.

git doesn't record changes, so no, change application isn't forced to become 
linear.

> Apparently this doesn't stop people working on the Linux kernel. But it
> seems really clumsy to me.

It seems clumsy because you keep thinking git is recording changes. You keep 
thinking of "changes" instead of "versions".

>> I'm not sure I'd want to check out something from Darcs that has a
>> quarter million patches in it and wait for Darcs to apply them all one
>> by one. How well does it handle that?
>
> You're aware that Darcs keeps a cached copy of the latest state of all the
> files, so it doesn't have to recompute them, right?

Sure.

> Last time I tried downloading the repos for GHC, it was dominated by network
> latency. Processor usage was almost non-existent. It just takes a long time
> to shift gigabytes of data over a slow ADSL link. Just as it would if I had
> downloaded a Zip file of the source code with no history data at all.

Yep. But you only got the latest version. If you wanted to get every tag, 
you wind up copying all those files again anyway.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Orchid XP v8
Subject: Re: Git tutorial
Date: 23 Apr 2011 13:48:31
Message: <4db310ef$1@news.povray.org>
>> In that case you're presumably going to revert patches until the problem
>> goes away. Maybe one patch broke something, maybe its an interaction of
>> several patches. You turn patches on and off until you figure out
>> what's up.
>
> Sure. But I can't tell after the fact when I sucked Sam's patch in, so
> if Sam wrote the patch 2 months ago and I only started seeing the
> problem a week ago, it's not obvious that it might actually be Sam's patch.

Or, to summarise, "if I let my repo get 6 months out of date with the 
upstream and then pull everything in at once and try to figure out why 
it broke, it'll be quite difficult". My general reaction being "don't do 
that", but OK, I guess it's a valid complaint...

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


Post a reply to this message

From: Darren New
Subject: Re: Git tutorial
Date: 23 Apr 2011 13:54:29
Message: <4db31255$1@news.povray.org>
On 4/23/2011 4:21, Orchid XP v8 wrote:
>> "If the conflict is with one of your not-yet-published patches, you may
>> choose to amend that patch rather than creating a resolve patch."
>>
>> And that's exactly what the "git merge" command does.
>
> I thought "git merge" just combines changes, not resolves conflicts.

It doesn't. Altho there's the "git rerere" command, which resolves merge 
conflicts the same way you did last time, if you want. :-)

What do you mean by "resolves conflicts"? That's a manual process in git and 
in darcs.

> I wasn't even talking about conflicts. I'm talking about the fact that if
> the central repo changes, even in a way which does *not* conflict with your
> changes, you still have to update your local repo, remerge all the changes,
> and try again.

*If* you're *pushing* to a repository that is unattended, yes. How do you do 
it in Darcs?  What happens if people push conflicts into the central 
repository? Is that where the "we ignore conflicts without telling you" part 
comes in?

>> I'll grant you that Darcs is definitely simpler, but I think it's less
>> capable also, and that's the primary place the simplicity comes from.
>
> I disagree, but I don't think this argument is going anywhere productive
> right now.

It's less capable in that you only have one branch in a Darcs repository, 
and you have no staging area where you can commit in sections. To the extent 
that you avoid doing that in git, they seem pretty much identical to me.

> Yeah, it's only really useful for global names (e.g., functions or types).

Yeah, I try to avoid working in languages with global names. I honestly 
don't really even know any languages like that any more. Even global names 
in C aren't actually global.

> What should *really* happen is that Darcs looks at your edits and *detects*
> that it's a find-and-replace affecting only certain lines, and record that.

Yeah, when your repository system starts understanding that stuff, it has 
some advantages. :-)

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Darren New
Subject: Re: Git tutorial
Date: 23 Apr 2011 14:19:05
Message: <4db31819@news.povray.org>
On 4/23/2011 10:38, Orchid XP v8 wrote:
>> But if they don't conflict, then that's one step. (Well, one step for
>> each of the 200 changes, just like in Darcs.)
>
> Except that you have to record the order you did it in, even though it
> doesn't actually matter.

You *can* do all 200 at once, if you want. It's just a mess to specify.

>> No, it doesn't really work like that. Like I said, of the Linux repo,
>> there's 240,000 commits, of which 15,000 are actually merges. Git has a
>> lot of ways of editing the history to make it look simpler, which is
>> where all the perceived complexity of git lies.
>
> I might suggest that if you *need* the ability to edit history to make it
> look simpler, you're doing it wrong.

One is editing history only to back out changes or rearrange commits. Once 
it's in a repository anyone else can see, you can't edit it safely any more. 
Just like Darcs.

> Except that with Darcs, you don't need to record the fact that a branch ever
> even existed. You just record what was done with the actual file contents.

I would classify that as a problem, not a benefit. I'd like to know which 
patches were developed independently, when they were incorporated into the 
current code, etc.

>> Well, here's the advantages of git, so far:
>>
>> Git can keep multiple branches in one repository
>
> I don't know how that works, but if you mean you can have multiple working
> copies, then yes, I guess that could be quite useful.

No. It's exactly like having multiple repositories in one directory. 
Branching in git is cloning the repository in Darcs. Merging in git is a 
pull in Darcs.

>> Git keeps track of where changes came from and when, so if I pull in a
>> 2-month-old changeset and it breaks something, I can figure out when I
>> pulled it in vs when you wrote the change.
>
> I'm not sure I see why you would need that information, but OK, Darcs can't
> tell you about that.

Because if you created a patch six months ago and I only applied it last 
week, it would be good to know that when things start breaking, it *might* 
be because of a change that I only saw a week ago, and I might have to go 
back as far as six months worth of changes to understand the problem.

You really don't see the benefit of knowing the difference between "when I 
wrote the code" and "when I gave you the code"?  It's the same reason you 
put version numbers on executable files you distribute - so you know what 
you're running when.

>> 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.

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.

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.
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.

>> 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?).

>> 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. Or 
commiting things in phases. 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.)

>>> Still, until GHC moves from Darcs to Git, I won't have to actually
>>> care, so I guess it doesn't really matter.
>>
>> Not unless you wind up working on a project that uses git.
>
> That isn't going to happen.

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.

http://vmiklos.hu/project/darcs-fast-export/git-darcs

Just from reading the comments, it looks like it stores the Darcs repository 
as one branch of the git repository, treating it like a remote repository.

> 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>

> 2. If we're talking about hobby projects, obviously I'm going to pick one
> that uses my preferred tools.

Sure.

> It's not that I don't understand the difference between Git and Darcs. It's
> that I can't begin to comprehend how what Git does can work. It just seems
> such an obviously stupid way to approach the problem.

It seems like a tremendously elegant system to me, like the relational model 
for version control. You have a big pile of snapshots, one for each 
committed set of changes. All differences are calculated from the snapshots 
as needed.

Darcs too is fairly elegant. If they had a more sophisticated way of 
handling groupings of changes besides "clone the entire repository and then 
make irreversable changes to it" it would be even better.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Darren New
Subject: Re: Git tutorial
Date: 23 Apr 2011 14:22:17
Message: <4db318d9$1@news.povray.org>
On 4/23/2011 10:48, Orchid XP v8 wrote:
> My general reaction being "don't do that",

Sounds like a problem for any dvcs. Some development cycles take a while, 
you know? :-)

It seems like a problem exactly because darcs doesn't record what version of 
the code you were using when you made a particular change. If I change 
something "at the same time" as you change something that uses the old 
version, there's nothing recording that you wrote that after I made my 
change but before you actually knew about my change. *That* is the "linear" 
bit you're complaining about in git.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Orchid XP v8
Subject: Re: Git tutorial
Date: 23 Apr 2011 14:55:44
Message: <4db320b0$1@news.povray.org>
On 23/04/2011 06:46 PM, Darren New wrote:

> If you make the WD match
> the repository, then fetch changes without applying them, then ask for
> diffs, isn't Darcs going to tell you the WD doesn't match the
> repository?

Yes.

> If your change added the line ABC, isn't darcs diff going to
> tell you you removed ABC from the WD?

I'm not precisely sure what you're asking.

> So what do you mean "apply"? What happens if your WD matches the
> repository, then you do a fetch, then you say "record", what does Darcs do?

Records a new patch reverting all the changes that you didn't apply, 
presumably. (Of course, what it's *actually* going to do is prompt you 
for which ones you want to record, but anyway...)

>> It's the fact that you have to commit the merged version of the file as a
>> new version. Every time you merge in a new change, you have to commit
>> a new version. It just seems clunky and unecessary.
>
> It's mildly clunky, but it tells you which changes are applied to which
> snapshots. git does this because it records files, not changes, yes.
> It's probably the part of git that people like least.

It's the part I least like, at any rate.

> What happens if I have a number of tags in the repository (v1 and v2 and
> the current v3 under development), and I want to apply a bugfix to the
> v1 version that doesn't apply to the later versions? How do I do that?

You can't really use tags for that; you'd have to have seperate repos 
for v1, v2 and v3. Oh, you *can* put all the patches in one repo, but 
it's going to get messy very quickly.

> I might want the development branch to apply the changes but not the
> branch that's half way thru QA testing.

The Darcs way to do this is to store copies that are meant to be 
different in different places - which seems fairly logical to me. 
(Admittedly a little inefficient on disk space...)

>> Oh, I see. You mean if you actually have multiple versions of something
>> being developed concurrently? Yeah, in that case you'd have to move the
>> changeset from one branch to another and hope it works.
>
> And *that* is exactly what a git merge is. You don't do a merge every
> time you record a change. You only do a merge when you're actually, you
> know, merging two sets of changes into one branch of the repository.

You don't do a merge every time you record a change. You do a merge 
every time somebody *else* records a change.

> A git branch is like a darcs repository.
> A git commit is like a darcs record.
> A git merge is like a darcs fetch-and-apply.

Except that you don't explicitly keep a record of a darcs fetch-and-apply.

>> So if two people have the same repo, and they merge in change X and then
>> later merge in change Y, and then the other guy merges in change Y
>> first and
>> later change X, they now apparently have conflicting histories.
>
> Well, you don't really "merge in" a change. You merge a change from one
> branch to another. You're not merging changes, you're merging branches.
>
> You're not going to have conflicting histories. Indeed, you *can't* have
> conflicting histories because history is immutable. You might have
> different histories in each repository, but that's like having two Darcs
> repositories cloned from the same source but with a different set of
> changes in each.

So what you're saying is, the histories in two Git repos don't actually 
have to match, only the file contents?

>> (And all
>> because Git wants to pretend that everything happens in linear order.)
>
> No, git very specifically does *not* pretend things happen in a linear
> order. There's all kinds of tools to examine the DAG of dependencies
> between versions.

OK, "linear order within a single branch".

>> As I say, it just annoys me that you have to assign an arbitrary
>> ordering to changes.
>
> It's not really arbitrary. Darcs just ignores the fact that they aren't.
>
> If I add function AAA to file BBB and record that change, then add a
> call to function AAA into file CCC, then record that change, would that
> really be independent unordered changes in Darcs? That seems awfully
> fragile.

Darcs doesn't guarantee that a particular combination of patches will 
produce a working combination of files. Neither does Git, or RCS, or 
CVS. Git /assumes/ that if you apply the changes in the same order that 
the author did, this is more likely to produce a working configuration, 
but there's no /guarantee/ at all.

Changes have descriptions for a reason.

>>> Say you have 25 changes in your Darcs repository, and you want a version
>>> that applies every change except #23. What do you put in the repository
>>> to represent that?
>>
>> You ask Darcs to revert change #23.
>
> And how do you do that? "darcs revert" doesn't do that. "darcs unrecord"
> throws the change away entirely. Obliterate deletes the patch entirely
> as well.

"darcs rollback" does it though.

> Patches within any one branch have a linear time ordering. But git
> handles multiple branches in the same repository. So changes between
> branches aren't linearly ordered.

OK, fair enough. But changes within a branch are linearly ordered.

> For example, attached is a picture of the last few dozen commits to the
> Linux kernel.

What we see here is a long tangled history of sequential changes, rather 
than a set of mostly independent changes which could safely be combined 
in any combination.

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


Post a reply to this message

From: Darren New
Subject: Re: Git tutorial
Date: 23 Apr 2011 14:56:37
Message: <4db320e5$1@news.povray.org>
On 4/23/2011 10:38, Orchid XP v8 wrote:
>> git has all kinds of sweet tools to manipulate the repository in ways
>> Darcs can't very easily.
>
> Ways such as what?

Here's another example of something I don't understand how to do in Darcs.

Say you and I are both working on the same program. I find a bug in function 
ABC that needs a counter incremented in a loop. At the start of the loop, I 
add the counter increment.  You, at the "same time", find the same bug and 
fix it by adding the counter increment to the end of the loop.

Now, when we merge repositories, we'll be incrementing the counter twice. 
OK, not a problem that a VCS can solve, and you'd get the same ugly in git.

But ... OK, so I see you fixed the bug by adding the counter at the bottom, 
and since I already fixed it, I throw away that change from my repository.

You see you already fixed it, so you throw away my change in *your* repository.

How do we reconcile that later? How often do I have to exclude your change 
from my repository (while still obtaining your other changes), or how do I 
tell you to throw away your change and use mine instead?

In git, I'd manipulate the branch structure, or possibly rebase my changes, 
or I'd revert out that one change from my code during the merge and continue 
on. But since Darcs apparently doesn't record "they both started from the 
same place and made changes in parallel",

I don't see how Darcs can rationally handle the *history* of this change, 
other than having one or the other of us record a change that deletes the 
line that we added, then distributing that change around. I.e., I don't see 
how you can say "add this line, but delete that line it only if you apply 
the patch that fixes the problem elsewhere" in any sort of managable way.

-- 
Darren New, San Diego CA, USA (PST)
   "Coding without comments is like
    driving without turn signals."


Post a reply to this message

From: Orchid XP v8
Subject: Re: Git tutorial
Date: 23 Apr 2011 14:58:48
Message: <4db32168$1@news.povray.org>
>> Apparently this doesn't stop people working on the Linux kernel. But it
>> seems really clumsy to me.
>
> It seems clumsy because you keep thinking git is recording changes. You
> keep thinking of "changes" instead of "versions".

That's because "changes" are the logical thing to think about. Take a 
look at a bunch of commit messages, and they all tell you about what 
just *changed*.

>> Last time I tried downloading the repos for GHC, it was dominated by
>> network latency. Processor usage was almost non-existent.
>
> Yep. But you only got the latest version. If you wanted to get every
> tag, you wind up copying all those files again anyway.

Um... why? The tags are downloaded along with all the rest of the history.

Or perhaps you meant if I wanted GHC-6.6 and GHC-HEAD? In which case, I 
gather that Darcs caches patches which have recently been downloaded, so 
I would only have to download the handful of patches which are actually 
different between the two.

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


Post a reply to this message

<<< Previous 10 Messages Goto Latest 10 Messages Next 10 Messages >>>

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