我正在学习Git命令。
我对git add和git commit的理解如下:git add'file name'获取项目的快照(整个工作目录)并暂存它。 git commit将暂存的快照保存到存储库。
我也理解git与SVN等在保存文件的基本方式上有所不同。当SVN在单个文件中保存增量更改时,git会保存整个工作目录的快照。如果文件未更改,git snapshot将包含上一个快照中该文件的引用。
我在这里有一个问题。如果git add获取整个工作目录的快照,为什么我们需要在命令中提供单独的文件名?无论如何,Git会拍摄整个项目的快照。
答案 0 :(得分:2)
因为您可能想要添加已添加或更改的每个文件。
例如,假设您已修改了xyzzy.c
文件,但您还将一张非常漂亮的图片taylor_swift.jpg
下载到当前目录(并且还没有机会移动它其它地方)。
你不希望后一个文件找到进入仓库的方式,所以你只需这样做:
git add xyzzy.c
abd只添加你想要添加的文件。
在任何情况下,如果您想要当前目录中的每个文件,您只需执行以下操作:
git add .
我倾向于将其视为三个方面。
首先,检查您的特定“快照”的工作区域,以及您所做的任何更改。
然后是保存下一次提交文件的暂存区域。
最后,git-proper区域包含所有已提交的更改。
如果您考虑这些术语,add
然后将单个事物从工作复制到分段,commit
复制从分段到git-proper的所有内容。
答案 1 :(得分:1)
你对git快照的理解是错误的。如git网站文档[Snapshots, Not Differences]所示,项目的快照是您在存储库中添加的每个文件的快照聚合。这就是您需要在git add
命令中指定文件名的原因。
告诉git哪个文件应由git add <filename>
管理后,您可以使用git add -u
进行修改,在这种情况下,不需要文件名。
答案 2 :(得分:0)