10.4 移动文件

通过将welcome.txt改名为README文件来测试一下在Git中如何移动文件。Git提供了git mv命令完成改名操作。


$git mv welcome.txt README


可以从当前的状态中看到改名的操作。


$git status

On branch master

Changes to be committed:

(use "git reset HEAD<file>…"to unstage)

#

renamed:welcome.txt->README

#


提交改名操作,在提交输出中可以看到改名前后两个文件的相似度(百分比)。


$git commit-m "改名测试"

[master 7aa5ac1]改名测试

1 files changed,0 insertions(+),0 deletions(-)

rename welcome.txt=>README(100%)


从提交日志中出现的文件相似度可以看出,Git的改名操作得益于Git对文件追踪的强大支持(文件内容作为blob对象保存在对象库中)。改名操作相当于对旧文件执行删除,对新文件执行添加。实际上完全可以不使用git mv命令,而是以git rm和git add两条命令取而代之。为了试验不使用git mv命令是否可行,先撤销之前进行的提交。

撤销之前测试文件移动的提交。


$git reset—hard HEAD^

HEAD is now at 63992f0 restore file:welcome.txt

撤销之后welcome.txt文件又回来了。

$git status-s

$git ls-files

welcome.txt


新的改名操作不使用git mv命令,而是直接在本地改名(文件移动),将welcome.txt改名为README。


$mv welcome.txt README

$git status-s

D welcome.txt

?? README


为了考验一下Git的内容追踪能力,再修改一下改名后的README文件,即在文件末尾追加一行。


$echo "Bye-Bye.">>README


可以使用前面介绍的git add-A命令。相当于对修改文件执行git add,对删除文件执行git rm,对本地新增文件执行git add。


$git add-A


查看状态,也可以看到文件重命名。


$git status

On branch master

Changes to be committed:

(use "git reset HEAD<file>…"to unstage)

#

renamed:welcome.txt->README

#


执行提交。


$git commit-m "README is from welcome.txt."

[master c024f34]README is from welcome.txt.

1 files changed,1 insertions(+),0 deletions(-)

rename welcome.txt=>README(73%)


这次提交中也看到了重命名操作,但是重命名相似度不是100%,而是73%,这是因为重命名后的文件又追加了一行。