如何在git repo中查找现有的旧文件
如果我在c:\myrepo\source中有一个repo,在repo中有一个名为myfile.txt的文件,有多个版本,并且我在另一个文件夹(例如c:\temp\myfile.txt)中有一个myfile.txt的旧副本,是否可以在不复制当前文件的情况下检查repo中是否存在该版本?您可以:如何在git repo中查找现有的旧文件,git,Git,如果我在c:\myrepo\source中有一个repo,在repo中有一个名为myfile.txt的文件,有多个版本,并且我在另一个文件夹(例如c:\temp\myfile.txt)中有一个myfile.txt的旧副本,是否可以在不复制当前文件的情况下检查repo中是否存在该版本?您可以: 在Git存储库外的文件夹中 对于这些文件中的每一个,您都可以使用自己的旧副本制作一个普通的diff(而不是git diff) 如果其中一个diff为空,则说明旧副本已进行版本控制。首先需要获取文件的bl
- 在Git存储库外的文件夹中
- 对于这些文件中的每一个,您都可以使用自己的旧副本制作一个普通的diff(而不是git diff)
如果其中一个diff为空,则说明旧副本已进行版本控制。首先需要获取文件的blob id:
c:\myrepo\source>git hash-object "c:\temp\myfile.txt"
f70d6b139823ab30278db23bb547c61e0d4444fb
然后,您可以使用该id查找路径以及添加路径的提交
使用git 2.16+很容易:
c:\myrepo\source>git describe --always f70d6b139823ab30278db23bb547c61e0d4444fb
e76967c:path/to/myfile.txt
对于较旧的git版本,您将需要一个脚本来爬网所有提交和树,以查找此blob,如下所示:
对于文本文件,当存在不同的CRLF规范化(默认规范和repo中的规范化)时,有一个警告。然后,git hash object
可能会打印错误的值
例如,在Cygwin上,这将有助于:
$ git hash-object "c:\temp\myfile.txt"
4a2cdc2c8fc21f625d69b9b9197004fbbd2de76b
basin@BASIN /cygdrive/c/myrepo/source
$ git -c core.autocrlf=true hash-object "c:\temp\myfile.txt"
f70d6b139823ab30278db23bb547c61e0d4444fb
检查blob ID是否已存在?这是一个微不足道的标题和sha。。。在没有基本工具的windows上可能更难。请看以下答案:查找哈希比我的答案更有效+1.注意,你不需要Cygwin。一个简单的bash会话就足够了。