作为一个git noob在Rails项目上尝试它,我想知道在每次提交之前做git add .
(添加当前目录)是不是不好的做法。我看过的介绍教程显示最初添加当前目录,然后使用git add new_file
添加文件。如果我从一堆不同的目录中添加一堆文件,这似乎太难了。
基本上,如果要添加一个或两个以上的文件,每次我想提交时都可以使用git add .
吗?对于自上次提交以来创建的每个文件,使用git add .
与显式执行git add new_file
相同吗?
答案 0 :(得分:11)
git add .
将添加heirarchy中的所有内容,包括新文件。如果要跟踪目录中的所有文件,这很好。
另一种(可能更常见的)用法是git commit -a
,它只添加自提交之前上次提交后更改的文件,并且不包含任何新文件。
编辑:git add .
不会删除自上次提交以来删除的所有文件。如果您要删除文件,我会使用git rm <myfile>
以便git被告知已删除的文件,并且您不会忘记确保git知道它已被删除。正如另一条评论所述,git commit -a
将注意到已删除的文件。
答案 1 :(得分:8)
如果您的git add .
是最新的,并且您确定它不会添加您不打算跟踪的任何内容,则使用“.gitignore
”并没有错。首先执行“git status
”检查。
我建议不要在每次提交之前执行此操作,因为大部分时间(至少对于大多数用例),您将修改现有文件并仅添加一个或两个全新文件。在这些情况下,“git add -u
”和“git add <file>
”通常不像“git add .
”或“git add -A
”那样工作,您总是需要检查自己是不是意外添加实际上是临时文件的新文件,应该忽略或删除这些文件。
“git add .
”在您知道从当前目录开始在层次结构中添加了许多新文件并且不想明确指定它们时最有用。您需要确保正确忽略您不想添加的所有内容。
答案 2 :(得分:4)
也许 git-commit -a 可以做你想要的吗?它将暂存和提交受版本控制的所有已修改和/或已删除的文件。
答案 3 :(得分:4)
你可以使用git commit -a
提交已经在sourcecontrol下的文件的所有更改(这就像subversion的commit命令)
答案 4 :(得分:2)
此外,您可能会欣赏交互模式(' git add -i '),如果您需要有选择地添加一堆文件,这可以加快速度。您可以在this GitCast中看到它。
答案 5 :(得分:0)
如果您的进度是“单线程”或单一分支,则没有内在问题,尽管其他各种选项都具有其他人建议的优势。但是,如果您在此分支中有多个“功能”,您可能希望有选择地将其合并到某个相关分支中,那么这种“每次提交所有内容”的方法将在当时进行更多工作。可能还有其他这样的优点(例如使用git bisect
)。如果正在发生的工作有多个逻辑线程,那么在提交时将它们分开可以在以后支付可观的红利。