2016-01-09 25 views
2

我从两年前返回到Eclipse和Java项目。我以为我会给SmartGit一个尝试。我已经允许SmartGit查找以前在命令行上管理的git存储库。令我吃惊的发现这8个仓库时,我只期待4.例如,在镜像镜像在Eclipse项目的二进制文件中发现的Git存储库

.../bin/COM /域/公用事业

SmartGit发现了一个存储库,并告诉我,所有.java文件丢失,并且所有.class文件都未被跟踪。这似乎很奇怪。我不记得在二进制端创建一个Git仓库。

什么更有意义是

../ src/COM /域/公用事业

被列为“修改”的文件对应于什么,我记得我最近编辑。来源方似乎如预期的那样。

回到命令行并查看来自git log的提交历史记录,我可以看到二进制日志与源日志完全相同,直到第二个日志。当然,在二进制文件中提交并在源代码中同时提交是不可能的。

我以前曾尝试在2012年10月使用EGit,但放弃了这一尝试。 EGit可能负责在二进制端创建这个奇怪的存储库(但所有.java文件都丢失,.class文件未被跟踪?)

如果这个镜像提交日志不是Git的正常输出,我将删除在二进制端的整个.git文件夹。我想在这里发帖,看看是否可以确认Git没有理由创建它。

回答

2

这很简单。 git知道一个文件夹是git项目的根目录,因为它包含一个.git目录。

你的src目录显然是这样的一个root git目录。

并且您的构建过程(或者仅仅是Eclipse)会将每个非Java文件递归地复制到bin。其中包括.git目录。所以,当你在bin里面时,git正确地认为它是git项目的根(因为它有一个.git目录)。它正确地表示所有的Java文件都丢失了(因为它们已被编译器替换为.class文件),并且它正确地表示所有的.class文件都未被跟踪(因为您没有对这些文件的任何忽略规则)。

您这样有两个问题:

  1. 我应该已经从一开始的根git的文件夹是src父目录:它包含的来源,而且,我相信,你的构建文件,脚本,文档等,应该也被版本化到git中。
  2. 由于src是根目录并且包含.git目录,所以构建应忽略.git目录而不是将其复制到bin
+0

我想我会告诉Eclipse停止复制.git目录。要通过'mv .git ../../../..'移动.git目录,然后'git add src/com/domain/package'似乎会导致文件被删除并添加文件。知道.git文件夹已被移动并不够智能。鉴于此,旧的'git checkout'可能最终会填充错误的地方。然而,我认为保持包级别的主要原因是包重用户可以从历史中受益。 (一个软件包重用户可能想要包历史记录,而不是我不相关的项目历史。) – H2ONaCl

+0

您不应该移动.git目录。你应该在你的git项目中移动文件。只需创建一个src目录(是的,在您当前的src下),然后将根包移到子目录。然后将顶级src目录(包含.git)重命名为“myProject”。 –