使用git add添加除一个目录外的所有文件

bfnvny8b  于 2023-10-14  发布在  Git
关注(0)|答案(6)|浏览(230)

我正在尝试将所有文件添加到我的git索引中,使用

git add -A

但是,有一个目录包含导致此错误的非常大的文件:

fatal: confused by unstable object source data for 9f8c02a8d2a04d7fffed08b299a0cb8996ab7ecb

因此,添加过程中断!我如何告诉git我想在添加其他内容的同时排除这个目录?可用的在线解决方案首先添加所有内容,然后删除一些文件。显然,我不能这样做,因为git在添加特定目录中的文件时会崩溃。

4ioopgfo

4ioopgfo1#

如果你的Git版本足够新,

git add -- . ':!<path>'

.表示当前目录下的全部,':!<path>'表示排除路径。所以这意味着除了path之外的所有都要加起来。
. ':!<path>'的术语是pathspec。然而,文档有点晦涩,缺乏丰富的例子。我发现this post对理解pathspec很有帮助。

4si2a6ki

4si2a6ki2#

在我的Windows系统上,以下工作:

git add -- . :!"path_to_folder"
5lhxktic

5lhxktic3#

@ElpieKay的回答对我不起作用,但这一个做到了:

git add -- . :!<path>
fv2wmkja

fv2wmkja4#

@Alec你应该在:!<path>上加上(')单引号

:!<path>

到这个

':!<path>'

例如

> git add -- . ':!somefolder'
c2e8gylq

c2e8gylq5#

作为一个额外的奖励,不要忘记你可以使用glob模式来进一步细化被排除的内容:

git add . -- ':!somefolder' ':!**/some_deep_nested_folder/*'

正如pathspec git词汇表中提到的

gywdnpxw

gywdnpxw6#

另一种更灵活的方法是添加所有文件,然后根据您的愿望尝试逐个排除。例如,在我的Laravel项目中,我想在public文件夹中删除distplugins文件夹

1)git add .
2) git reset -- public/dist
3)git reset -- public/plugins

因此,当我写git status时,下图显示了代码的结果:

相关问题