【问题标题】:How do I prevent .git directory from getting copied to bin directory during rebuild?如何防止 .git 目录在重建期间被复制到 bin 目录?
【发布时间】:2013-07-23 03:41:05
【问题描述】:

.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 目录,您可以单击“已编辑”链接在这篇文章的历史记录中查看它。 )

【问题讨论】:

  • 你有没有可能在src 文件夹中有一个(单独的)存储库?
  • 你能分享两个 COMMIT_EDITMSG 的内容吗?这可能会有所帮助。

标签: android eclipse git libgdx


【解决方案1】:

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

例如看下面的截图:

【讨论】:

  • 当我从链接的源文件夹中执行此操作时,这解决了我的问题。谢谢!我已经为这个问题苦恼了一年!
【解决方案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。

【讨论】:

  • 谢谢,这与接受的答案相似,但另一个答案更早并且更容易实现。我正在链接一个项目的源代码,该项目也在链接源代码,当我添加 gen 路径时,这让人窒息。
【解决方案3】:

你在使用子模块吗? – 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

【讨论】:

  • s/可以/应该/。我会git ls-files -s|grep ^16我自己。 +1,that clone submodules checkbox 也适合这个。
  • @jthill 我同意,并相应地编辑了答案。
【解决方案4】:

将文件添加到 .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 和缺少树内文件的组合将首先设置您想要的方式。

【讨论】:

  • 我不认为这是我的具体问题。在我创建存储库之前,那个 bin/ 目录已经在我的 .gitignore 中。另外,我现在通过删除项目顶层的 .git 目录删除了存储库。但是当我在 Eclipse 中清理项目时,bin/ 中的 .git 目录又出现了!
  • 可能是别的东西。你在使用子模块吗?
  • 我不知道那是什么,所以我不这么认为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 2019-05-16
  • 2012-07-05
  • 1970-01-01
  • 2010-11-02
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多