git 获取修改文件和新增文件列表(不包过删除文件)
git ls-files
命令
git ls-files --others --exclude-standard // 获取新增文件列表
git ls-files --modified --exclude-standard // 获取修改文件列表
git ls-files --deleted --exclude-standard // 获取删除文件列表
没有添加到暂存区上面的命令是正常的,添加到暂存区获取不到对应的文件。
需要实现一下功能:
1.获取修改文件列表(不包括删除文件);
2.获取新增文件列表;
3.文件是否在暂存空间,都能获取到文件列表(暂存空间文件和未暂存空间文件重复去重);
已暂存
git diff --name-only --cached // 获取暂存区所有文件
git diff --name-only --cached --diff-filter=A // 获取新增文件
git diff --name-only --cached --diff-filter=D // 获取删除文件
git diff --name-only --cached --diff-filter=M // 获取修改文件
git diff --name-only --cached --diff-filter=d // 排除删除文件
--diff-filter
参数:
A:新增文件
D:已删除文件
M:修改过文件
小写字母取反;
未暂存
git ls-files --exclude-standard --others // 新增
git ls-files --exclude-standard --modified // 修改
git ls-files --exclude-standard --deleted // 删除
git ls-files --exclude-standard --others --modified
获取未暂存区新增修改文件,但是包括了删除的文件。
取差集命令 comm
comm [-123][--help][--version][第1个文件][第2个文件]
参数:
-1 不显示只在第1个文件里出现过的列
-2 不显示只在第2个文件里出现过的列
-3 不显示只在第1和第2个文件里出现过的列
comm -3 <(git ls-files --exclude-standard --deleted | sort) <(git ls-files --exclude-standard --others --modified | sort)
comm -3 <(git ls-files --exclude-standard --deleted | sort) <(git ls-files --exclude-standard --others --modified | sort) | sed -e 's/^[[:space:]]*//'
sed -e 's/^[[:space:]]*//'
清除输出的文件前面的空格
感谢大家的回答,问题解决。
功能说明:
1.获取修改文件列表(不包括删除文件);
2.获取新增文件列表;
3.文件是否在暂存空间,都能获取到文件列表(暂存空间文件和未暂存空间文件重复去重)。
1.获取未暂存文件列表(不包括删除文件):
2.获取暂存文件列表:
3.获取暂存空间和未暂存空间文件列表并过滤重复项:
相关资料说明:
git ls-files
命令(获取未暂存文件列表):git diff
命令(获取暂存文件列表):--diff-filter
参数:A:新增文件
D:已删除文件
M:修改过文件
小写字母取反;
comm
命令(取列表差集):参数:
-1 不显示只在第1个文件里出现过的列
-2 不显示只在第2个文件里出现过的列
-3 不显示只在第1和第2个文件里出现过的列
sed -e 's/^[[:space:]]*//'
清除输出的文件前面的空格感谢大家的帮助。