Git可以重构我的文件夹而不会丢失历史吗?

Che*_*rot 28 git

我得到了一个git repo current我是唯一使用它的人.我想把根文件夹下的所有文件和文件夹放在一个新的文件夹中,例如:

当前的根目录

main ->
  src
  res

新根

main ->
  app1
    src
    res

如何在Windows上使用git而不会丢失历史记录?

Tod*_*obs 42

TL; DR

来吧:移动你的文件和目录.只需确保您不在与目录重组相同的提交中对文件进行任何编辑.

为什么会这样

Git是一个内容跟踪器,而不是文件跟踪器.如果您移动/重命名文件,但不对这些文件的内容进行其他更改,那么Git只会重写树对象.目录操作不会更改文件blob; 目录位置信息分别存储在树对象中.

实际的重命名检测是通过对blob和树进行区分,并在文件之间寻找可配置的相似百分比来处理的.这意味着Git并不真正存储移动或直接重命名; 它根据提交之间的差异来计算它们.

所有这一切的结果是您的历史记录与特定文件名或目录结构无关.这对于大多数用例来说非常有效,但与像Bazaar这样的系统相比,它跟踪重命名为一流的操作.


Cam*_*ner 6

你可以移动文件,Git会(或应该)注意到移动已经发生.它将保留历史.

如果它由于某种原因没有注意到移动,你可以尝试使用diff with --find-copies-harder选项.