-
Notifications
You must be signed in to change notification settings - Fork 140
[RFC] Revert/delay performance regression in 'git checkout -b' #317
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC] Revert/delay performance regression in 'git checkout -b' #317
Conversation
/submit |
Submitted as [email protected] |
@@ -16,3 +16,11 @@ will checkout the '<something>' branch on another remote, | |||
and by linkgit:git-worktree[1] when 'git worktree add' refers to a |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the Git mailing list, SZEDER Gábor wrote (reply to this):
On Wed, Aug 21, 2019 at 12:18:33PM -0700, Derrick Stolee via GitGitGadget wrote:
> This reverts commit 65f099b3988198f0fdf3ef7a21dc01c556d21fff, which
> removed logic for avoiding extra cost in "git checkout -b" in favor
> of the new "git switch -c". This will cause a performance issue for
> users in large repos.
It always makes me sad when I see a pull request, where all the
relevant information is only included in the PR, which will not be
part of the history, but not in the commit messages...
> builtin/.checkout.c.swp | Bin 0 -> 77824 bytes
> diff --git a/builtin/.checkout.c.swp b/builtin/.checkout.c.swp
> new file mode 100644
> index 0000000000000000000000000000000000000000..f6dad4abb02c265ee66b3f6f76d00d59b9b524a4
> GIT binary patch
> literal 77824
> zcmeIb37F(pRrf#a46<X03c_z1GgCe3>dYjdA(>2=r6*}KnI2}zLK2GV?&_Y(bXPT1
> z)icux34uRC00rR{;pJ5jL_ico7FiV85d;D8CG1O3By6%HioE<k-*fK$ZB^AXi9sKq
Uh-oh.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On the Git mailing list, Derrick Stolee wrote (reply to this):
On 8/21/2019 6:15 PM, SZEDER Gábor wrote:
> On Wed, Aug 21, 2019 at 12:18:33PM -0700, Derrick Stolee via GitGitGadget wrote:
>> This reverts commit 65f099b3988198f0fdf3ef7a21dc01c556d21fff, which
>> removed logic for avoiding extra cost in "git checkout -b" in favor
>> of the new "git switch -c". This will cause a performance issue for
>> users in large repos.
>
> It always makes me sad when I see a pull request, where all the
> relevant information is only included in the PR, which will not be
> part of the history, but not in the commit messages...
An issue with the RFC quality at the moment. I'll do a better job
if we decide to move this direction.
>> builtin/.checkout.c.swp | Bin 0 -> 77824 bytes
>
>> diff --git a/builtin/.checkout.c.swp b/builtin/.checkout.c.swp
>> new file mode 100644
>> index 0000000000000000000000000000000000000000..f6dad4abb02c265ee66b3f6f76d00d59b9b524a4
>> GIT binary patch
>> literal 77824
>> zcmeIb37F(pRrf#a46<X03c_z1GgCe3>dYjdA(>2=r6*}KnI2}zLK2GV?&_Y(bXPT1
>> z)icux34uRC00rR{;pJ5jL_ico7FiV85d;D8CG1O3By6%HioE<k-*fK$ZB^AXi9sKq
>
> Uh-oh.
Whoops! I thought I removed this in time to submit, but I guess I
did not.
-Stolee
On the Git mailing list, SZEDER Gábor wrote (reply to this):
|
On the Git mailing list, Elijah Newren wrote (reply to this):
|
On the Git mailing list, Elijah Newren wrote (reply to this):
|
On the Git mailing list, Derrick Stolee wrote (reply to this):
|
On the Git mailing list, Derrick Stolee wrote (reply to this):
|
This reverts commit 65f099b, which removed logic for avoiding extra cost in "git checkout -b" in favor of the new "git switch -c". The new switch builtin is still an experimental feature, so stating "large repos should use 'git switch'" is too aggressive. When a user runs "git checkout -b <branchname>" they are pretty clear in stating that they only want to create a branch and not update the working directory. The difficulty comes in detecting that we are actually in that case. That is why the skip_merge_working_tree() method is so detailed: there are many settings to check to ensure the arguments match as expected. Signed-off-by: Derrick Stolee <[email protected]>
73cf579
to
75be0fd
Compare
Replaced by #325 |
As we were integrating Git 2.23.0 into VFS for Git, we discovered that "git checkout -b new-branch" went from 0.3s to 10+s on the Windows OS repo. This was an intentional change when writing the "git switch" builtin. Here is the commit message for 65f099b ("switch: no worktree status unless real branch switch happens" 2019-03-29):
I was considering doing a full, long-term revert of this change to get the performance back to normal, but I also saw this feedback on the list for this patch:
So, the goal is to reduce the complication given by skip_merge_working_tree() by recommending that users use 'git switch -c'. The only problem is: users will take a while to move, unless prompted.
This series does the following:
This allows us to strip out this performance feature after users have had time to adopt the new way of doing things.
Cc: [email protected], [email protected]