热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Git记录文件复制操作-RecordfilecopyoperationwithGit

WhenImoveafileingitusinggit-mvthestatusshowsthatthefilehasbeenrenamedandevenifI

When I move a file in git using git-mv the status shows that the file has been renamed and even if I alter some portions it still considers to be almost the same thing (which is good because it lets me follow the history of it).

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

When I copy a file the original file has some history I'd like to associate with the new copy.

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

I have tried moving the file then trying to re-checkout in the original location - once moved git won't let me checkout the original location.

我已经尝试移动文件,然后尝试在原始位置重新签出 - 一旦移动git将不允许我签出原始位置。

I have tried doing a filesystem copy and then adding the file - git lists it as a new file.

我试过做一个文件系统拷贝,然后添加文件 - git将它列为一个新文件。

Is there any way to make git record a file copy operation in a similar way to how it records a file rename/move where the history can be traced back to the original file?

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

2 个解决方案

#1


102  

Git does not do rename tracking nor copy tracking, which means it doesn't record renames or copies. What it does instead is rename and copy detection. You can request rename detection in git diff (and git show) by using the -M option, you can request additional copy detection in changed files by using the -C option (-C implies -M), and you can request more expensive copy detection among all files with --find-copies-harder or -C -C (which implies -C, which implies -M). See the git-diff manpage.

Git不会重命名跟踪也不会复制跟踪,这意味着它不会记录重命名或副本。它的作用是重命名和复制检测。您可以使用-M选项在git diff(和git show)中请求重命名检测,您可以使用-C选项(-C表示-M)在更改的文件中请求其他副本检测,并且您可以请求更昂贵的副本使用--find-copies-harder或-C-C(暗示-C,暗示-M)检测所有文件。请参阅git-diff联机帮助页。

You can also configure git to always do rename detection by setting diff.renames to a boolean true value (e.g. true or 1), and you can request git to do copy detection too by setting it to copy or copies. See the git-config manpage.

您还可以将git配置为始终通过将diff.renames设置为布尔值true(例如true或1)来进行重命名检测,并且您可以通过将git设置为复制或复制来请求git进行复制检测。请参阅git-config联机帮助页。

Check also the -l option to git diff and the related config variable diff.renameLimit.

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


Note that git log works differently in Git: here is set of path delimiters, where path can be a (sub)directory name. It filters and simplifies history before rename and copy detection comes into play. If you want to follow renames and copies, use git log --follow (which currently is a bit limited, and works only for single file).

请注意,git log 在Git中的工作方式不同:此处 是路径分隔符集,其中path可以是(子)目录名。在重命名和复制检测发挥作用之前,它会过滤并简化历史记录。如果要关注重命名和副本,请使用git log --follow (目前有点限制,仅适用于单个文件)。

#2


13  

You can force Git to detect the history of the copied file:

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

  • Instead of copying, switch to a new branch and move the file to its new location there.
  • 而不是复制,切换到新分支并将文件移动到其新位置。
  • Switch to the original branch and rename the file.
  • 切换到原始分支并重命名该文件。
  • Merge the new branch into the original branch, resolving the trivial conflict by keeping both files.
  • 将新分支合并到原始分支中,通过保留两个文件来解决琐碎的冲突。
  • Restore the original filename in a separate commit.
  • 在单独的提交中恢复原始文件名。

(Solution taken from https://stackoverflow.com/a/44036771/1389680.)

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


推荐阅读
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ... [详细]
  • 本文详细介绍如何通过设置SSH密钥来获取连接GitHub远程仓库的权限,包括生成密钥、添加到GitHub账户以及验证连接等步骤。 ... [详细]
author-avatar
Annie千寻_535
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有