Am 11.09.2013 02:18, schrieb Tim E. Real: > Anyway thanks for all the git work and the streaming work. > I'll try to make your branches, time is limited ATM, things have come up > but I'm still going. Will try to update my midi fixes branch too. > Your video was cool. Looking forward to this great advance in MusE's history!
Heh, thank you. I hope I'll get audiomsg_overhaul merged fast, because
this one is required for proceeding with audiostreams.
And I've already got the next idea: template parts, i.e., "melodic
patterns" that can be parametricized with a chord... This should be
possible with audiomsg_overhaul... hmmm...
> I'll do it later, maybe a dummy push or something.
Try a pull first, I have committed to master in the meantime. And then
just pushing "nothing" (given that you have no new commits) will
probably be enough. Git should respond "Everything up to date".
> Not sure I understand the [git] instructions, what do they do?
For reading the following, forget everything what you know about SVN.
Git has commits. These are "objects" which contain:
- a full archive of the working copy at this time.
- a list of parental commits (they may have 0,1, or multiple parents)
- the name of the committer,the timestamp, the commit message
Such a commit has a hash, and every commit is referenced by this hash.
(There are no revisions. Think of one commit as tarball of your working
copy)
Commits cannot be changed! As soon as you try to update the commit with
the hash "abcd123", you will get a different hash, and thus a different
commit! They're immutable.
So git has commits, and they allow for a structure like this:
O --- O
/ \
O --- O --- O --- O --- ....
Note that there are no "branches" nor "tags" yet. Not even a "latest
development state", a "HEAD".
Now we need branches, tags, a HEAD. Actually, each branch has a HEAD.
And a HEAD is just a tag that is treated specially. So what are tags
(and thus, branches)?
They are text files, which live in .git/refs/{heads,refs}
under .git/refs/heads/, there is one text file for each branch, and they
contain the hash of some commit.
So a branch/tag/HEAD is just a human-readable name for a commit. And
every time you commit to a branch, this "branch pointer" is moved; so, a
different commit gets the human-readable name.
Now what happens if you *git pull* (which is implicitly done the first
time when you clone)? git finds out what is the remote's HEAD for the
requested branch. Then it looks, whether you have the commit with that
hash already on your disk. If not, it downloads it from the remote;
then, git recursively goes down to all parents (and grand parents) of
the requested commits, and downloads them, if neccessary, too.
When you *git push*, we can say (simplifying), that the remote does a
git pull from you. Basically the same thing happens, just vice versa.
And now finally: what does *git remote* do?
"git push" is a shorthand for "git push origin [current branch]" (and so
is git pull), and this means:
"Push our current commits up to the URL called 'origin'"
git has remotes: These are human-readable names for repository URLs.
"origin" is special in no way, except that it's the default.
So when you do "git remote rm origin", you tell git: "forget about the
SF.net URL". This does not remove any commits nor will it touch
anything. It just removes the shorthand name.
"git remote add origin ssh://blah..." re-adds the "origin"
shorthand-name, now with a new URL.
I had to initially *git push* every branch to the new URL. What happened
is, that my git tried to upload the HEADs of all branches (these are
commits, remember?). But then it found out, that "origin" aka GitHub
does not have the parents of these commits, so it uploaded those as
well. And recursively, it uploaded *all* commits.
Now, when you do *git pull*, the following will happen:
Your git talks to 'origin', i.e. to GitHub, and asks them what's the
current commit of 'master'. It will respond "abcde1234f", and your git
will see if it already has this commit. It *does have* the commit,
because I previously pushed exactly the state of the old repo, so there
will be no large data transfer. No cloning.
(Okay, this was a lie: I actually do have committed something to master.
But it will just pull that commit as usual.)
And if you gave me some kind of access to your workstation PC, then I
could pull your stuff directly from you. I'd just find out:
1. which commit is your branch's HEAD
2. download this commit, if I don't have got it already
3. for each parent of this commit:
4. download this commit, if I don't have got it already
5. for each parent:
6. download or already-have...
That would be the "timspc" remote.
I hope this made things a bit clearer
Cheers,
flo
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. Consolidate legacy IT systems to a single system of record for IT 2. Standardize and globalize service processes across IT 3. Implement zero-touch automation to replace manual, redundant tasks http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk
_______________________________________________ Lmuse-developer mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/lmuse-developer
