如何判断git是否曾经跟踪过文件X

34

我曾经在谷歌上搜索解决这个问题的方法,但至今未能找到。

假设有一个名为“/project”的工作目录,我正在尝试找到一种方法,以判断git是否曾在仓库历史中跟踪过名为“/project/x/y/fubar”的文件。

这是可能的吗?这似乎是已经有答案的东西,但今天早上我的谷歌搜索并没有成功。

编辑:可能会有重复的问题,请参阅如何通过shell退出代码告诉文件是否被Git跟踪

我不认为那个问题和这个一样,因为我想获取信息的文件不能保证当前由Git跟踪,并且在调用时可能不存在于工作目录中。那个问题的答案似乎都是告诉您该文件当前是否被Git跟踪。如果我错了,并且其中一个解决方案可以实现我的目标,请告诉我。

3个回答

40

最简单的方法是使用git log --all -- x/y/fubar命令 - 如果该文件存在,它将至少给出一个日志记录。


1
只需将其导入到 wc -l 中并检查返回值即可。 - pmr
1
要将输出导入到wc中,您需要在git log命令中添加--oneline选项。另外,如果您正在将日志命令的输出导入到管道中,请在git命令中添加--no-pager选项:git --no-pager log ... - Adam Dymitruk
1
添加 --pretty=format: --name-only --diff-filter=A 可以稍微加快速度。 - Nils-o-mat
有没有办法使它不区分大小写? - Eduardo Moreira

12

更好的方法是:

git log --all --pretty=format: --name-only --diff-filter=A | sort - | grep fubar

从其他答案中合并而来。


这可能会慢很多。 - mehulkar

1

这里有两个有用的别名:FindFile ff 和 FindFilewithCopies ffc

# Find if one file ever had into repository
ff = "!git log --pretty=format: --name-status --all -M -B | sort -u | grep $1   #"
# The same as above but showing copied files
ffc = "!git log --pretty=format: --name-status --all -C -M -B | sort -u | grep $1 #"

你可以获取有关文件名和与其相关的操作的信息。
示例用法:
$ git ff create
A       database/migrations/2014_10_12_000000_create_users_table.php
A       database/migrations/2014_10_12_100000_create_password_resets_table.php
A       database/migrations/2015_05_11_200932_create_boletin_table.php
A       database/migrations/2015_05_15_133500_create_usuarios_table.php
D       database/migrations/2015_05_12_000000_create_users_table.php
M       database/migrations/2015_05_11_200932_create_boletin_table.php
R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php

$ git ffc create
A       database/migrations/2014_10_12_000000_create_users_table.php
A       database/migrations/2014_10_12_100000_create_password_resets_table.php
A       database/migrations/2015_05_11_200932_create_boletin_table.php
A       database/migrations/2015_05_15_133500_create_usuarios_table.php
C052    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_11_210246_create_boletin_nosend_table.php
D       database/migrations/2015_05_12_000000_create_users_table.php
M       database/migrations/2015_05_11_200932_create_boletin_table.php
R051    database/migrations/2014_10_12_000000_create_users_table.php    database/migrations/2015_05_12_000000_create_users_table.php

(可能是重复的问题: 列出Git存储库中存在的所有文件)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接