目录
描述
不像其它的 VCS 系统,Git 并不显式跟踪文件移动操作。 如果在 Git 中重命名了某个文件,仓库中存储的元数据并不会体现出这是一次改名操作。 不过 Git 非常聪明,它会推断出究竟发生了什么。
使用
使用 git mv 命令可以将一个文件或者目录移动到另一处,或者实现更名。
git mv <path> <target_path>
path | 文件的当前路径 |
target_path | 文件的目标路径 |
说明
git mv命令其实就是 mv 命令与git add命令的集合。例如将system目录下的login.py移动到user目录下:
git mv system/login.py user/login.py
这与下面的命令效果一致:
mv system/login.py user/login.py
git add user/login.py
示例
将本地仓库中的readmd_en.md修改为readme.md:
$ ll
total 0
drwxr-xr-x 4 liushuochen staff 128 11 15 15:08 ./
drwxr-xr-x+ 124 liushuochen staff 3968 11 15 15:09 ../
drwxr-xr-x 12 liushuochen staff 384 11 15 15:09 .git/
-rw-r--r-- 1 liushuochen staff 0 11 15 15:08 readme_en.md
$ git mv readme_en.md readme.md
$ ll
total 0
drwxr-xr-x 4 liushuochen staff 128 11 15 15:10 ./
drwxr-xr-x+ 124 liushuochen staff 3968 11 15 15:10 ../
drwxr-xr-x 12 liushuochen staff 384 11 15 15:10 .git/
-rw-r--r-- 1 liushuochen staff 0 11 15 15:08 readme.md
$ git commit -m "modify readmd_en.md to readmd.md"
[master aa02620] modify readmd_en.md to readmd.md
1 file changed, 0 insertions(+), 0 deletions(-)
rename readme_en.md => readme.md (100%)
注意事项
移动不存在的文件
当移动一个不存在的文件时,git mv命令报错:fatal: bad source
$ git mv a.txt b.txt
fatal: bad source, source=a.txt, destination=b.txt
移动的目标路径不存在
当要移动的目标路径不存在时,git mv报错destination directory does not exist。
例如,文件结构如下的项目中,把最外层的readme.md移动到config目录下(一个不存在的目录):
$ tree .
.
├── conf
│ └── readme.md
└── readme.md
1 directory, 2 files
$ git mv readme.md config/
fatal: destination directory does not exist, source=readme.md, destination=config/
移动的目标路径存在同名文件
当要移动的目标路径存在与要移动的文件同名文件时,git mv报错 destination exists。
例如,文件结构如下的项目中,把最外层的readme.md移动到conf目录下:
$ tree .
.
├── conf
│ └── readme.md
└── readme.md
1 directory, 2 files
$ git mv readme.md conf/
fatal: destination exists, source=readme.md, destination=conf/readme.md
将文件移动到仓库外
将仓库内的文件试图用git mv移动到仓库外,即使路径正确,git mv也仍然会报错:
$ git mv readme.md ../
fatal: '../' is outside repository