'VS Code 'git mv' to preserve file history?
Is there any way in VS Code to change a file's name so that the file history is preserved in git, and it doesn't think the tracked file's been deleted?
I'm hoping for a GUI implementation of the command:
git mv oldName.abc newName.xyz
Thanks
Solution 1:[1]
There is no need for it. Just rename the file. Git will detect renames regardless of whether git mv
was used or not.
Try it: rename it in the normal way, stage the file under both the old and the new name (or just do git add .
) and then run git status
in the console, it should show up as rename and not as creation and deletion, so history is always preserved.
Solution 2:[2]
Git does not store the information that files are renamed. It detects it only when it does a diff (in git diff
/ status
/ log
/ etc.).
There is an option -M
to control the level of this rename detection.
-M[<n>], --find-renames[=<n>]
Detect renames. If n is specified, it is a threshold on the similarity index (i.e. amount of addition/deletions compared to the file’s size).
For example, -M90% means Git should consider a delete/add pair to be a rename if more than 90% of the file hasn’t changed. Without a % sign,
the number is to be read as a fraction, with a decimal point before it. I.e., -M5 becomes 0.5, and is thus the same as -M50%. Similarly, -M05
is the same as -M5%. To limit detection to exact renames, use -M100%. The default similarity index is 50%.
Try it with:
git status -M10%
For VS Code, you can use the GitLens extension, it provides an option to control this threshold, the setting is called similarityThreshold
.
gitlens.advanced.similarityThreshold Specifies the amount (percent) of similarity a deleted and added file pair must have to be considered a rename
Try to set it to 10
and check the history through GitLens, it should detect the file rename better.
Solution 3:[3]
Since git sometimes does not detect rename operations, I have installed this extension in Visual Studio Code which so far seems to work fine to rename files and doing a git mv
underneath:
https://marketplace.visualstudio.com/items?itemName=ambooth.git-rename
The cool thing from the README.md is that during rename a new directory location can be specified:
Usage
Right-click on a file in the File Explorer and choose "Rename (git-mv)". Using the input text field that appears, enter the new name and press Enter. Note: Directory location can also be altered by adjusting the path.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | CherryDT |
Solution 2 | DLight |
Solution 3 | Jeroen Wiert Pluimers |