忽略Git中的.classpath和.project


76

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

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

现在从我的角度来看,我想尝试/做一些事情。当我克隆仓库时,我将获得.classpath和.project文件,当然在我的系统中它们也会被修改。

但是我希望它们不被提交,并且在与Git同步时应始终被忽略。这样我在本地系统中所做的更改就不会与Git混淆,而那些文件的Git更改也不会使我的本地文件混乱。

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


我是一个完整的Java n00b,但是根据Eclipse文档,这些文件存储在版本控制中。 wiki.eclipse.org/...
丹尼尔·席林

Answers:


116

如果.project.classpath已提交,则需要将它们从索引中删除(但不能从磁盘中删除)

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

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

# Eclipse Core      
.project

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

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


作为评论Abdollah

更改索引时,需要提交更改并将其推送。
然后从存储库中删除文件。因此,新手无法签出文件.classpath.project从存储库中签出文件。


更改索引时,需要提交更改并将其推送。然后从存储库中删除文件。因此,新手无法从存储库中检出.classpath和.project文件。
阿卜杜拉(Abdollah)

1
@Abdollah好点。我已将您的评论包含在答案中,以提高知名度。
VonC

@Abdollah为什么?提交并推送删除操作(以及.gitignore)后,您将无法轻松地重新添加这些文件。
VonC

PO希望.classpath和.project仍保留在存储库中。也许在这种情况下使用SKIP-WORKTREE是一个更好的选择。我已经在这里解释。@VonC不幸的是,在写了几分钟后,我删除了我之前的评论,说“在这种情况下git中没有解决方案”,删除它时我没有看到您的回应。
阿卜杜拉

11

在.gitignore中添加以下行,并将文件放置在ur project文件夹中

/target/
/.classpath
/*.project
/.settings
/*.springBeans

请解释一下你是编辑你的答案,避免只是代码aswer
GGO

1
我还没有看到有人回答这个问题,他们只是提供了一些链接以供参考。
Viyaan Jhiingade

2
我认为这个答案非常有用。我知道所有概念,但只想将确切的代码放入.gitignore文件中。谢谢@ViyaanJhiingade并欢迎您到StackOverflow。
Saurabh Patil '18

3

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

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

当您希望git忽略已经由git管理并存在于索引中的文件的更改时,可以使用它。这是配置文件的常见用例。

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

当每个仓库都可以在本地进行更改而git忽略此更改时,如何拥有它.classpath和存储库.project上呢?

正如我在接受的答案下评论的那样,缺点git rm --cached是它会导致索引发生更改,因此您需要提交更改,然后将其推送到远程存储库。作为结果,.classpath.project不会同时PO希望他们能有这么任何人克隆回购首次,就可以利用它提供的回购。

什么是跳工位?

基于git documentaion:

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

更多详细信息在这里


1
实际上,我在这里写过:stackoverflow.com/a/23806990/6309
VonC

很棒的比较。
阿卜杜拉

2
这应该是新接受的答案,因为这是将文件提交到git并忽略它们进行新提交的唯一方法。
IVleafclover

1

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

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


我已经在使用.gitignore。如果我要从本地提交或创建新的仓库,这将适用。如果您正在克隆存储库,我想.gitignore将无法正常工作,它将获取.project文件,并且所有更改都将不同步
Reddy 2013年

2
您需要将您.gitignore的信息提交给仓库,以便所有人使用。这样,没有人应该提交那些文件。.classpath和.project永远都不应该在仓库中。
olan 2013年

1
那么包含这些文件的现有文件/存储库又如何呢?
Reddy 2013年

1
您能否快速确认我对.ignore的怀疑。^以上评论
Reddy

1
我在该文件中没有看到.classpath或.project忽略?我想念什么吗?(即使我的gitignore中有一行内容,我的.project文件也不会消失)
Matthew Wise
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.