有没有办法在Git中列出未修改的文件?

5

我从另一个来源获取了一些更改的tarball,想知道哪些文件没有被更改。目标是Git克隆,所以很容易看到什么是新的,什么已经改变。有人知道如何获取未更改的列表(不包括未跟踪的文件)吗?

编辑:换句话说,我希望利用Git查找在新副本(tarball)中可能不存在的预先存在于Git中的文件。


为什么你想要看到它的反向呢?Git生成的增量主要处理变更。 - Makoto
3个回答

4

我没有找到纯git的解决方案,但是这是对我有用的:

diff <(git diff --name-only)  <(git ls-files -- sub/dir) | grep "^>" | cut -b3-

使用的命令解释:

git diff --name-only # list modified files
git ls-files -- sub/dir # list all git--tracked files in sub/dir
grep "^>" # match lines starting with '>', i.e. diff's marker for lines present in the second set but not in the first one (i.e. unmodified files)
cut -c3- # remove diff's marker (i.e. remove first two characters)
# <( command ) gives output of the command as a file (diff command needs two files to compare them)

1

可能:

$ git diff --name-only > tmpfile
$ git ls-files -X tmpfile
$ rm tmpfile

ls-files -X... 只会排除未追踪的文件。它不会排除与模式匹配的已追踪文件。 - Jez

-1

在得到一些帮助后:

comm -23 <(git ls-files | sort) <(git diff --name-only | sort)

请参考 man comm。该命令会将所有被跟踪的文件与所有已修改的文件进行比较,排除只存在于后者或两者都存在的文件,最终只留下未被修改的文件。

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