WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Git · Advanced · question 59 of 100

Can you describe Git’s internal mechanisms for handling file renames and moves?

📕 Buy this interview preparation book: 100 Git questions & answers — PDF + EPUB for $5

Git has a powerful mechanism for detecting and tracking file renames and moves in a repository’s history. This is important because renaming or moving a file in a project is a common operation that developers perform, and it is essential to be able to track such changes in order to understand how the project has evolved over time.

Git uses a heuristic algorithm to detect file renames and moves, based on the content of the files being compared. When you commit changes that rename or move a file, Git calculates a "similarity score" between the old file and the new file. If the score is high enough (default threshold is 50%), Git assumes that the file has been renamed or moved, rather than deleted and a new file added.

Git tracks file renames and moves using a special data structure called the "rename/copy score". This is a table that maps pairs of file paths to a similarity score. When you run git log or other commands that show the history of a repository, Git uses this table to display the correct file names for renamed or moved files, as well as to display information about the history of those files.

For example, let’s say you have a file called oldfile.txt in your repository, and you want to rename it to newfile.txt. You can use the git mv command to do this:

    $ git mv oldfile.txt newfile.txt

When you commit this change, Git will automatically detect the rename and track it in the repository’s history. If you run git log to view the commit history, you will see that the old file name is displayed with the new file name in parentheses, like this:

    commit abcdef1234567890abcdef1234567890abcdef12
    Author: John Doe <john@example.com>
    Date:   Fri Mar 25 16:45:32 2022 -0400
    
    Rename oldfile.txt to newfile.txt
    
    This commit renames the oldfile.txt file to newfile.txt, to better
    reflect its contents.
    
    diff --git a/oldfile.txt b/newfile.txt
    similarity index 100%
    rename from oldfile.txt
    rename to newfile.txt

The git log output shows that the file was renamed with a 100% similarity score, which means that Git is confident that it is the same file. The old file name is displayed with the new file name in the diff section of the output, and the rename is indicated in the "rename from" and "rename to" lines.

Overall, Git’s mechanisms for handling file renames and moves are very robust and powerful. They allow developers to make changes to the organization of their projects while still maintaining a clear and accurate history of the project’s evolution over time.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Git interview — then scores it.
📞 Practice Git — free 15 min
📕 Buy this interview preparation book: 100 Git questions & answers — PDF + EPUB for $5

All 100 Git questions · All topics