Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git repo中查找现有的旧文件_Git - Fatal编程技术网

如何在git 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

如果我在c:\myrepo\source中有一个repo,在repo中有一个名为myfile.txt的文件,有多个版本,并且我在另一个文件夹(例如c:\temp\myfile.txt)中有一个myfile.txt的旧副本,是否可以在不复制当前文件的情况下检查repo中是否存在该版本?

您可以:

  • 在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会话就足够了。