忽略git中的文件夹,没有推送和没有部署

时间:2017-07-01 05:11:21

标签: git

我们是两个人,当地回购链接到Gandi主办的远程回购。这个远程仓库通过Gandi' deploy'部署到浏览器可访问的实时位置。 ssh命令我不确定它是如何工作的。

所以有2个本地人,1个遥控器和1个真人回购。

我们在拥有cms的网站上工作,我们希望实时位置保留通过cms完成的更改,这些更改发生在"内容"文件夹中。

因此我们认为将文件夹添加到本地存储库中的.gitignore,然后推送,将保留每个存储库的内容文件夹,而不是推送或部署它们。

但似乎并没有这样做。要停止跟踪已跟踪的文件夹,我被告知要执行以下操作,并在gitignore中添加该文件夹:

git rm -r --cached <folder>

但显然,当我的合作拉出时,他的文件夹将被删除。这意味着它也将在远程仓库中删除,因此部署它将在我认为的实时位置删除它。

另一种方法似乎是跟踪文件夹,但忽略进一步的更改:

git update-index --assume-unchanged <folder>

显然这需要在我和我的合作本地回购中运行。但是由于仍在跟踪文件夹,我假设在部署远程仓库时,它会覆盖内容文件夹。

我们需要的是每个位置的内容文件夹,2个本地人,1个远程,特别是1个直播,按照原样保留。告诉git根本不要推它。

部署过程可能是一个重要因素。这是Gandi的命令,我不确定它是如何工作的。同时我想了解git部分。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

这显示了Git作为部署工具的限制。

最好是从git repo中删除内容文件夹,以便任何git push命令都不会触及该文件夹。

mentioned in this thread那样,您可以查看kirby-git-commit-and-push-content

  

Kirby的一个插件,它通过Panel提交并推送更改到您的Git存储库。

  

我需要将内容文件夹一次推送到远程,然后部署到live;然后在任何地方完全忽略它,所以我们可以在本地手动处理它,而cms在实时位置处理它。

     

之后到处完全忽略它,

这就是git rm -r --cached将要做的事情 但是为了避免后续git pull删除该文件夹,请将其替换为您的repo内容文件夹 的本地副本的符号链接,并确保在您的repo中忽略符号链接。< / p>

答案 1 :(得分:0)

由于您不想在git仓库中使用该文件夹,因此您当然应该(在某些时候)将其从您的仓库中删除。

git rm -r --cached <folder>

除了将文件夹添加到.gitignore之外,正如您所做的那样,是处理事物的git方面的方法。一旦完成这两个,git就不会知道或关心文件夹,这是你关于git的第一个目标。

然后我会这样做:

1。)从您的网站下载当前内容折叠(通过ftp或其他工具)。 100%确保您拥有当前站点的备份。

2。)推你的回购。根据部署工具的详细信息,这样做可能会也可能不会从您的站点中删除内容文件夹。一些部署工具完全删除整个网站并重新上传所有代码,其他部署只上传更改的文件等。无论您的实时内容文件夹是否被删除都与git无关,只与您的部署工具有关。

3.)如果您的部署工具碰巧删除了内容文件夹,只需立即通过ftp重新上传。这会导致一点停机时间;只要您做好准备,停机时间就会非常短暂。

4.。)其他代码协作者也可以下载内容文件夹,将它放在他们的git仓库中,这样他们就可以在本地工作,而git会忽略它,因为它位于.gitignore

执行此操作后,您将能够推送您的仓库,并且内容文件夹将保持不变,假设您的部署工具未删除它。

但请注意,这不是最佳做法。最佳实践是服务器上的所有代码在git存储库中始终,而不是可能是构建/编译的文件。为什么?好吧,如果你的服务器完全被炒了怎么办?您的服务器损坏,在火灾中被破坏等等?如果发生这种情况,并且内容不在您的git仓库或其他服务器上的最近备份中......您将永远丢失所有内容。如果您开始获得大量流量并需要两台服务器来处理额外负载,该怎么办?如果所有代码都在您的仓库中,您可以创建一个新服务器(&#34;旋转&#34;如果您想要真正的术语),将代码推送到它,您可以100%确定它将具有与第一台服务器完全相同的内容。

我认为您的下一个问题是:我需要远程开发人员才能编辑内容文件夹,以便他们可以在本地尝试。最好的方法是使用 branches pull requests 。每当开发人员想要将代码部署到您的实时站点时,强制它们(Bitbucket和Github允许您在分支上要求拉取请求,这意味着不能对分支进行直接编辑)来使用拉取请求。然后,您将查看所有拉取请求,并确保未对内容文件夹进行任何更改。如果您想要更改实际网站上的内容,请先在本地存储库中进行更改,测试更改,然后推送/部署到您的实际网站!也许你有一个博客文章撰稿人,他做了大部分的内容更改?为他们创建一个特殊的分支;他们可以进行他们想要的所有更改,然后将该分支合并到master中并将其部署到实时站点。

抱歉,很多编辑和大量的写作。另一个不错的选择可能是将内容文件夹放入自己的仓库中。远程开发人员可以从此repo中获取,但不会推送更改。您的博客编写者/内容创建者是唯一可以对其进行更改的人(Bitbucket允许这样做,我假设Github也这样做)。您可能需要稍微配置部署工具以将两个存储库推送到特定位置,但这也是一个不错的选择。

最后,我认为最好的选择 - 使用CMS将数据存储在数据库中:)在我看来,这正是数据库的用途。 Web服务器应该是完全一次性的,实际上对于获得大量流量的站点,必须是;我们必须能够使用完全相同的代码启动多个服务器以便处理流量,并且所有这些服务器都能获得他们的动态内容&#34;可以从数据库中说出来。

相关问题