.gitignore 是否在提交、推送或到达服务器时起作用?

Does .gitignore work on commit, push, or upon reaching the server?

假设我有一个 .gitignore 来忽略所有 .class 个文件。

当...

时,这些文件是否保留在远程源之外?

I commit/add my files locally?

是的。 .gitignore 一旦存在就会应用,适用于所有尚未添加到索引中的文件。
如果一个被忽略的文件已经被添加到索引中(在 .gitignore created/updated 之前),那么该文件 将成为提交 的一部分。您需要先手动将其删除:git rm --cached -- afileToIgnore

不要忘记添加并提交 .gitignore 文件本身,因为这些忽略规则不仅对您的本地存储库有效,而且对该存储库的任何克隆也有效。

Does git git only push files that aren't being described in the .gitignore?

是,除非该文件是在 .gitignore 之前添加的,或者是强制添加的。
git add --force -- afile 会将文件添加到索引,即使它应该被忽略。

Does the server that is holding the git repository keep out files based on it's .gitignore?

否:服务器只会将 .gitignore 添加到 repo,不会对其他版本文件产生任何副作用。

I commit/add my files locally? Does my git look for a .gitignore when add/commit is used, and based on what it says, removes things from the commit?

git add ignores files and directories based on the rules expressed in .gitignore. git commit 不关心你的 .gitignore。它使用 git addgit rm(以及其他 git 命令)已经准备好的信息到索引中,在本地存储库中创建一个新的提交。

git rm 是您可以用来删除文件并将其记录到要停止跟踪的索引中的命令。如果您已经从工作树中删除了该文件,您还可以使用 git add 将其删除记录到索引中。

I push my commits? Does git git only push files that aren't being described in the .gitignore?

git push 也不关心您的 .gitignore 因为它不适用于文件。它将本地存储库中已存在的信息发送到远程存储库。如果您要忽略的文件已经存在,那么它也会转到远程存储库

如果您在存储库中有文件并且您希望不再跟踪它们,您必须将它们的名称(或匹配它们名称的通配符)添加到 .gitignore 使用 git rm 将删除请求添加到索引中,以便在下一次提交时处理。

存储库(本地和远程)中已存在的那些文件的版本不会被删除。您必须为此重写历史记录,但不建议在多人使用的存储库上重写历史记录。

It reaches the origin? Does the server that is holding the git repository keep out files based on it's .gitignore?

您推送的提交中的所有内容都会到达远程存储库。但是为了让 git 在您的同事在他们的计算机上签出项目时尊重 .gitignore,您必须将 .gitignore 文件添加到存储库;并提交和推送,当然,让 .gitignore 文件找到进入他们系统的方式。没有"my .gitignore"和"its gitignore"。 .gitingore 文件必须添加到存储库(并在每次更改时提交)以便对每个人都有效。