使用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
设置为一个布尔值(例如true
或1
)来始终执行重命名检测,并且可以通过将git设置为copy
或copies
来请求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 。)