Есть ли разница между git mv и ходом MS-DOS?

Вопрос

Имеет ли значение, если я перемещаю отслеживаемые файлы Git с помощью git mv команда, а не просто перемещение файлов с MS-DOS move или проводник Windows?

Еще во времена Subversion нужно было использовать, например, TortoiseSVN SVN Move versioned files here приказ сохранить историю нетронутой

Я ожидал, что в Git он будет работать точно так же, но тест (см. Пример ниже) показал, что Git самостоятельно обнаруживает, что файл был перемещен и что история сохраняется нетронутой.

Так зачем использовать git mv совсем?

пример

C:\test>git init
C:\test>mkdir folder
C:\test>cd folder
C:\test\folder>echo "1" > file.txt
C:\test\folder>git add .
C:\test\folder>git commit -m "Initial commit"
C:\test\folder>echo "2" >> file.txt
C:\test\folder>git add .
C:\test\folder>git commit -m "Update file.txt"
C:\test\folder>move file.txt ..
C:\test\folder>cd ..

C:\test>git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    folder/file.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        file.txt

no changes added to commit (use "git add" and/or "git commit -a")

C:\test>git add -A
C:\test>git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        renamed:    folder/file.txt -> file.txt

C:\test>git commit -m "Moved file.txt with the move command"

Вся история была сохранена, несмотря на неиспользование git mv и Git говорит, что обнаружил переименование.

C:\test>git log --oneline --follow file.txt
6bd3c05 Moved file.txt with the move command
5b55aea Update file.txt
5b9b255 Initial commit

2 ответа

Решение

git mv делает постановку для вас, так что вам не нужно git rm olfdfile а также git add newfile после физического перемещения файла через mv/MOVE/explorer.exe,

Это специально.

Когда вы используете git mv он будет индексировать изменения для вас

Если вы делаете это вручную с вашей ОС, вам нужно будет сделать

git add -A <previous-path-to-file-that-was-moved>
git add <new-path-to-file>

Так что git понимает, что вы на самом деле переименовали файл.

Другие вопросы по тегам