github之移动文件

来源:互联网 发布:java replace替换成空 编辑:程序博客网 时间:2024/06/05 04:04

1. 前言

在这一章中,我们要学习移动文件,其实作为linux风格的github命令。因此其原理上,和linux十分相似。

2. git mv 命令

在Git中,重命名和移动文件是同一件事情 ,最基本的想法是,你有一段内容,比如一些代码,你把它从一个地方移动到另外一个地方,所以,假设我们有一些想要移动的文件从一个目录下面:

git mv file1.txt source/file1.txt 

这就是把file1.txt移动到source文件夹下的file1.txt。

git已经暂存了move发生的事实,但是,如果你只是简单的使用mv命令来移动文件,然后忘了告诉git,Git注意到,某个地方出现了一个本不应该出现的新文件,它同时注意到原来的文件区域已经被删除掉了。也就是说git自己并没有意识到是一个移动的操作,而是2个过程,那么需要我们辅助执行:

$ git rm file1.txt //删除原来的文件$ git add source/file1.txt //添加新文件

当我们做这些的时候,状态把这些拼在一起了,告诉我们一个移动已经发生了。也就是说你可以删除一个工作树中不存在的文件,其实这个文件git还记得。

3. git add -A 命令

这个命令我们在上一章中已经讲过了。

它发现所有的移动过去的新文件,删除所有原来的就文件,然后解释为移动已经发生了,记住,这个只是告诉git从当前工作目录开始无限向下递归,你可以比这个更加具体。

比如说,如果你已经在一个目录下作了移动,称作源目录或者类似其他的,这一切都很好,但是注意到我们并没有改变这里的文件,当我们移动他们的时候,在一个真实的场景中,你可能会改变一点文件,当你将它们从一个目录移动到另外一个目录的时候,git仍然把它看做一次移动。

也就是说,即使你在移动前改动了移动的文件,它仍然能够识别出,你是移动了这个文件。而不是别的。

4. git log -M –follow 命令

接着上面的,移动文件之后,我们在新的路径下面编辑这个文件,做另外一次提交,所以现在我们有了3次提交——文件创建的提交,文件移动的提交。

在新的地方,文件编辑的提交,我们可以使用日志命令来展示这个文件在移动过程中的历史,历史在移动的时候停止了添加开关-M和–follow:

$git log --stat -M --follow

告诉日志在文件移动过程中跟踪文件,现在就可以得到想要的结果。

5. Similarity Index

这并不是一个命令或是什么,它是一个相似度数值。

在我们移动这些文件之后,commit给我们一些数字,这些数字是一个类似度,可以表现文件在移动前后内容的相似度。Git默认提供一个50%的相似度阈值,如果文件在移动前后,50%相似,他会在移动的过程中追踪它,认为它是一个移动而不仅仅是一个删除和添加,我们可以调整这个阈值,通过在开关-M之后提供一个数字,如果你比较挑剔,可以使用大于50%的数值,你可以自由地添加参数,尽管如此,注意不要把阈值设置的太小,因为在一个比较低的相似度的情况下,你不认为是相同的文件最后可能会被判定为相同的。

这样就可以根据相似度来追踪不同的位置上不同的文件了。

6. 小结

在这一章中,我们主要的来介绍了github的移动文件的相关操作。但是具体而言,还是应当多加练习,才能够熟练掌握。还有很多小细节,我们日后再讲。