使用Gitlogging文件复制操作

当我使用git-mv在git中移动一个文件时,状态显示文件已经被重命名,即使我改变了一些部分,它仍然被认为是几乎相同的东西(这很好,因为它让我跟随它的历史) 。

当我复制一个文件的原始文件有一些历史,我想与新的副本关联。

我试图移动文件,然后试图重新签出原来的位置 – 一旦移动混帐不会让我结帐的原始位置。

我曾尝试做一个文件系统的副本,然后添加文件 – git列出它作为一个新的文件。

有什么办法让gitlogging文件的复制操作,就像logging一个文件的方式类似,重命名/移动的历史可以追溯到原始文件?

Git不会执行重命名跟踪或复制跟踪,这意味着它不会logging重命名或副本。 它所做的是重命名和复制检测 。 您可以使用-M选项请求git diff (和git show )中的重命名检测,您可以使用-C选项( -C隐含-M )请求更改的文件中的额外副本检测,并且您可以请求更昂贵的副本在--find-copies-harder-C -C (这意味着-C ,这意味着-M )的所有文件之间进行检测。 请参阅git-diff手册页。

你也可以configurationgit,通过将diff.renames设置为一个布尔值(例如true1 )来始终执行重命名检测,并且可以通过将git设置为copycopies来请求git进行复制检测。 请参阅git-config联机帮助页。

同时检查-l选项以git diff和相关的configurationvariablesdiff.renameLimit


请注意, git log <pathspec>在Git中的工作方式不同:这里<pathspec>是path分隔符集,其中path可以是(子)目录名。 重命名和复制检测发挥作用之前过滤和简化历史logging。 如果你想跟随重命名和复制,使用git log --follow <filename> (目前有点有限,只适用于单个文件)。

您可以强制Git检测复制文件的历史logging:

  • 而不是复制,切换到一个新的分支,并将文件移动到那里的新位置。
  • 切换到原始分支并重命名文件。
  • 将新分支合并到原始分支中,通过保留这两个文件来解决琐碎的冲突。
  • 在单独的提交中恢复原始文件名。

(解决scheme取自https://stackoverflow.com/a/44036771/1389680 。)