我遇到以下情况:我的git存储库先前已经检查过.project文件,我们希望将它们删除,因为它们会导致各种导入问题。所以我创建了一个分支,在那里我删除了所有.project文件,添加了" .project"到.gitignore,并计划将其合并为master,让所有开发人员下载最新更新,并重新导入。我已对此进行了测试,并且工作正常......新的元数据(即.project)文件由Eclipse创建,但由于.gitignore更改而被忽略。
问题是,如果开发人员切换到他们在修复前创建的其中一个问题分支,那么该分支仍然会有旧的(不正确的).project文件,这些文件在签出时会覆盖刚刚生成的eclipse。工作目录。这打破了一切......
我试过" update-index --skip-worktree"并且" - 假设 - 未更改",但它不能正常工作,我假设因为这些文件不再在索引中而被忽略。有没有办法,在告诉他们重新导入所有内容之前,没有将主人合并回所有分支,我可以解决这个问题吗?
感谢。
编辑:我应该注意,虽然我对git很有经验,但我团队中的开发人员都是完整的新手。所以理想情况下,任何解决方案都是我可以在回购方面做的,他们可以点击"拉"让一切都自动化。如果只有一个命令可以通过SourceTree控制台运行,那么这也可能有用......答案 0 :(得分:1)
可能,如果您可以与存储库的所有用户协商,那么最合适的方法是重写整个存储库,完全擦除文件。使用git filter-branch,如下所示:
git filter-branch --tree-filter 'rm -f .project && \
if ! test -f .gitignore || ! grep -q "^\.project$" .gitignore; \
then \
echo .project >>.gitignore; \
fi' -- --all
如果您的存储库足够大,那么您可能希望使用--index-filter
而不是--tree-filter
,因为--index-filter
直接在git DB上运行而不会检出存储库中的每个提交。但--index-filter
的脚本更复杂,更麻烦。
然后,在重写存储库并且检查了每个分支中的每个提交都收到了所需的更改之后,所有开发人员都应该重新获取存储库。最好让他们在收到修改后的存储库时开始最小化rebase工作之前,将所有本地更改推送到存储库。