Есть ли разница между 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 понимает, что вы на самом деле переименовали файл.