Show 45 quoted lines
>-----Original Message-----
>From: Jeremy Morton <admin@game-point.net>
>Sent: Saturday, April 22, 2023 3:45 PM
>To: rsbecker@nexbridge.com; git@vger.kernel.org
>Subject: Re: Proposal: tell git a file has been renamed
>
>I read that git mv is basically the equivalent to deleting the old file, creating the new
>file, and adding the changes. Isn't it? If so it's gonna have the same problem as I
>have now.
>
>--
>Best regards,
>Jeremy Morton (Jez)
>
>On 22/04/2023 19:54, rsbecker@nexbridge.com wrote:
>> On Saturday, April 22, 2023 2:02 PM, Jeremy Morton wrote:
>>> Yes, I know Linus specifically doesn't store file rename info in Git.
>>> The trouble is, every now and then, I'll come across a situation
>>> where Git doesn't successfully detect that I've renamed a file
>>> because I'm doing something like renaming a class at the same time.
>>> So I'll have a file OldClassNameTests.cs and a NewClassNameTests.cs
>>> but a bunch of lines in that file have also changed from
>>> OldClassName.DoThing() to NewClassName.DoThing(). I can clearly see
>>> that this is a rename, but Git sees enough changed content that it
>>> doesn't realize it, and puts it in as a delete/add, losing the content history.
>>>
>>> The standard answer for this is to rename the file in one commit,
>>> then make the changes. That's fine if you know ahead of time you'll
>>> want to do this. However it's a total PITA if you have a bunch of
>>> changes and you realize that a rename has caused this problem. You
>>> now have to back out your changes to the renamed file, add the rename, commit
>it, then re-apply the changes.
>>>
>>> Could a command be added to git that means you tell Git that counts
>>> as a file rename? Git would add a marker to the staging area that
>>> the file has been renamed, and upon commit, would first generate an
>>> additional commit for each rename before generating the main commit,
>>> ensuring the rename operation counts as an actual rename, and the content's
>history is maintained.
>>
>> Would git mv work in your situation? You can stage changes to the original file,
>then use git mv. Or use git mv first. The rename shows as staged in any event.
>> --Randall
>>
>>