如何在重建期间阻止.git目录被复制到bin目录?

时间:2013-07-23 03:41:05

标签: android eclipse git libgdx

.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。

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

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

(如果你想看到我的旧.gitignore,我认为这是无关紧要的,因为它设置正确以忽略bin目录,你可以点击“已编辑”链接在这篇文章的历史记录中查看它。 )

4 个答案:

答案 0 :(得分:2)

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

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

enter image description here

答案 1 :(得分: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文档中查看Inclusion and Exclusion Patterns

答案 2 :(得分:1)

  
    

您使用的是子模块吗? - torek 2013年7月23日20:27

  
     

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

无论如何,您应该检查它,方法是转到.git目录的父文件夹,然后执行git ls-files,查找special entry (a gitlink) mode 160000

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

正如jthill建议in the comments

git ls-files -s|grep ^16

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

如果是这种情况:

git submodule deinit bin
git rm bin
git commit -m "remove bin submodule"
git push

答案 3 :(得分: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和缺少in-tree文件的组合将首先让你按照自己想要的方式进行设置。