85

我一直告诉自己和其他人不要提交 .classpath 和 .project 文件并使用 Maven。

不知何故,初级开发人员总是忽略某些规则并提交这些文件,对于可以开始使用代码的新手来说,拥有这样的文件要好得多。

现在从我这边,我想尝试/做点什么。当我克隆 repo 时,我会得到 .classpath 和 .project 文件,当然它们会在我的系统中被修改。

但我希望它们不要被提交,并且在与 Git 同步时应该始终被忽略。这样我在本地系统中的更改就不会弄乱 Git,并且 Git 对这些文件的更改不会弄乱我的本地文件。

我如何实现这一目标?无论如何要以这种方式标记要忽略的文件?

4

4 回答 4

134

如果.projectand.classpath已经提交,那么它们需要从索引中删除(但不是磁盘)

git rm --cached .project
git rm --cached .classpath

然后.gitignore它将起作用(并且可以通过克隆添加和共享该文件)。
例如,此gitignore.io/api/eclipse文件将起作用,其中包括:

# Eclipse Core      
.project

# JDT-specific (Eclipse Java Development Tools)     
.classpath

请注意,您可以在克隆时使用“模板目录”(确保您的用户将环境变量$GIT_TEMPLATE_DIR设置为所有人都可以访问的共享文件夹)。
该模板文件夹可以包含一个info/exclude文件,其中包含您希望对所有repos 强制执行的忽略规则,包括任何用户将使用的新规则 ( )。git init


正如阿卜杜拉所说_

当您更改索引时,您需要提交更改并推送它。
然后从存储库中删除该文件。所以新手无法从 repo 中.classpath签出文件。.project

于 2013-09-23T09:06:58.667 回答
12

在 .gitignore 中添加以下行并将文件放在您的项目文件夹中

/target/
/.classpath
/*.project
/.settings
/*.springBeans
于 2018-03-02T05:29:09.250 回答
7

这种情况的 git 解决方案是设置SKIP-WORKTREE BIT。仅运行以下命令:

git update-index --skip-worktree .classpath .gitignore

当您希望 git忽略已由 git 管理并存在于 index 上的文件的更改时使用它。这是配置文件的常见用例。

运行git rm --cached不适用于问题中提到的场景。如果我简化问题,它会说:

当每个人都可以在本地更改它并且 git 忽略此更改时,如何拥有.classpath.project在 repo 上?

正如我在接受的答案下评论的那样,它的缺点git rm --cached是它会导致索引发生更改,因此您需要提交更改,然后将其推送到远程存储库。因此,当 PO 希望它们在那里时.classpath.project不会在 repo 上可用,因此任何第一次克隆 repo 的人都可以使用它。

什么是 SKIP-WORKTREE BIT?

基于 git 文档:

跳过工作树位可以用一个(长)句子定义:当读取一个条目时,如果它被标记为跳过工作树,那么 Git 会假装它的工作目录版本是最新的,而是读取索引版本。尽管该位看起来与假设不变位相似,但其目标与假设不变位不同。当两者都设置时,跳过工作树也优先于假设不变位。

更多详细信息可在此处获得。

于 2020-03-10T11:05:33.930 回答
1

使用 .gitignore 文件。这允许您忽略某些文件。http://git-scm.com/docs/gitignore

这是一个 Eclipse 示例,它处理您的类路径和项目文件:https ://github.com/github/gitignore/blob/master/Global/Eclipse.gitignore

于 2013-09-23T08:52:39.773 回答