新的SDK drop ...如何指示git某些文件被移动?

时间:2013-07-17 12:04:51

标签: git version-control

我之前一直在开发一个SDK,我现在收到了一个新的代码。

在这个项目开始时,我创建了一个导入分支,我在其上提交了SDK,并将其作为第一次提交合并到我的主分支。

但现在有了这个新版本的SDK,我注意到目录结构中发生了很多变化。相当多的文件已被移动到子目录中以改进代码库的结构我想。

所以我想在import分支上有一个新的提交,所以将它合并到master会更容易,但我不知道如何指示git文件已被移动。

git mv file_a dir_a/file_a

...不起作用,因为目标文件存在。所以我试过了:

git mv -f file_a dir_a/file_a

不是我想要的,因为目标位置会被旧版本的内容覆盖。

我还尝试首先gitmoving所有内容,以类似于新的目录结构,然后复制一切。但是git仍然认为它是删除旧文件和添加新文件。

那么在这里继续前进的方式是什么? 欢迎任何提示/指示!

1 个答案:

答案 0 :(得分:1)

git不跟踪移动,因此您无法直接执行此操作。 git尝试通过查看添加的文件是否与删除的文件非常相似来动态识别移动的文件。所以只需git rm旧文件和git add新文件,然后查看git status所说的内容。您可以在git log中修改重命名检测的行为,这里是git help log相关部分的副本。

-M[<n>], --find-renames[=<n>]
   If generating diffs, detect and report renames for each commit. For following
   files across renames while traversing history, see --follow. If n is
   specified, it is a threshold on the similarity index (i.e. amount of
   addition/deletions compared to the file’s size). For example, -M90% means git
   should consider a delete/add pair to be a rename if more than 90% of the file
   hasn’t changed. Without a % sign, the number is to be read as a fraction, with
   a decimal point before it. I.e., -M5 becomes 0.5, and is thus the same as
   -M50%. Similarly, -M05 is the same as -M5%. To limit detection to exact
   renames, use -M100%.