git部署:未合并的工作树文件被合并覆盖

时间:2013-04-10 13:09:30

标签: git deployment

我正在尝试实现基于git的部署过程,例如在http://danbarber.me/using-git-for-deployment/中部署Web应用程序。 基本上它由实时服务器上的两个存储库组成:

  • 一个简单的回购,你推,“枢纽”
  • Web服务器公共目录中的正常repo,您​​可以从“hub”中提取。如果集线器有,则自动执行此操作 适当的更新后挂钩。

问题是在我的项目中我有很多目录,比如/ upload /,它们包含开发过程中的样本数据和网络服务器上的实时数据。

理想情况下,我希望将上传/文件夹保留在本地存储库中,但不要将其保存在实时存储库中。 现在,“部分”拉动它似乎不可能,不是吗?

所以,即使不是最佳解决方案(我无法在本地存储库中克隆样本数据),我也试图忽略这些文件夹,但是:

  • 我将上传/文件夹添加到本地和实时回购的.gitignore。
  • 我用git rm --cached upload /
  • 删除了它
  • 我将项目推向了裸露的“hub”仓库
  • 在我从集线器拉出的现场回购中
  • 我收到错误:未跟踪的工作树文件将被merge ... upload / xxx
  • 覆盖

在我看来,上传/文件夹仍然在某个地方...... 实际上,在写这篇文章时,我看到从集群中克隆,文件夹上传/也被克隆了!

那么唯一的解决办法就是从所有项目历史中完全删除文件夹,就像我在几个问题中看到的一样?

这是否会迫使在不同分支机构工作的所有其他同事陷入一些混乱的变种?

可能很难解释所有这些并掌握它,但任何想法都是受欢迎的。

2 个答案:

答案 0 :(得分:2)

您不需要做所有这些,假设您不想签出比分支机构负责人更早的提交。

您需要做的是在新提交中消除upload/*,从那时起,任何看到新提交的人都不会看到upload目录。

显然,您希望在任何克隆的“hub”上备份upload/*文件,从中提取,删除提交中的上传,然后将备份回到原位。现在数据存在于您的目录中,但git将不再跟踪它们。

注意:如果您不进行备份,则会删除集线器上的upload/*数据(通过签出较旧的提交可以恢复)或从中删除的任何人(如果没有跟踪,则通过git错误,或者通过检查旧的提交(如果被跟踪)可以恢复)。不过,最好先备份它。


示例:

$ git init
$ mkdir upload
$ echo 'upload/*' > .gitignore
$ touch to_track upload/not_track
$ git add .gitignore to_track upload/not_track
$ git commit

现在您在存储库中有upload/not_track

$ cp upload/not_track ../backup
$ git rm upload/not_track
$ git commit
$ mv ../backup/not_track upload/

现在当前目录中的文件没有改变,但upload/not_track不再存在于存储库中(从此提交转发)。

答案 1 :(得分:0)

很难确定没有看到git repo,但你所描述的内容不应该发生。

您是否在文件夹中检查了隐藏文件(例如,其中的.gitignore file.DS_Store(Mac文件夹浏览器缓存)或类似内容?)。 git rm不会自动删除忽略的文件。

如果您在git rm之前忽略git,则必须将其从忽略中删除,或直接rm