如何在Git中拆分文件?

时间:2015-08-07 20:39:51

标签: git version-control filesplitting

我有源文件A,它变得很长并且包含两个大类。我想将其拆分为文件AB,保留历史记录和"责备"数据

在Subversion中,这非常简单:执行svn copy A B,删除A中只应位于B的行,反之亦然,然后提交。但该项目的所有者遗憾地想转而使用Git,这是我不知道该怎么做的工作流程之一。

当您执行svn log B时,您会在分割后获得B的历史记录,并在分割之前获得A的历史记录。此外,svn blame B会将预拆分更改归因于A历史记录中的正确作者,而不是将其归因于拆分的任何人。

3 个答案:

答案 0 :(得分:4)

Git没有明确跟踪重命名。而是在需要的地方计算是否发生了重命名。例如,git blamegit diffgit merge等命令可以使用Git的重命名检测机制。

出于这个原因,您应该进行所需的更改并正常提交。

因此,本案的正确步骤是:

<make the needed changes to the files>
git add A B
git commit

鉴于未明确跟踪重命名意味着重命名检测算法有时需要进行一些调整才能实现所需。 例如,在进行合并时,您可能需要调整rename-threshold=<n>以获得更好的自动合并。

如果&#34;重命名&#34;的相似性文件低于Git检测到的,或者可以配置为检测,然后Git无法将其视为重命名。

答案 1 :(得分:0)

首先,将原始文件复制到新文件名:

$ cp A B

接下来,从B和A中删除不需要的行,然后将新文件添加到git并commit:

$ git add -A
$ git commit

答案 2 :(得分:0)

提交时你不必做任何特别的事情。只需像往常一样提交新文件和已删除文件,然后在要跟踪复制的文件内容时使用-C选项和git blame。 git会自动解决所有问题。移动文件也是如此。

另请参阅:Record file copy operation with Git