热门标签 | 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。)


推荐阅读
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
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社区 版权所有