Tyl*_*ood 113 git version-control git-add
我是git的新手,我有一个关于在git中添加文件的问题.我发现约之间的差异多个计算器的问题git add .及git add -a,git add --all,git add -A等,但我一直无法找到解释了什么地方git add *呢.我甚至看过git add手册页,但它没有帮助.我一直用它代替,git add .我的同事问我为什么.我没有答案.我一直都在使用git add *.
是git add .和git add *一样吗?是否只从当前目录添加更改的文件,而另一个添加当前目录和子目录中的文件(递归)?
在其他一个堆栈问题上列出了一个很好的图表,显示了git add -A git add .和之间的差异git add -u,但它没有git add *.

注意:我理解将星号用作通配符意味着什么(添加具有给定扩展名的所有文件).例如,git add *.html想补充一点,有一个所有文件.html的扩展名(但忽略.css,.js等).
谢谢您的帮助!
Den*_*nis 109
add *表示添加当前目录中的所有文件,但名称以点开头的文件除外.这是你的shell功能,Git只收到一个文件列表.
add . 在你的shell中没有特殊含义,因此Git以递归方式添加整个目录,这几乎是相同的,但包括名称以点开头的文件.
Mur*_*nik 25
*不是git的一部分 - 它是由shell解释的通配符.*扩展到当前目录中的所有文件,然后只传递给git,这就是add全部.
.是当前目录本身,git add它将添加它和它下面的所有文件.
Ste*_*fen 20
git add -A(--all) 添加所有内容,以便磁盘上文件夹中的所有内容都显示在暂存区域中
git add .暂存所有内容,但不删除已从磁盘中删除的文件
git add *暂存所有内容,但不包括以点开头的文件,并且不会删除已从磁盘中删除的文件
git add -u(--update) 仅暂存修改的文件,删除已从磁盘删除的文件,不添加新文件
git add <file name 1> <file name 2>仅添加某些文件
. 在shell中使用点通常表示"当前目录".
在*shell上使用星号时,会使用调用的功能file-globbing.例如,在bash上,函数glob()就是这样做的.glob(man 7 glob)的联机帮助页指出:
描述
Run Code Online (Sandbox Code Playgroud)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.通配符匹配
Run Code Online (Sandbox Code Playgroud)A string is a wildcard pattern if it contains one of the characters '?', '*' or '['.通配符
Run Code Online (Sandbox Code Playgroud)Globbing is the operation that expands a wildcard pattern into the list of pathnames matching the pattern.
这意味着当您将参数传递给命令行上包含的任何程序时'?','*'或者'[',首先将通配符模式扩展为文件列表,然后将这些文件作为参数提供给程序本身.
Denis明确描述了'git add .'和之间的含义差异:'git add *'
git add期望添加文件列表.在上面的例子中,shell展开*或.分别将结果作为参数提供给git add.现在不同的是,git add .git将扩展到当前目录,而git add *触发文件通配符,这样扩展到所有不以点开头的文件和目录.
为了清楚起见,我将答案放在下表中:
其他说明(受@ reka18注释启发):
注1. git add -A和git add -u命令,而无需额外的参数执行将是额外的细化(为文件名的子目录或面罩指示),在整个工作目录(也如果我们执行该目录的子目录工作的命令)的范围内正常工作。
注2.的.和*分别的目录路径(当前目录)和通配符,该澄清命令的路径。例如,如果git add .or git add *命令在工作目录的某个子目录中执行,则它们的操作仅在该子目录中使用,而不是在整个工作目录中使用。
注3.该git add -A和git add -u命令可以通过添加一个路径或掩模文件,例如,进一步细化git add -A app/controllers或git add -u app\styles\*。
小智 5
在旧版本的 git 中,git add .不会从索引中删除已删除的文件,因此git add -A建议这样做。在最新版本的 git 中,这种情况已不再是这样。现在,只要从工作树的根文件夹执行每个命令,git add .就与git add -A. 但是,如果git add .从子文件夹运行,则它仅递归更新该文件夹及其子文件夹中文件的索引,而git add -A仍会执行工作树中的所有文件。
关于这方面的文档不是特别清楚,但我通过直接使用 git 版本 2.42.0.windows.1 进行实验验证了上述信息。
| 归档时间: |
|
| 查看次数: |
32356 次 |
| 最近记录: |