GIT - git-add错误(坏文件编号)

4
我正在使用Git创建一个备份系统。
我刚刚创建了该目录并在其中初始化了Git。
git init

当我尝试使用以下命令将未跟踪的文件添加到暂存区时:

git add -u *.pdf

我得到了这个错误响应:

sh.exe": /bin/git: 文件描述符错误

额外的信息是,我有一个 ~4500 个未跟踪文件的列表,如果我尝试逐个添加文件,我不会收到任何错误响应,并且这些文件将被发送到舞台。
有人知道如何解决这个问题以及为什么会发生吗?我需要添加所有这些未跟踪的文件,但我不想以“猴子工作”的方式一一添加。

我实际上犯了一个愚蠢的错误。我写了git-add命令,但没有用单引号括起来通配符。就像@GoZoner所说,我误解了选项“-u”的含义。 - luisfsns
1个回答

6
您不需要使用“-u”,因为它只会添加您已经跟踪的文件。在执行git init命令之后,您尚未跟踪任何内容。根据文档:

-u, --update: 仅匹配索引中的已跟踪文件而不是工作树。这意味着它永远不会暂存新文件,但会暂存已跟踪文件的修改内容,并且如果工作树中对应的文件已被删除,则会从索引中删除文件。

请改用-A (或 --all)。

针对您的特定问题,在您编写“*. pdf”时,shell将其扩展为4500个文件。这么多的文件可能会导致 shell 命令行输入缓冲区溢出,从而导致出现错误。您可以尝试以下几种方法:

git add -A               # adds everything at once

或者

for file in *.pdf; do git add -A $file; done    # add files one by one

这两个建议都可以避免命令行问题,第一个更为推荐。

1
我其实犯了一个愚蠢的错误。我在写git-add命令时没有用单引号把通配符括起来。问题并不是溢出。但是你的解释非常有帮助!我是Git的新手。很抱歉浪费了您宝贵的时间。我今天刚开始阅读和学习有关Git的知识(http://git-scm.com/book/en/)。来自巴西的万分感谢! - luisfsns
1
我无法添加点赞,因为我的声望不够。我至少需要15个积分。但是当我得到它们后,我会回来给你投票的。谢谢 - luisfsns
如果你将 *.pdf 传递给 git add,git 将扩展 * 而不会溢出。如果你跳过引号,那么 shell 将扩展 * 并且会溢出。 - GoZoner
抱歉,您说的“扩展”是什么意思? - luisfsns
“Expand” 的意思是将 “*.pdf” 替换为所有匹配的文件,例如 “foo.pdf bar.pdf …” - GoZoner

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