2009-09-30 52 views
8

作为一个git noob在Rails项目上试用它,我想知道在每次提交之前执行git add .(添加当前目录)是否是不好的做法。我见过的介绍教程显示最初添加当前目录,然后使用git add new_file在此之后添加文件。如果我从一堆不同的目录中添加一堆文件,这似乎太难了。更好的方式来使用git add?

从本质上讲,如果添加不止一两个文件,是确定我要提交每次使用git add .?对于自上次提交后创建的每个文件,是否使用git add .与明确执行git add new_file相同?

回答

11

git add .将新增一切的在层次结构,包括新的文件。如果你想跟踪目录中的所有文件,这很好。

另一个(也许更常见)用法是做git commit -a,它只添加自提交之前上次提交以来更改的文件,并且不包含任何新文件。

编辑:git add .不会删除自上次提交后删除的任何文件。如果你正在删除文件,我会使用git rm <myfile>,以便git获知删除的文件,并且你不会忘记确保git知道它被删除了。正如另一条评论中提到的,git commit -a通知已被删除的文件。

+0

谢谢詹姆斯。因此,使用'git add .'并不是低效或多余的,而是单独显式地添加文件。 “重新添加”已添加的文件并不差。 – 2009-09-30 15:13:40

+0

“重新添加”一个没有改变的文件对任何东西都没有影响,所以不,它不坏。 我不知道效率低下 - git add .在我使用它时是瞬间的,但我不知道这是否仍然是大文件夹中的情况。 – 2009-09-30 15:24:53

+0

但是,'git add .'会添加可能不应该的文件,例如编辑器备份和随机的其他短暂文件。 – Novelocrat 2009-10-01 03:32:01

4

也许混帐提交-a你想要做什么?它将暂存和提交所有在版本控制下的修改和/或删除的文件。

4

可以使用git commit -a提交所有改动已经在sourcecontrol文件(就像Subversion的commit命令)

+0

'git commit -a'和'git add -u'之间的解释是按顺序的。使用'git commit -a'会导致无意中添加一个无意的文件。 – Sukima 2013-11-13 01:34:54

+0

@Sukima:'git commit -a'只会提交已经跟踪的文件。它永远不会添加新的未跟踪文件。 – knittl 2013-11-13 06:17:27

2

此外,您可以欣赏交互模式(“git的添加-i”),如果你需要有选择性地添加一堆文件,可以加快速度。您可以在this GitCast中看到它的行动。

+0

已移动或已被替换。找到这个,而不是:http://blip.tv/scott-chacon/c3-add-interactive-4113507 – 2012-12-14 06:44:29

+0

谢谢@adifferentben - 良好的捕获。我会通过您的更正更新我的答案。 – ewall 2012-12-16 02:37:15

+0

@ewall:但答案还没有更新?!链接仍然是404。 – Sukima 2013-11-13 01:35:48

8

如果您的.gitignore是最新的,并且您确定它不会添加任何您不打算跟踪的内容,那么使用“git add .”没有任何问题。先做一个“git status”来检查这个。

我不建议在此之前所有提交,不过,因为大多数的时间(至少对于大多数使用情况),您将修改现有的文件,只添加一个或两个完全新的文件。在这种情况下,“git add -u”和“git add <file>”是与“git add .”或“git add -A”你总是需要检查你不小心添加新的文件实际上是临时文件,哪些应该被忽略或工作较少删除。

git add .”在您知道从当前目录开始在层次结构中添加了许多新文件并且不希望全部明确指定它们时最为有用。您需要确保您不想添加的所有内容都被正确忽略。

0

如果您的进度是“单线程”或单一分支,那么就没有内在问题,尽管其他人都有其他选择。但是,如果您在此分支中有多个“功能”,您可能希望选择合并到某个相关分支中,那么此类“每次都执行所有操作”方法将在当时做更多工作。可能还有其他的这些优点(例如使用git bisect)。如果发生的工作有多个逻辑线程,那么在提交时将它们分开,以后可以派发丰厚的股息。