3

.git 目录不断重新出现在我的项目中,在我认为应该被忽略的目录中。每次我清理项目或在 Eclipse 中刷新它时,它都会重新出现。重复的 .git 目录会导致冗余文件阻止项目构建。

我在 Eclipse 中有一个 Android 项目,它链接来自 Java 项目的源代码,这是 LibGDX 处理项目的方式。我不想要的 .git 目录包含一个导致冲突的文件,所以每次我想构建到设备时都必须删除它。

它正在创建目录 MyProject/bin/classes/.git。但我的 .gitignore 文件中有 bin/。我的存储库在 MyProject 中。

冲突文件是 \bin\classes.git\COMMIT_EDITMSG。这与我的链接源 Java 项目中的一个文件冲突:\gen.git\COMMIT_EDITMSG。也是同样的问题,因为我在该项目的 .gitignore 中有 \gen 。

我很确定在重建或清理项目时.git将目录复制到目录的Eclipse 或 ADT。bin

所以我现在的问题是,我如何让 Eclipse 和/或 ADT 停止这样做?

(如果您想查看我的旧 .gitignore,我认为这无关紧要,因为它已正确设置为忽略 bin 目录,您可以单击“已编辑”链接在此帖子的历史记录中查看它。)

4

4 回答 4

2

您需要.classpath为您的项目编辑文件并添加模式以忽略这些目录。

查找以下行:

<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>

并将它们更改为:

<classpathentry excluding="**/.git/**" kind="src" path="src"/>
<classpathentry excluding="**/.git/**" kind="src" path="gen"/>

双星号很重要,因为它们的意思是“任意数量的文件夹”(在这种情况下,分别是“不管是什么父母”和“不管是什么孩子”)。

查看Eclipse 文档中的包含和排除模式

于 2014-06-05T23:26:44.583 回答
2

如果您想要在 Eclipse 中排除要在构建期间复制的 *.git 文件,您可以在该特定项目的 Java Build Path 菜单下进行设置,然后将 *.git 添加到排除模式中。这里非常棘手,因为您可以指定包含模式或排除模式,但不能同时指定两者。因此,也许您想尝试排除 *.git 以便它在构建期间不会复制。

例如,请参见下面的屏幕截图:

在此处输入图像描述

于 2014-06-02T14:50:22.470 回答
1

你在使用子模块吗?– torek 2013 年 7 月 23 日在 20:27

我不知道那是什么,所以我不这么认为

无论如何,您都应该检查它,方法是转到该.git目录的父文件夹,然后执行 a git ls-files,寻找特殊条目(gitlink)模式 160000

cd MyProject
git ls-tree HEAD bin
160000 commit c0f065504bb0e8cfa2b107e975bb9dc5a34b0398  bin

正如jthill在评论中建议的那样:

git ls-files -s|grep ^16

另请参阅是否有MyProject/.gitmodules文件。

如果是这样的话:

git submodule deinit bin
git rm bin
git commit -m "remove bin submodule"
git push
于 2014-06-01T05:14:17.470 回答
0

如果文件已经在树中,则添加文件.gitignore不会将其删除:

$ git init
Initialized empty Git repository in <path>/.git
$ mkdir gen; echo created > gen/file
$ git add gen; git commit -m initial
[master (root-commit) 14c2756] initial
 1 file changed, 1 insertion(+)
 create mode 100644 gen/file
$ echo gen > .gitignore; git add .gitignore; git commit -m 'oops, ignore gen'
[master dc55e75] oops, ignore gen
 1 file changed, 1 insertion(+)
 create mode 100644 .gitignore
$ rm gen/file
$ git reset --hard HEAD
HEAD is now at dc55e75 oops, ignore gen
$ cat gen/file
created
$ git ls-files
.gitignore
gen/file

那么,你如何解决它?

$ git rm gen/file; git commit -m 'remove gen that we ignore'
rm 'gen/file'
[master 97de6f9] remove gen that we ignore
 1 file changed, 1 deletion(-)
 delete mode 100644 gen/file
$ mkdir gen ; echo created > gen/file
$ git status
# On branch master
nothing to commit, working directory clean

基本上,您必须提交删除要忽略的文件的更改,以便它们不在树中。在那之后,.gitignore 和缺少树内文件的组合将首先设置您想要的方式。

于 2013-07-23T06:11:14.467 回答