Git


#1

I don’t think anything has ever made me more angry than GIT. In all my experience of coding, library clashes, project setting errors, everything… NOTHING has EVER made me so infuriated.

Why have you done this to us, jules? :’( The mind is a powerful thing; picture a highly emotive scene of a crying child in a burning room. Hard objects are tumbling down, and toys that were once precious and joyful now attack with their bodies aflame. That is the suffering! We already live in the future, why are we using such an unfriendly system? :’( so far, any time I’ve attempted to ‘get latest’, i find myself with everything broken, and nothing works until I’ve deleted it all and checked it all out again fresh.

We could really do with some kind of proper guide for this… [like, get this client. click this to do this. don’t click this to do that because everything will break and you’ll cry like haydxn did that time].

Anyway, rant over. Keep up the good work! You never know, it might turn out that my GIT stuff was actually fine and the latest tip was just broken :wink:


#2

As predicted, my total replacement of juce leaves me with everything working nicely. I always knew there’d be nothing wrong with your code, jules :slight_smile:


#3

If you’re on windows, you should set “autoCRLF” to false in your .gitconfig, as Juce repository already contains CRLF.


#4

oh, sure! one of the many reasons why it is a huge step backwards…
[from a general usability standpoint, it’s crazy that there’s not really any kind of indication of any of this. even with the clients i’ve tried, maybe they’ve said something to me like “Hey, do you want to set autoCRLF to false in your gitconfig? the repository might already contain CRLF” and I’ll go “Buhhh…”; maybe it could, like, have a look? the interfaces on these things are so cryptic and unhelpful, even when they’re clearly ‘trying’ to be friendly, there’s still just no way of grokking any of it. Maybe it’s just that I’m too used to SVN (which, admittedly, isn’t particularly friendly either) and slightly different meanings to terminology… or maybe I’ve just had my interface expectations ruined by making family-friendly computer games.

This is just torture!

When I’ve figured it out, you can bet yo’ asses I’m gonna make a no-nonsense guide to getting stuff done with it. I don’t want anyone else to suffer like this! :slight_smile: [of course, if someone wants to write one first, that’ll be nice]

[btw, ignore me, i’m just feeling petulant :)]


#5

It’s because GIT dev comes from Unix world. So there own line ending (LF) are usually used in the repository.
They are added autoCRLF = true by default that convert LF file in Git repo to CRLF automatically (when set up correctly).
However, the files in Juce’s repos already have CRLF so you must tell git that no conversion is required.

It tooks me quite a lot of time to figure this out. If you don’t do that all the file you’re cloning will be totally modified (from GIT point of view).


#6

I’ve never knowingly changed the line-ending settings, but have never had any problems at all with them. Maybe because I’m on a mac… (?)


#7

Yes, it’s not Juce’s repo issue. It’s something that must be known about GIT (know your tool if you want to use it).
It’s a shame It’s not documented clearly what is the default behaviour in GIT manual (can we talk about a git manual, or a git man page library ?)


#8

Mmmm, while not exactly Juce related, a basic git manual could make an interesting article in my new online book, called “Cooking with Jules”. Lovely Jubbly!


#9

okay, so how do I set autocrlf to false in my gitconfig? there’s no option i can see in any of the client apps i’m using; am I expected to hand-edit a text file or some other woefully archaic act? for a library that’s so determined to eschew bad old-fashioned practises, this GIT lark is horribly jarring.


#10

If you’re using an archaic client, you’ll have to edit the file in “.git/config” (with a text editor)
Mine contains:

[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true
	autocrlf = false
	safecrlf = false
[remote "origin"]
	fetch = +refs/heads/*:refs/remotes/origin/*
	url = git://juce.git.sourceforge.net/gitroot/juce/juce
[branch "master"]
	remote = origin
	merge = refs/heads/master
[branch "cyril"]
	remote = origin
	merge = refs/heads/master
[user]
	name = 
	email = 

I’m using TortoiseGIT, and I can change this option in “Settings” / “Git” / “Config” / uncheck AutoCRLF and SafeCRLF.
Beware that you have to “checkout -f” (force) to overwrite the repository once you’ve changed this (or clone again), because you must tell GIT to recompute all it’s diff tree.


#11

It’s pretty hilarious reading all that. "oh, of course!"
i’m using SmartGit, incidentally, from others’ recommendations


#12

Oh, dear… sorry you’re having problems.

Wish I were more of a Git expert, but I should point out that I use it so much (without ever really understanding it!) that I create a new new git repository in basically any directory I create… because it’s so extremely light-weight.

Perhaps some Windowser should extract the results of this thread into a page - “How to use git and JUCE on Windows”?


#13

Git is driving my crazy as well…

i honestly don’t know how to do anything else than clone a repository, and then i have to edit everything again. its a nightmare.
Just as i was starting to think how smartgit should be one of the worst , unfriendly, poorly documented, and ugly piece of software i’ve seen, they’ve decided to start charging for it :Z Thats what i call rape-ware where they rape you to use it.
i’m back to waiting for hours on
git clone git://juce.git.sourceforge.net/gitroot/juce/juce

It could be great to have some kind of guide on how to use git in this specific usage type, because i could not find anything remotely relevant on the web. :evil:


#14

Above the step I’ve posted if you’re using GIT on windows (autocrlf / safecrlf = false), here’s a typical list of command you can perform:

1st time:

  • git clone git://juce.git.sourceforge.net/gitroot/juce/juce
  • Create your branch for working on it : git branch user

You can now make you changes

Then day to day work

  • Commit your changes to your branch:
    git checkout user ; Might fail if you’re already in user branch
    git commit -a
  • Switch to master branch (this is what you get when you clone)
    git checkout master
  • Pull the changes from juce
    git pull origin
  • Then merge with your branch
    git checkout user
    git merge origin
  • If you don’t care about having the “genuine” Juce code, you can skip the previous 3 step and issue this instead:
    git pull origin user ; Will try to merge all change from Jules to your local branch
  • Make your change and commit
    git commit -a

#15

Thanks!
i’m using a mac, but this seems something i can duplicate on my mac.
now ill have to wait until the next juce update to see if i get this to work :slight_smile:


#16

Also, another useful command when you don’t care about your local change to Juce (that is, you made change to Juce, send them to him, and he included them a bit modified, so you now get conflicts):

git fetch origin
get reset --hard origin

This get Jules’ version, and reset your repository to his version. Beware, all your local changes are lost, so you better commit then to a branch before typing these commands.
Usually I have a branch only containing my local juce_Config.h so I can rebase easily.


#17

Ok, i now officially hate git more than any software i’ve ever worked with. it is what i call forceware or better yet rapeware.

SmartGit is no good at all. it simply would not clone juce so that’s out the window. it would just randomly freeze while trying to clone.

i tried following the instructions via the terminal window, and cloned juce which took me 3 hours(!?).
then i made my own branch, compiled juce with my changes, committed them,and switched back to the master branch. so far so … ehm kind of good.
now when i tried to pull from the origin, it got stuck on 1% for an hour. i stopped it. tried again, and again it got stuck for an hour on 1 %…

i thought this must be a software problem so i downloaded a new git installer for mac from google code. now, i tried to repeat the process, and it asked me to commit changes, with a list of files containing all of juces files and stuck in some kind of enigmatic text editor with no instructions what so ever(!?). couldn’t figure out how to even save this or go forward. looked for help on the net but it seems so convoluted and cluttered just quit and cloned juce again (that was 20 minutes ago and im still at 3% yay…)

my internet connection is fine.

i don’t know what i’m doing wrong.


#18

:slight_smile: i feel your pain. Every time i try to update, i always end up having to just start from scratch. Absolute bollocks is what it is. Never thought i’d prefer SVN to anything! [using SVN daily at work on huge game projects with gigs of assets, SVN properly brings your computer to its knees!]. I’m sure GIT is more convenient at jules’ end for maintaining the changes, but it’s no fun for the peons on the other end of the string.

[having said that, i think the last time i ‘got latest’, it wasn’t a total failure- though it did involve the manual setting of a parameter in an ini file… an ini file that didn’t even contain the parameter to change in the first place as it had a default value; I had to be told in this thread that the param even existed and what to set it to - even if i’d eventually in desperation found myself looking at that ini file in hope of fixing it, i’d never have stumbled upon the solution as the param wasn’t listed!]

In other words, the opposite of a user friendly system.

BUT if it’s easier for jules it means we get quicker and more awesome developments like he has been providing us with lately, and for that I can put up with anything :slight_smile:


#19

Ok, then a magic command for you:
Add “–depth 1” when you clone. Almost instantly you’ll get the last commited version, but not the history.
You can’t revert but from your point of view, I think you don’t care.

So the command is like:
git clone --depth 1 git://juce.git.sourceforge.net/gitroot/juce/juce

@haydxn:
Did you know you can “git init” your repository, or directly checkout the last Jules version (like: “git pull” > conflict > “git checkout HASH_OF_LAST_JULES_VERSION” / No more conflict) ?


#20

This time I cannot resist to say what I think about git.

I’m on Windows, I’ve just updated TortoiseGit from 1.3.6.0 to the latest 1.4.4.0. Today I used the usual “pull” command that I have always used to refresh my checkout of the JUCE code. Suddenly most of my icons have turned red, indicating the modification of 655 files. What modifications, I only did an update of my checkout!

At least on windows, the tools are awful. After I did a brand new checkout, I beg your pardon, “clone” of the entire JUCE code, I discovered that I could not delete the old directory, not even after a reboot, because the TGitCache process didn’t want to let it go. I had to kill the process!

I am the technical manager for a software house. If someone asked me to switch from SubVersion to something that identifies a revision with something like ‘c1f4f5501f2bf2183c962786d74cb44b8df1ed5a’ instead of a progressive number, guess what would be my answer?