查找包含在.gitignore中的所有受源代码管理的文件



你好,我有一个git存储库,里面有一个现有的.gitignore文件。由于.gitignore文件中的一些路径和/或文件受源代码管理,因此出现了问题。

为了解决这个问题,我正在寻找一种方法来列出所有受源代码管理的文件,这些文件应该被忽略,因为它们包含在.gitignore文件中。

没有通用的方法来说明是否需要忽略或包括这些文件,所以我需要这个列表来手动查看每个文件。

有人知道怎么做吗?

示例:这是非常简化的,我们在这里谈论的是1000个文件。源代码管理下的文件夹中有4个文件

  1. .gitignore
  2. 测试.cpp
  3. test.log
  4. 测试结果

.gitignore 的内容

.gitignore
test.*

test.cpp已经处于源代码管理之下,因此可以跟踪更改。这是应该的。但是test.cpp显然包含在.gitignore文件中。因此,我喜欢修改gitignore文件,使其包含

.gitignore
test.*
!test.cpp

所以我想要的是一个列表,它显示test.cpp处于源代码管理之下,而gitignore正在排除它,这样我就可以修改gitignore文件以准确反映当前状态。

这个例子中的列表结果应该是.

  1. .gitignore
  2. 测试.cpp

在我更复杂的场景中,这也应该适用于子文件夹中的文件。

我设法为自己找到了一个解决方案(我想(。

看起来这个命令正是我想要做的

comm -12 <(git ls-files) <(find .  | cut -sd / -f 2- | sort | xargs git check-ignore --no-index)

通信-12<(输入列表1(<(输入列表2(:一个非常有用的命令,我记得,它排除了只存在于其中一个输入列表中的文件,所以只有两个列表中都存在的文件才是列表集

git-ls文件:显示git控制下的所有文件

查找。:显示当前文件夹和子文件夹中的所有文件

cut-sd/-f 2-:由于find打印。/在每个文件路径前面,我们都需要去掉它,因为git-ls文件没有。Basicaly我们告诉cut/是一个分隔符。cut将把文件路径分割成多个部分&quot-f2-";告诉cut输出从第二部分开始到最后的每个文件路径。由于第一部分是"这正是我想要的

排序:由于comm需要排序列表tu功能(不用担心,如果列表没有排序,它会告诉你(,我们对列表进行排序

xargs git-check-ignore--无索引:对于每个文件,我都使用xargs工具运行git-check-ingnore--没有索引在这里非常重要,因为如果不存在,check-ignore将不会返回gitignore覆盖但已受源代码管理的文件。

我希望这对像我这样来到一个旧的大型githup存储库并必须清理gitignore文件的人来说有点有用。

注意:如果您的文件已经"上传的";在将它们添加到gitignore之前,它们将继续被跟踪。您需要将它们移到本地文件夹之外;删除";更改,然后将它们移回原来的位置。

我正在寻找一种方法来列出所有受源代码管理的文件,这些文件应该被忽略,因为它们包含在.gitignore文件中。

从干净的情况开始(git diff --name-only返回一个空列表(删除.gitignore文件并再次使用git diff --name-only进行检查,您应该会得到以前排除的文件的列表。请注意,存储库在不同的子文件夹中可能有多个.gitinore文件。

最新更新