git mailing list

FromSubjectsort iconDate
Govind Salinas
git-p4 question
Hi All, Me again with more dumb git-perforce questions. I have been toying with git-p4 and I think it does everything I want except the crazy client map support. I figure I don't really need this. My client is something like this: //depot/sane/... //clientroot/crazy/... //depot/stuff/... //clientroot/dumb/... //depot/otherstuff/... //clientroot/dumb/... //depot/my/product/... //clientroot/src/realworkhere/... My "working directory" looks something like this: c:\path\crazy\xyz_from_perf...
Aug 9, 10:53 pm 2007
Evan Carroll
Problem with http-repos vs filesys-remote-repos
A disclaimer:: I could have mucked with anything, I will not place the blame on git as if I had strictly adhered to the tutorial instructions. Anything I did was through the UI, there was no mucking with files. Thanks in advance and good luck: I have one repos located on /var/git/scraper.git, it houses a small-inhouse project which I'm trying to use to sell git with. Unfortunately, I've had a very difficult time doing everything with git. Namely, pulling and pushing. It appears as if I git-clone th...
Aug 9, 7:40 pm 2007
Julian Phillips
Re: Problem with http-repos vs filesys-remote-repos
Have you enabled the post-update hook on your server (chmod +X /var/git/scraper.git/hooks/post-update)? You need to run "git update-server-info" after updating a repo to allow clones via http to work properly. The default post-update hook does this for you. -- Julian --- No, I do not know what the Schadenfreude is. Please tell me, because I'm dying to know. -- Homer Simpson When Flanders Failed -
Aug 9, 8:04 pm 2007
Joe Perches
git and linux kernel source
A few linux kernel source and git questions: What's the best procedure to handle a tree-wide source tranformation? For instance: git branch foo2bar egrep -r -w --include=*.[ch] -l "foo" * | \ xargs perl -pi -e 's/\bfoo\b/bar/msg' git commit -a -m "use bar not foo" Is there a way to separate the resultant single patch into multiple patches by subdirectory? Perhaps some git-rev-parse option? git-format-patch -p --stat -o outputdir Is there a way to automatically include the appro...
Aug 9, 7:11 pm 2007
J. Bruce Fields
Re: git and linux kernel source
Something like for each sub/dir: git add sub/dir git commit -m "use bar not foo in sub/dir" should do it. (Of course, in the particular case above the patches you ended up with probably wouldn't compile individually.) --b. -
Aug 9, 7:17 pm 2007
Joe Perches
Re: git and linux kernel source
Nor would it likely survive a git bisect, but it's a start. My goal is to eventually commit by maintainer. Thanks, Joe -
Aug 9, 9:59 pm 2007
David Kastrup
Re: git and larger trees, not so fast?
Ok, preaching to the pope here, but: moving memory is bad. Make sure data can stay where it starts. In particular: don't use realloc. And if you do, grow the size _exponentially_ (like a factor of 1.5). If you grow the size exponentially, at least the movery hits the algorithm with O(n lg n). If data stays put, even in badly scattered linear lists, we have O(n). If you grow realloc _linearly_ (constant size increment), then the algorithm is hit with O(n^2). Technically, basically _all_ op...
Aug 9, 2:06 pm 2007
moe
git and larger trees, not so fast?
hi guys, earlier today i imported one of my larger trees (~70k files) into git and was quite disappointed by the performance. i made some tests on latest master branch (1.5.3.rc4.29.g74276) and it seems like git hits a wall somewhere above ~50k files. i'm seeing 'commit' timings of 30s and up as well as 'status' timings in the 10s ballpark. here's a test-case (should be safe to copy/paste on linux, bash): # # first create a tree of roughly 100k files # mkdir bummer cd bummer for (...
Aug 9, 12:06 pm 2007
moe
git and larger trees, not so fast?
hi guys, earlier today i imported one of my larger trees (~70k files) into git and was quite disappointed by the performance. i made some tests on latest master branch (1.5.3.rc4.29.g74276) and it seems like git hits a wall somewhere above ~50k files. i'm seeing 'commit' timings of 30s and up as well as 'status' timings in the 10s ballpark. here's a test-case (should be safe to copy/paste on linux, bash): # # first create a tree of roughly 100k files # mkdir bummer cd bummer for (...
Aug 9, 12:30 pm 2007
Linus Torvalds
Re: git and larger trees, not so fast?
Good catch. Definitely not acceptable performance. We seem to spend a lot of our time in memcpy: samples % image name app name symbol name 200527 25.4551 libc-2.6.so libc-2.6.so _wordcopy_bwd_aligned 104505 13.2660 libc-2.6.so libc-2.6.so _wordcopy_fwd_aligned 99185 12.5907 libz.so.1.2.3 libz.so.1.2.3 (no symbols) 83452 10.5935 libc-2.5.so libc-2.5.s...
Aug 9, 1:11 pm 2007
Linus Torvalds
Re: git and larger trees, not so fast?
Sorry, that was a bogus trace with some old stuff in it. The real profile was this one. 102343 73.1377 libc-2.6.so libc-2.6.so _wordcopy_bwd_aligned 3573 2.5534 git git cache_name_compare 2328 1.6637 git git index_name_pos ... which matches the rest of my emails.. (the "73%" is actually really supposed to be about 95%, but I had X running and doing stuff at the...
Aug 9, 1:54 pm 2007
Linus Torvalds
Re: git and larger trees, not so fast?
Ouch. It's the diffing between HEAD and the index, and it's all from "add_index_entry()", which sorts the index array using an insertion sort. So when the index array gets large, that sort spends all its time in huge memmove() calls. The silly thing, of course, is that we don't even "need" to do that: both the index and the trees are really sorted already, so we could just interleave them. But since we read them separately, the thing just sucks. We've fixed other similar cases of this ...
Aug 9, 1:38 pm 2007
Linus Torvalds
Re: git and larger trees, not so fast?
In fact, I'm almost sure I will *not* have time today. Anyway, the really trivial (and ugly) fix is to handle the cases of adding _independent_ stages to the index (which is the case for both "git diff-index" and "git read-tree -m") differently: instead of using the standard "add_index_entry()", which does all the complex sorting and checks that there aren't duplicates, we could do a much simpler one that just unconditionally appends to the end of the index. This works, because when th...
Aug 9, 2:06 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
I hopefully have some time this evening to look into this, if not earlier. -
Aug 9, 2:11 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
So here is what I did during the lunch break. wt-status has two calls to run_diff_index() to do the equivalent of "git diff --cached". This codepath is the sole caller of read_tree(), and before calling read_tree(), vacates stage #1 entries, and reads tree contents to the index at stage #1, without any funky "merge" magic. This changes read_tree() to first make sure that there is not any existing cache entries at specified stage (from the above description, you can see this is not strictly ne...
Aug 9, 4:42 pm 2007
Sean
Re: git and larger trees, not so fast?
On Thu, 09 Aug 2007 13:42:50 -0700 Junio, This makes things _much_ better, however the final commit in the test script still shows a lot of user time: ## time git init real 0m0.005s user 0m0.001s sys 0m0.004s ## time git add . real 0m3.501s user 0m1.268s sys 0m2.159s ## time git commit -q -m 'buurrrrn' -a real 0m2.299s user 0m1.065s sys 0m1.317s ## time git status real 0m1.107s user 0m0.548s sys 0m0.557s ## time git status real ...
Aug 9, 4:52 pm 2007
Linus Torvalds
Re: git and larger trees, not so fast?
In the case where we do a partial commit (never mind that it's all the changes: when you give a path limiter, it's "partial"), "git commit" one goes through another path, and triggers the same issue with git read-tree --index-output=tmp-index -i -m HEAD which has the same O(n**2) issue (except it uses "unpack_trees()" rather than "read_tree()", so Junio's patch does nothing for it). So "builtin-read-tree.c" (or rather unpack-trees.c) would need the same kind of logic. Linus - ...
Aug 9, 5:41 pm 2007
Linus Torvalds
Re: git and larger trees, not so fast?
The path seems to be: cmd_read_tree -> unpack_trees -> unpack_trees_rec -> [ recursive .. unpack_trees_rec ] -> oneway_merge -> keep_entry -> add_index_entry() and here again we end up having the same insertion sort issue. Linus -
Aug 9, 5:46 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
Quite honestly, I was this (shows the "thumb and index finger almost touching" gesture) close to declare that unpack-trees is unsalvageable, and was planning to redo the one-tree (and perhaps two-tree) read-tree without using that mess after 1.5.3. -
Aug 9, 6:02 pm 2007
Daniel Barkalow
Re: git and larger trees, not so fast?
Yeah, that's probably the right thing to do; I wrote it with the idea that we'd be doing many-parent merges with it, but merge-recursive turned out to be a better idea, so I designed it to be comprehensible for a complicated case we never actually do. -Daniel *This .sig left intentionally blank* -
Aug 9, 9:42 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
While I do not think the previous one was hacky at all, this one IS a hack, not meant for inclusion. It makes the partial commit codepath to use vanilla "git read-tree" without any single tree merge semantics, and rewrite that codepath to use read_tree() which was changed with my previous patch. --- builtin-read-tree.c | 5 ++++- git-commit.sh | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/builtin-read-tree.c b/builtin-read-tree.c index a3b17a3..61e...
Aug 9, 7:38 pm 2007
Linus Torvalds
Re: git and larger trees, not so fast?
Ugh. I had some time, so I tried to find out *why* that thing is so slow. The fact is, "git read-tree -m HEAD" should be really really fast, because it should never actually insert multiple entries into the same index entry: it should just _replace_ the entry. But why is it slow? It doesn't actually replace the entry with "add_cache_entry()" at all. What it does is to *remove* the entry entirely at unpack-trees.c, line 154, unpack_trees_rec(), which does a "remove_cache_entry_at(...
Aug 9, 8:44 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
Heh, that makes the two of us. I have been wanting to revamp or kill off unpack-trees for quite some time, and after all the patch you are responding to might be a small first step in the right direction ;-). -
Aug 9, 8:51 pm 2007
Linus Torvalds
Re: git and larger trees, not so fast?
Well, the patch you sent out was not only hacky, it was kind of pointless. Without the "-m" handling, it means that most users of git-read-tree won't ever see the improvement. The merge with the old index is absolutely critical for things like switching branches, for example. And I think you probably screwed up performance with your change to git-commit to simply not use it, because now the resulting index will be totally stale, and while the *commit* may be fast as a result, the subseque...
Aug 9, 8:57 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
I do not think the change affects the normal codepath. The one-liner patch to git-commit.sh touches the codepath that updates the index used only to write out the partial commit, and losing the cached stat info from that index does not matter, as that index is removed immediately after writing the tree out and is never compared with working tree as far as I can tell. -
Aug 9, 11:48 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
Just in case anybody is wondering, this also passed all the existing tests. Maybe it is going in the right direction of slowly moving away from unpack_trees() where we can. I dunno. I also do not know if it "fixes" the performance issue on that testcase. -
Aug 9, 8:04 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
I really do not have time to look into this for now until late in the evening, but it is not surprising at all that per-path partial commit is _always_ slower than the whole tree commit. It simply needs to do _extra_ work, such as (1) re-initializing a temporary index from the tree, (2) add the named entries to that temporary index, and (3) add the same named entries to the real index. After that it writes a tree out of the temporary index but the cost for that is the same as writing out of the ...
Aug 9, 5:37 pm 2007
Junio C Hamano
Re: git and larger trees, not so fast?
One thing to keep in mind is that in your earlier test of "git write-tree" (or "git commit") followed by "git add a/file" followed by "git write-tree" is extremely fast because the last operation optimizes otherwise O(n) behaviour of write-tree Right now we do not cull the subdirectory that we _know_ are unchanged in "git diff-index --cached" using cache-tree, but diffing the index against the tree could be instantaneous. -
Aug 9, 2:00 pm 2007
Steven Grimm
Re: Bug in git-svn: dcommit commits in the wrong branch afte...
That's exactly what I would expect to happen. The "git-rebase" is the key here; it is effectively telling git to switch back to your master branch. Try running "git log" before and after the rebase command and you should get a slightly better idea of what's happening. Rebase is kind of a tricky beast; a basic rule of thumb is that you should only use it to go forward in time on a single upstream branch, not to hop between upstream branches. Its behavior in non-forward-in-time cases is predic...
Aug 9, 11:46 am 2007
Benoit SIGOURE
Re: Bug in git-svn: dcommit commits in the wrong branch afte...
Actually the test case is wrong, it should end in: git-rebase b # while being on `master' branch git-svn dcommit # this works as expected Thanks to siprbaum for spotting this on IRC. Sorry for the noise. -- Benoit Sigoure aka Tsuna EPITA Research and Development Laboratory
Aug 9, 11:45 am 2007
ukleinek
[PATCH 0/2] patches for send-email
Hello, this series is mainly a last test for the second patch. The first patch is just a resend for a mail I sent a earlier today. You can fetch these on top of Junio's current next from git://www.modarm9.com/gitsrc/pub/people/ukleinek/git.git (in case you fear not to be able to extract my name properly out of the mails (or I didn't manage to get them right) :-)) Best regards, Uwe -
Aug 9, 9:27 am 2007
ukleinek
[PATCH 1/2] send-email: rfc822 forbids using <address@dom...
Email::Valid does respect this considering such a mailbox specification invalid. b06c6bc831cbb9e9eb82fd3ffd5a2b674cd940d0 addressed the issue, but only if Email::Valid is available. Signed-off-by: Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> --- git-send-email.perl | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/git-send-email.perl b/git-send-email.perl index 39e433b..a02ab96 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -408,8 +408,...
Aug 9, 9:27 am 2007
ukleinek
[PATCH 2/2] send-email: get all the quoting of realnames right
- when sending several mails I got a slightly different behaviour for the first mail compared to the second to last one. The reason is that $from was assigned in line 608 and was not reset when beginning to handle the next mail. - Email::Valid can only handle properly quoted real names, so quote arguments to extract_valid_address. This patch cleans up variable naming to better differentiate between sender of the mail and it's author. Signed-off-by: Uwe Kleine-König <ukleinek@infor...
Aug 9, 9:27 am 2007
Gerrit Pape
[PATCH] git-merge: do up-to-date check also for strategies o...
If called with one argument, check also for no_trivial_merge_strategies whether all the merge can already be reached by HEAD. Otherwise git-merge creates an unnecessary commit, e.g.: $ (git init && touch foo && git add foo && git commit -m foo) >/dev/null $ git merge -s ours master Merge made by ours. $ git log --pretty=oneline d941346f022b7cb70c51d8122de4ae82657ae943 Merge branch 'master' 68a1d32229917d5d1f4c8f64096d1abde84e9f6b foo $ Signed-off-by: Gerrit P...
Aug 9, 8:08 am 2007
Junio C Hamano
Re: [PATCH] git-merge: do up-to-date check also for strategi...
Right now I do not have time to dig mailing list archive around mid March 2006, and I do not recall the requestor's original rationale, but I have a vague recollection that we added this "no fast-forward check" specifically in response to a user request. -
Aug 9, 5:11 pm 2007
Jeff King
Re: [PATCH] git-merge: do up-to-date check also for strategi...
Maybe it was the "I'm using a custom merge strategy that might refuse the merge, but fast-forwards don't even invoke my merge strategy" request? -Peff -
Aug 9, 8:01 pm 2007
David Kastrup
git-rewrite-history behaves quite contrary to documentation
git-filter-branch --index-filter 'git-update-index --force-remove --remove -g bilder bilder3' master trunk Rewrite a7a8f2fc263256c98ed5220e7467d34584c8c6ac (58/58) Ref 'refs/heads/master' was rewritten Ref 'refs/remotes/trunk' was rewritten These refs were rewritten: fatal: Not a git repository: '/rep/akspiele/.git-rewrite/t/../../.git' The manual page, however, claims: git-filter-branch [--env-filter <command>] [--tree-filter <command>] [--index-filter <command>]...
Aug 9, 7:30 am 2007
David Kastrup
Re: [GUILT PATCH 2/5] guilt-guard: Assign guards to patches ...
Yes. Neither is [[:space:]]. The above actually is pretty much equivalent to $(RM) "$series+" sed "/^$p/s/\$/ #$x/" "$series" >"$series+" $(MV) "$series+" "$series" Which is probably not what was intended (the whole [[:space:]] construct is irrelevant). More likely it was intended to do something like $(RM) "$series+" sed "/^$p[ ]/s/\$/ #$x/" "$series" >"$series+" $(MV) "$series+" "$series" or if $p can contain slashes but not commata, ...
Aug 9, 4:43 am 2007
David Kastrup
Re: [GUILT PATCH 2/5] guilt-guard: Assign guards to patches ...
The problem with the above is that it reacts strangely to multiline options. Should be much better (and faster on shells without builtin printf) to use case "$x" in [+-]*) sed -i -e ... ;; *) echo "'$x' is not ... esac and this runs portably without forking on shells that are 30 years old. Shell script programmers _really_ should know "case" inside out. \ does not need to be escaped in double quotes except before \, $ and `. You can write sed -i -e "s,^\...
Aug 9, 4:17 am 2007
Eric Lesh
Re: [GUILT PATCH 2/5] guilt-guard: Assign guards to patches ...
There shouldn't be multiline options passed to this function, so it Heh, as you may have noticed, I'm no shell programmer :-) Thanks for Yeah. That one made itself clear. The sed -i needs to go too, as Thomas observed. The regexp itself also needs cleansing. Lots of work to do... Eric -
Aug 9, 5:01 am 2007
Thomas Adam
Re: [GUILT PATCH 2/5] guilt-guard: Assign guards to patches ...
I'm surprised to see 'sed -i' being at all, it's certainly non-portable. -- Thomas Adam -
Aug 9, 4:22 am 2007
Eric Lesh
Re: [GUILT PATCH 2/5] guilt-guard: Assign guards to patches ...
You're definitely right. I've been asked to change this a couple of times and keep forgetting. Thanks for the reminder. Eric -
Aug 9, 4:53 am 2007
David Kastrup
Re: [PATCH] Mod. gitk to support REBASE (with stash support).
Duh. But why are the menus called "Browse master's Files" and "Browse Branch Files" rather than "Browse heads/master" or "Browse master's head" versus "Browse any commit" or maybe just "Browse current" and I though about the blame window after my first posting (actually, I did not yet notice one can move around in the revisions in the blame. Ok, ok. Still, commits and history are much more visible as whole in gitk: git-gui mostly lets one pick out single views (the blame window is probably th...
Aug 9, 3:55 am 2007
Mike Hommey
git-filter-branch
Hi, What is supposed to be the usage() of git-fetch-branch ? git-filter-branch itself says: git-filter-branch [-d TEMPDIR] [FILTERS] DESTBRANCH [REV-RANGE] while the documentation doesn't explicitely talk about DESTBRANCH, expect in the form of an hypothetical /newbranch/, that you obviously don't give to the command line. And whereas git-filter-branch itself says there is such an argument, it actually doesn't take it, and doesn't seem to be hardwired to create a new branch instead of overw...
Aug 9, 2:34 am 2007
Johannes Schindelin
Re: git-filter-branch
Hi, This is an unfortunate left-over. The syntax described in the Hmm. I don't have time to look into this now, but the syntax is this: git filter-branch [<options>] [--] [<rev-options>] Those refs that you give in the <rev-options> are rewritten. AFAIR the No, this will not happen. Filter-branch is meant to clean up branches, so it will rewrite the commits. However, you might be able to hack something in a parent filter. Ciao, Dscho -
Aug 9, 4:58 am 2007
Mike Hommey
Re: git-filter-branch
In the description in the manpage: Lets you rewrite git revision history by creating a new branch from your current branch, applying custom filters on each revision. (...) The command takes the new branch name as a mandatory argument and the filters as optional arguments And in example: Now, you will get the rewritten history saved in the branch newbranch (your current branch is left untouched). That would need the commit id for the original commit being treated at the ...
Aug 9, 5:15 am 2007
Johannes Schindelin
Re: git-filter-branch
Hi, To compare with the old one? Use reflogs: git filter-branch --some-option master IIRC the "map" function will handle that. Ciao, Dscho -
Aug 9, 5:19 am 2007
Mike Hommey
Re: git-filter-branch
To have, for example, a branch tracking an upstream (svn or whatever) repository and have a branch based on it, only differing in the fact that some directories get removed. To be more specific, I'm tracking webkit's svn repository, and want to have a branch which would be a base for making source tarballs for debian, excluding a lot of cruft (such as LayoutTests which are *huge*, or the website that also lives in the same svn trunk). As files are added frequently in these directories, rebase o...
Aug 9, 5:30 am 2007
Johannes Schindelin
Re: git-filter-branch
Hi, You can always achieve the same effect by $ git branch new-branch master $ git filter-branch <options> master Anyway, I'm off for a few days. Ciao, Dscho -
Aug 9, 5:38 am 2007
Steffen Prohaska
msysgit: does git gui work?
Does 'git gui' work for you in msysgit? I get Invalid command name "git-version" while executing "git-version >= 1.5.3" (in namespace eval "::blame" script line 36) [...] with msysgit (v1.5.3-rc2-690-g8ca1f6a). Steffen -
Aug 9, 3:24 am 2007
previous daytodaynext day
August 8, 2007August 9, 2007August 10, 2007