git - 查找源代码控制下包含在 .gitignore 中的所有文件
问题描述
您好,我有一个带有现有 .gitignore 文件的 git 存储库。由于 .gitignore 文件中的某些路径和/或文件受源代码控制,因此似乎有些问题。
为了清理它,我正在寻找一种方法来列出所有受源代码控制的文件,这些文件应该被忽略,因为它们包含在 .gitignore 文件中。
没有通用的方法来说明是否需要忽略或包含文件,因此我需要此列表来手动查看每个文件。
有谁知道如何做到这一点?
示例:这非常简化,我们在这里讨论 1000 个文件。源代码管理下的文件夹中有 4 个文件
- .gitignore
- 测试.cpp
- 测试日志
- 测试结果
.gitignore 的内容
.gitignore
test.*
test.cpp 已经在源代码控制下,因此可以跟踪更改。这是应该的。但是 test.cpp 显然包含在 .gitignore 文件中。因此我喜欢修改 gitignore 文件,使其包含
.gitignore
test.*
!test.cpp
所以我想要的是一个列表,显示 test.cpp 在源代码控制下,而 gitignore 正在排除它,以便我可以修改 gitignore 文件以准确反映当前状态。
本例中列表的结果应该是。
- .gitignore
- 测试.cpp
在我更复杂的场景中,这也应该适用于子文件夹中的文件。
解决方案
我设法为自己找到了解决方案(我认为)。
看起来这个命令完全符合我的意图。
comm -12 <(git ls-files) <(find . | cut -sd / -f 2- | sort | xargs git check-ignore --no-index)
comm -12 <(input list 1) <(input list 2):一个非常有用的命令,我记得那个命令,排除仅存在于一个输入列表中的文件,因此只有两个列表中都存在的文件是 listet
git ls-files:显示 git 控制下的所有文件
find .: 显示当前文件夹和子文件夹中的所有文件
cut -sd / -f 2-: 因为 find 打印 ./ 在每个文件路径前面,我们需要摆脱它,因为 git ls-files 没有。基本上我们告诉 cut / 是一个分隔符。cut 会将文件路径拆分为多个部分。“-f 2-” 告诉 cut 从第二部分开始输出每个文件路径到结尾。由于第一部分是“。” 这正是我想要的
sort:因为 comm 需要排序列表 tu 函数(不用担心它会告诉你列表是否未排序)我们对列表进行排序
xargs git check-ignore --no-index:对于每个文件,我使用 xargs 工具运行 git check-ignore。--no-index 在这里非常重要,因为如果不存在检查忽略将不会返回 gitignore 覆盖但已经在源代码控制下的文件。
我希望这对像我这样来到旧的大型 gitup 存储库并且必须清理 gitignore 文件的人有所帮助。
推荐阅读
- javascript - 如果选中复选框,则条件 Javascript
- python - TensorFlow - ValueError:特征应该是`Tensor`s的字典
- angular - 图标的角度插值不适用于字体真棒
- ios - 来自部署在设备上的应用程序的 iOS os.log
- c++ - 创建二维数组类:如何访问二维数组类中的元素,如 array[x][y]
- git - 从 gerrit 克隆存储库有时会失败
- git - 如何在不使用 Git 将更改推送到远程存储库的情况下将更改提交到本地存储库
- javascript - web3.js 使用 PHP 解密密钥库 v3
- mysql - Mysql返回错误记录——聚合函数MAX()
- c++ - 如何在 QProcess 中传递/发送 control-c