git mv 和 MS-DOS 移动之间有区别吗?
Is there a difference between git mv and the MS-DOS move?
问题
如果我使用 git mv
command as opposed to just moving the files with MS-DOS move
或 Windows 资源管理器移动 Git 跟踪的文件,会有什么不同吗?
回到 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
git mv
也会为您进行暂存,因此您在通过 mv
/[ 物理移动文件后不需要 git rm olfdfile
和 git add newfile
=14=]/explorer.exe
.
这是on purpose。
当您使用 git mv
时,它会为您索引修改内容
如果您使用 OS 手动执行此操作,则需要执行
git add -A <previous-path-to-file-that-was-moved>
git add <new-path-to-file>
以便 git 了解您实际上重命名了文件。
问题
如果我使用 git mv
command as opposed to just moving the files with MS-DOS move
或 Windows 资源管理器移动 Git 跟踪的文件,会有什么不同吗?
回到 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
git mv
也会为您进行暂存,因此您在通过 mv
/[ 物理移动文件后不需要 git rm olfdfile
和 git add newfile
=14=]/explorer.exe
.
这是on purpose。
当您使用 git mv
时,它会为您索引修改内容
如果您使用 OS 手动执行此操作,则需要执行
git add -A <previous-path-to-file-that-was-moved>
git add <new-path-to-file>
以便 git 了解您实际上重命名了文件。