首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Git记录文件复制操作

使用Git记录文件复制操作
EN

Stack Overflow用户
提问于 2009-06-25 11:22:12
回答 2查看 49.1K关注 0票数 159

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

当我复制一个文件时,原始文件有一些历史记录,我希望将其与新的副本相关联。

我尝试过移动文件,然后尝试在原始位置重新签出-一旦移动,git就不会让我签出原始位置。

我尝试过复制文件系统,然后添加文件- git会将其作为新文件列出。

有没有办法让git以类似于记录文件重命名/移动的方式记录文件复制操作,其中历史记录可以追溯到原始文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-06-25 12:09:01

不做重命名跟踪也不做复制跟踪,这意味着它不会记录Git重命名或复制。相反,它所做的是重命名和复制检测。您可以使用-M选项在git diff (和git show)中请求重命名检测,也可以使用-C选项在已更改的文件中请求额外的复制检测,并且可以使用-C -C在所有文件之间请求更昂贵的复制检测。请参阅git-diff手册页。

-C -C表示-C-C表示-M

-M--find-renames的缩写,-C表示--find-copies-C -C也可以拼写为--find-copies-harder

你还可以通过将diff.renames设置为布尔型真值(例如true1)来配置git始终执行重命名检测,也可以通过将其设置为copycopies来请求git执行复制检测。请参阅git-config手册页。

还要检查git diff-l选项和相关的配置变量diff.renameLimit

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

票数 124
EN

Stack Overflow用户

发布于 2017-09-29 16:33:16

如果由于某些原因你不能像Jakub Nar Git bski的答案中那样打开复制检测,你可以强制ę在三次提交中检测复制文件的历史记录:

使用无快进选项--no-ff.将新分支合并到原始分支,而不是复制

  • ,而是切换到新分支并将文件移动到新位置。
  • 在那里重新添加原始文件。
  • 将新分支合并到原始分支

致谢给Raymond Chen。下面是他的程序。假设文件名为orig,而您希望副本名为apple

git checkout -b dup # create and switch to branch

git mv orig apple # make the duplicate
git commit -m "duplicate orig to apple"

git checkout HEAD~ orig # bring back the original
git commit -m "restore orig"

git checkout - # switch back to source branch
git merge --no-ff dup # merge dup into source branch

2020-05-19:上述方案的优点是不改变原始文件的日志,不会造成合并冲突,而且更短。前一个解决方案有四个提交:

切换到新分支并将文件移动到其新位置并将文件重命名为原始分支,而不是复制。

  • 将新分支合并到原始分支,通过在单独的提交中保留两个原始文件名来解决微不足道的冲突。

(来自https://stackoverflow.com/a/44036771/1389680.的解决方案)

票数 85
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1043388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档