【问题标题】:git add ./*.java doesn't work?git add ./*.java 不起作用?
【发布时间】:2012-04-19 12:10:25
【问题描述】:

我当前的 Java 项目中有一堆 Java 文件,我一直在修改它们,我想从项目的根文件夹(在 Ubuntu 中)一举将它们全部添加。

我试过了:

git add ./*.java

但这并没有。我尝试像这样转义星号:

git add ./\*.java

但这并没有。然后我试着像这样引用它:

git add "./*.java"

但这并没有。

“git add”的手册页给出了一个例子:

从文档目录下的所有 *.txt 文件中添加内容,并且 其子目录:

           $ git add Documentation/\*.txt

我尝试使用上面的“文档”之类的目录来限定它,但这也不起作用。

我错过了什么?

[更新] 我在下面尝试了@GoZoner 的建议并且它有效,但如果文件是新的,而不是如果它们是预先存在的已更新。这很奇怪。

【问题讨论】:

  • 你得到什么错误? git add ./*.javagit add *.java 应该在当前目录中添加所有Java 文件。如果成功,您将看不到任何信息。 git status 说什么?
  • 将 'git add' 替换为 'ls' 并重试。具体来说,'ls ./*.java'。如果“ls”列表中没有显示任何内容,那么“git add”也不会找到任何内容。
  • +1 到@GoZoner。 Fileglobbing 是由 shell 完成的,而不是被调用的程序。在同一模式上使用 ls 来测试您要添加的内容。
  • @JonathanLeffler:我没有收到任何错误,我只是通过“git status”看到之前未暂存的内容仍然未暂存。
  • @GoZoner(和 Dan Ray):“ls”当然不会列出任何文件,因为除非您使用 --recurse 选项,否则它不会递归。这不是正确的类比,因为 'git add 。递归并添加所有文件,而 'ls .'只显示当前目录。在我从文档中引用的 sn-p 中,它说“及其子目录

标签: git version-control


【解决方案1】:

你需要转义'.'

git add \./\*.java

有效。

$ git add \./\*.c
$ git status
# On branch br1
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   bang/boo.c
#   new file:   bing/one.c
#

【讨论】:

  • 这很有趣:您的解决方案有效,但适用于新文件。如果您在上面提交更改并现在更新 boo.c,则相同的 git add 语句将不再获取更改。
  • 不适合我。我提交了上述索引,添加了两个文件。然后我改变了 bang/boo.c。 “git status”将文件显示为“未暂存以进行提交”。然后我使用了与上面相同的“git add”命令。 “git status”将 bang/boo.c 显示为“要提交的更改”。
  • 确实很奇怪。你在什么外壳/操作系统上?
  • bash 不管怎样,我学到了一些东西,因为我从来没有使用 'git add' 来添加目录下的所有内容。如果您提出的问题是由于 info/exclude 或 core.excludesfile 配置设置引起的,我们永远无法理解。您会在 git add 帮助页面中找到它。祝你好运。
【解决方案2】:
git add -u *.java

其中
-u 添加修改后的跟踪文件
*.java 是路径规范

【讨论】:

    【解决方案3】:

    使用 'git add' 代替:

    git status
    

    这将显示哪些文件是新的(git 未知)以及哪些文件已被修改。更重要的是,对于您的情况,“git status”将显示报告文件的完整路径。知道完整路径后,您将能够使用 'git add full-path-to.java' 一个一个地添加它们,或者,如果所有内容看起来都可以提交,则 'git add -A' 将它们全部添加。

    【讨论】:

    • 我知道这一点;我通常说“git add”。并进行我的更改。我正在寻找一种方法来跳过几个扩展名与我感兴趣的文件不同的文件...
    • 现在,重要的是查看要添加的 .java 文件。您是说“git status”显示文件列表,当您在其中任何一个文件上使用“git add”时,使用完整路径,它不会被添加?
    【解决方案4】:

    如果你想将自己限制在 git 已经知道的文件中,你可以将 git-ls-files 与过滤器结合使用:

    git ls-files [path] | grep '\.java$' | xargs git add

    您必须在此处指定文件夹的路径。

    在这里你给出指令显示缓存的 c 和其他 o 文件,同时排除标准 git 排除:.git/info/exclude,每个目录中的 .gitignore,以及用户的全局排除文件。

    git ls-files -co --exclude-standard | grep '\.java$'| xargs git add

    来自这个答案Recursively add files by pattern

    【讨论】:

      猜你喜欢
      • 2023-02-23
      • 2020-07-08
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2012-08-21
      • 2013-10-31
      • 2021-06-14
      • 2021-01-02
      相关资源
      最近更新 更多