【问题标题】:Atlassian Sourcetree + GIT + Mac + Mountain Lion + Eclipse + Android project = failure modeAtlassian Sourcetree + GIT + Mac + Mountain Lion + Eclipse + Android 项目 = 故障模式
【发布时间】:2026-01-21 01:10:01
【问题描述】:

使用标题中的工具组合,当我签出一个分支时,SourceTree/GIT 会:

  1. 绝对不会从先前签出的分支中删除文件夹,所以如果我有带有 FOLDER1 和 FOLDER2 的 BRANCH-ALPHA,然后我检查了只有 FOLDER2 和 FOLDER3 而没有 FOLDER1 的 BRANCH-BETA,则生成的结构在 FINDER 中将显示 FOLDER1 仍然存在。可以一遍又一遍地重现。

  2. 通常甚至不会覆盖以前签出的分支中的文件,因此当我签出 BRANCH-BETA 时,我仍然会在 Eclipse 中看到 BRANCH-ALPHA。

我在结帐之前关闭 Eclipse,然后打开 Eclipse,CLEAN 和 BUILD 一切。这确实是 GIT 的问题。

唯一的“解决方案”是删除所有文件夹和所有元数据,然后签出分支。这通常会导致花费几个小时试图“说服”Eclipse 打开项目、创建新的工作区、新的元数据等,然后修复诸如路径等很多东西。

非常感谢有关如何进一步研究原因并找到解决方案的任何想法。

【问题讨论】:

  • 您确定 FOLDER1 已在 BRANCH-ALPHA 中提交吗?

标签: eclipse git macos osx-mountain-lion atlassian-sourcetree


【解决方案1】:

Git 仅在签出新提交时删除 empty 文件夹。您可能会看到明显空的目录,因为其中存储了隐藏文件。如果您尝试通过在 Finder 中打开它们来监控行为,那么您实际上会导致问题,因为 Finder 会创建隐藏文件来跟踪文件夹的显示方式。

文件夹在那里真的让你感到困扰吗?您可以添加一个post-checkout hook,在每次结帐后运行git clean -dxf;这将删除 git 不知道的所有文件。请注意,它还会删除已编译的类,因此需要重新构建。

另一种可能性是某些东西正在锁定文件或目录,因此当它们仍被其他程序打开/锁定时,git 无法删除它们。这也可以解释为什么某些文件没有更新到正确的版本。切换分支时git会抱怨吗?如果文件确实被锁定,则应该这样做。

【讨论】:

  • 感谢您参与其中...似乎在objective-c / xcode项目中,GIT会删除不属于您要签出的分支的文件夹... GIT不是抱怨,我总是在签出分支之前完全关闭 Eclipse,但文件可能具有 Eclipse 在 OSX 文件系统上设置的某种只读权限。我对 VCS 的期望是,在签出分支后,文件系统应该与签出的内容完全匹配,当然 .ignore'd 文件和文件夹除外。这提醒我在这个问题上检查全局 .ignore ...