在这一章中,我们要学习移动文件,其实作为linux风格的github命令。因此其原理上,和linux十分相似。
在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还记得。
这个命令我们在上一章中已经讲过了。
它发现所有的移动过去的新文件,删除所有原来的就文件,然后解释为移动已经发生了,记住,这个只是告诉git从当前工作目录开始无限向下递归,你可以比这个更加具体。
比如说,如果你已经在一个目录下作了移动,称作源目录或者类似其他的,这一切都很好,但是注意到我们并没有改变这里的文件,当我们移动他们的时候,在一个真实的场景中,你可能会改变一点文件,当你将它们从一个目录移动到另外一个目录的时候,git仍然把它看做一次移动。
也就是说,即使你在移动前改动了移动的文件,它仍然能够识别出,你是移动了这个文件。而不是别的。
接着上面的,移动文件之后,我们在新的路径下面编辑这个文件,做另外一次提交,所以现在我们有了3次提交——文件创建的提交,文件移动的提交。
在新的地方,文件编辑的提交,我们可以使用日志命令来展示这个文件在移动过程中的历史,历史在移动的时候停止了添加开关-M和–follow:
$git log --stat -M --follow告诉日志在文件移动过程中跟踪文件,现在就可以得到想要的结果。
这并不是一个命令或是什么,它是一个相似度数值。
在我们移动这些文件之后,commit给我们一些数字,这些数字是一个类似度,可以表现文件在移动前后内容的相似度。Git默认提供一个50%的相似度阈值,如果文件在移动前后,50%相似,他会在移动的过程中追踪它,认为它是一个移动而不仅仅是一个删除和添加,我们可以调整这个阈值,通过在开关-M之后提供一个数字,如果你比较挑剔,可以使用大于50%的数值,你可以自由地添加参数,尽管如此,注意不要把阈值设置的太小,因为在一个比较低的相似度的情况下,你不认为是相同的文件最后可能会被判定为相同的。
这样就可以根据相似度来追踪不同的位置上不同的文件了。
在这一章中,我们主要的来介绍了github的移动文件的相关操作。但是具体而言,还是应当多加练习,才能够熟练掌握。还有很多小细节,我们日后再讲。
刘炫320 认证博客专家 博客专家 内容合伙人 首页内容推荐官 计算机科学与技术专业博士,主要研究方向为人工智能、自然语言处理、篇章分析。曾与微软小冰、微软小娜共同工作。兴趣广泛,包括并不限于人工智能,心理学,认知科学,语言学,数学,天文学等。让我们一起和AI,改进世界!