【发布时间】:2013-04-10 21:43:02
【问题描述】:
我正在尝试实现一个基于 git 的部署过程,例如 http://danbarber.me/using-git-for-deployment/ 来部署一个 Web 应用程序。 基本上它由实时服务器上的两个存储库组成:
- 一个裸仓库,您在其中推送“中心”
- Web 服务器公共目录中的普通存储库,您可以从“集线器”中提取。如果集线器有一个 适当的更新后挂钩。
问题在于,在我的项目中,我有很多目录,例如 /upload/,其中包含开发期间的示例数据和网络服务器上的真实实时数据。
理想情况下,我希望将 upload/ 文件夹保留在本地存储库中,而不是将其拉到实时存储库中。 现在,“部分”拉动它似乎是不可能的,不是吗?
因此,即使不是最佳解决方案(我无法在本地存储库中克隆示例数据),我也会尝试忽略这些文件夹,但是:
- 我将 upload/ 文件夹添加到本地和实时存储库上的 .gitignore。
- 我用 git rm --cached upload/ 删除了它
- 我将项目推送到了裸“中心”存储库
- 在我从中心提取的实时存储库中
- 我收到错误:未跟踪的工作树文件将被 merge...upload/xxx 覆盖
在我看来,upload/ 文件夹仍然在某个地方...... 确实,在写这篇文章时,我看到从中心克隆,文件夹 upload/ 也被克隆了!
唯一的解决方案是,从所有项目历史记录中完全删除该文件夹,就像我在几个问题中看到的那样?
这是否会迫使在不同分支上工作的所有其他同事进行一些混乱的变基?
可能很难解释和掌握这一切,但欢迎提出任何想法。
【问题讨论】:
-
git rm --cached只从索引中删除文件,这意味着接下来要提交的内容。它实际上并没有删除文件,也没有将它们标记为在下一次提交中删除。只有当你完成了git add upload/*(并且没有提交)它才会做一些事情,否则它什么都不做。
标签: git deployment