| From | Subject | Date |
|---|---|---|
| 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 day | today | next day |
|---|---|---|
| August 8, 2007 | August 9, 2007 | August 10, 2007 |
| Zach Brown | [PATCH 3 of 4] Teach paths to wake a specific void * target instead of a whole tas... |
| Linus Torvalds | Re: LSM conversion to static interface |
| Greg Kroah-Hartman | [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO |
| Andrew Morton | -mm merge plans for 2.6.23 |
git: | |
| Gregory Haskins | [RFC PATCH 00/17] virtual-bus |
| David Miller | [GIT]: Networking |
| Jarek Poplawski | Re: [PATCH] pkt_sched: Destroy gen estimators under rtnl_lock(). |
| Gerrit Renker | [PATCH 27/37] dccp: Integration of dynamic feature activation - part 2 (server side) |
