git add *(星号)与git add .(句点)

xu3bshqb  于 2023-01-01  发布在  Git
关注(0)|答案(5)|浏览(239)

我有一个关于在git中添加文件的问题。我发现了很多关于git add .git add -agit add --allgit add -A等的区别的stackoverflow问题。但是我一直找不到一个地方来解释git add *是做什么的。我甚至看过git add man page,但是没有用,我一直用它代替git add .,同事问我为什么,我没有答案,我一直用git add *
git add .git add *是一样的吗?一个只添加当前目录中更改的文件,而另一个添加当前目录和子目录中的文件(递归)吗?
在另一个堆栈问题上列出了一个很棒的图表,显示了git add -Agit add .git add -u之间的差异,但它没有git add *

注意:我理解使用星号作为通配符的含义(添加具有给定扩展名的所有文件)。例如,git add *.html将添加具有.html扩展名的所有文件(但忽略.css.js等)。
谢谢你的帮助!

zynd9foi

zynd9foi1#

add *意味着添加当前目录中的所有文件,除了文件名以点开始的文件。这是你的shell功能,Git只接收文件列表。
add .在shell中没有特殊的含义,因此Git递归地添加整个目录,这几乎是相同的,但包括名称以点开始的文件。

qybjjes1

qybjjes12#

*不是git的一部分--它是一个由shell解释的通配符。*扩展到当前目录中的所有文件,然后才传递给git,add将它们全部传递给git。.是当前目录本身,git add ing它将添加它和它下面的所有文件。

3bygqnnd

3bygqnnd3#

  • git add -A(--all)添加所有内容,以便在临时区域中显示磁盘上文件夹中的所有内容
  • git add .暂存所有内容,但不删除已从磁盘中删除的文件
  • git add *转移所有内容,但不转移以点开始的文件,并且不删除已从磁盘中删除的文件
  • git add -u(--update)仅暂存已修改的文件,移除已从磁盘中删除的文件,不添加新文件
  • git add <file name 1> <file name 2>仅添加特定文件
bqf10yzr

bqf10yzr4#

为清楚起见,我将答案列在下表中:

附加注解(受@reka18评论启发):
注1.git add -Agit add -u命令在没有附加参数的情况下执行将是在整个工作目录范围内的附加细化(子目录或文件名的掩码指示)工作(如果我们在目录的工作子目录中执行命令也是如此)。
注2..*分别是目录路径(当前目录)和通配符,用于明确命令的路径。例如,如果git add .git add *命令在工作目录的某个子目录中执行,则它们的操作仅在该子目录中使用,而不是在整个工作目录中使用。
注3.git add -Agit add -u命令可通过添加文件路径或掩码(例如git add -A app/controllersgit add -u app\styles\*)进一步细化。

ljsrvy3e

ljsrvy3e5#

在shell中使用点.通常表示“当前目录”。
当你在shell上使用星号*时,会用到一个叫做file-globbing的特性。例如,在bash上,函数glob()就是这样做的。glob(man 7 glob)的手册页说明:

说明

Long ago, in UNIX V6, there was a program /etc/glob that would expand 
wildcard patterns.  Soon afterward this became a shell built-in.
These days there is also a library routine glob(3) that will perform this 
function for a user program.

通配符匹配

A string is a wildcard pattern  if it contains one of the characters '?', '*' or '['.

全球

Globbing is the operation that expands a wildcard pattern 
into the list of pathnames matching the pattern.

这意味着,当您在命令行上向任何包含'?''*''['的程序传递参数时,首先使用globbing将通配符模式扩展为文件列表,然后将这些文件作为参数提供给程序本身。
Denis清楚地描述了'git add .''git add *'之间的意义差异:
git add期望添加一个文件列表,在上面的例子中shell分别扩展*.,并将结果作为参数提供给git add。现在的区别是,对于git add .,git将扩展到当前目录,而git add *触发文件globbing,并扩展到所有不以点开头的文件和目录。

相关问题