Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git部署:未跟踪的工作树文件被合并覆盖_Git_Deployment - Fatal编程技术网

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

git部署:未跟踪的工作树文件被合并覆盖,git,deployment,Git,Deployment,我正在尝试实现一个基于git的部署过程,比如部署web应用程序。 基本上,它由实时服务器上的两个repo组成: 你推动的裸回购“枢纽” web服务器公共目录中的正常repo,在其中从“中心”提取。如果集线器具有 适当的更新后挂钩 问题是,在我的项目中,我有许多目录,如/upload/,其中包含开发期间的示例数据和Web服务器上的实时数据 理想情况下,我希望将上载/文件夹保留在本地回购上,但不在实时回购上拉它。 现在,“部分”拉动似乎不可能,不是吗 因此,即使不是最佳解决方案(我无法克隆本地r

我正在尝试实现一个基于git的部署过程,比如部署web应用程序。 基本上,它由实时服务器上的两个repo组成:

  • 你推动的裸回购“枢纽”
  • web服务器公共目录中的正常repo,在其中从“中心”提取。如果集线器具有 适当的更新后挂钩
问题是,在我的项目中,我有许多目录,如/upload/,其中包含开发期间的示例数据和Web服务器上的实时数据

理想情况下,我希望将上载/文件夹保留在本地回购上,但不在实时回购上拉它。 现在,“部分”拉动似乎不可能,不是吗

因此,即使不是最佳解决方案(我无法克隆本地repo中的样本数据),我也会尝试忽略这些文件夹,但:

  • 我将上载/文件夹添加到.gitton本地和实时repos
  • 我用git rm——缓存上传删除了它/
  • 我把这个项目推到了“中心”回购协议上
  • 在实时回购中,我从中心提取
  • 我得到错误:未跟踪的工作树文件将被merge…upload/xxx覆盖
在我看来,上传/文件夹仍在某处。。。 事实上,在写这篇文章时,我看到从中心克隆,文件夹upload/也被克隆了

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

这是否会迫使在不同分支机构工作的所有其他同事进行一些混乱的重新基准


解释和理解这一切可能很困难,但任何想法都是受欢迎的。

假设您不想签出比分支负责人更老的提交,则无需执行所有这些操作

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

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

注意:如果不备份,您将删除hub上的
上传/*
数据(可通过签出较旧的提交进行恢复)或从中提取数据的任何人(如果未跟踪,则由git出错;如果跟踪,则通过签出较旧的提交进行恢复)。不过,最好先备份一下


例如:

$ git init
$ mkdir upload
$ echo 'upload/*' > .gitignore
$ touch to_track upload/not_track
$ git add .gitignore to_track upload/not_track
$ git commit
现在您在存储库中有了
上载/不跟踪

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

现在,当前目录中的文件没有更改,但是
上载/not_track
不再位于存储库中(从这次提交开始)。

如果没有看到git repo,很难确定,但是您所描述的不应该发生

是否已检查文件夹中的隐藏文件(例如,其中的
.gitignore文件
,或
.DS\u Store
(Mac文件夹浏览器缓存)或类似文件?)。git rm不会自动删除被忽略的文件


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

git rm--cached
仅从索引中删除文件,这意味着接下来将提交什么。它实际上不会删除该文件,也不会在下次提交时将其标记为删除。如果您已经完成了git add upload/*
(并且没有提交),那么它只能做一些事情,否则它什么也做不了。哇,好的洞察力,简单明了的解决方案!我没想过。谢谢!