管理Git暂存服务器和生产服务器

3
我一直在使用Git/Beanstalk开发新网站,将本地服务器上的更改推送到暂存服务器上非常方便。现在我想要在生产服务器上启动网站,不知道正常的操作流程是什么(其他链接中没有涉及...)。
我希望使用这个新的生产服务器,从零开始进行,而不是从暂存服务器上过去六个月中所做的成千上万的更改中推送过来。有没有办法做到这一点?我只需要创建一个新的版本库,删除旧的版本库等吗?如何清除历史记录,使其只接受当前暂存服务器上的内容并进行推送(或者是从本地服务器推送)?我使用Tower,对Git的了解仅限于几乎不会出错(命令行不是我的强项)。你能否总结一下并说“这是1.0版本,让我们从这里开始”之类的话?
此外,当我忽略缓存文件和图片等时,有些懒惰。我是否可以在事后轻松添加.gitignore文件呢?

这个问题并不是与ExpressionEngine相关的,最好将其放在stackoverflow或专门的git stackexchange网站上。 - CreateSean
我曾经考虑过这个问题,但后来觉得这与我的代码库中的EE图像文件/缓存文件和常规程序有关。下面给出的答案非常有帮助,也许其他人会发现它们有价值?如果没有,可以自由移动它(只要让我知道它去了哪里!)。 - Jim Hull
3个回答

4
请注意,Beanstalk只会部署您文件的最新版本(或者如果您需要其他修订版本)。因此当您添加生产服务器到Beanstalk时,Beanstalk将上传所有当前在您的存储库中的文件到您的生产服务器。
它不会一项一项地部署,因此任何“历史记录”都不会减慢它的速度或使用任何空间。

谢谢!这基本上消除了我所有的担忧。 - Jim Hull

3
正如Adrian所说,这不是一个问题,除非你在Git中有大量的二进制文件(例如图像上传等)而不应该存在。个人认为,我不会清空我的历史记录,因为对于调试来说非常宝贵,尽管我对提交内容和频率非常严格。
如果你想从你的仓库中删除之前添加的文件,但想保留本地副本,请执行以下操作:
git rm --cached /path/to/remove 这将从索引的当前状态中删除它们,但保留实际文件,然后您可以将其添加到您的.gitignore中。这对于您错误地刚刚将文件添加到git中或对于不需要考虑存储库大小或安全性的小文件非常有用。
但是,如果您以前已经提交了这些文件,它们将仍然存在于您的历史记录中,因此您的总存储库大小可能会增加(例如,如果您过去添加了PSD或一些大型图像)。如果您想从您的历史记录中完全删除文件(如果某种方式出现敏感数据也很方便),请执行以下操作:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <NAME OF FILE>' --prune-empty --tag-name-filter cat -- --all

这个命令将运行每个分支和标签的完整历史记录,更改涉及您指定的文件的任何提交以及之后的所有提交。之后为空的提交(因为它们只更改了Rakefile)将被完全删除。警告:它也会覆盖您现有的标签。
删除文件后,您可能需要使用以下命令强制推送您的更改:
git push <remote> <branch> --force

但是,你需要确保自己在那个时候做的事情是正确的,因为这将覆盖远程历史记录,并且此时它真的会消失。如果你选择这条路线,有一个更详细的教程可以点击这里

但由于你正在使用Beanstalk,这不是一个重大问题,因为它只会部署你文件的最新版本而不是整个 repo/历史记录。


2
除非你的git仓库真的很大(因为你意外添加了一堆媒体文件之类的东西),否则这样做几乎没有意义。版本控制的整个目的是为了保留更改历史记录,以便您可以回顾查看何时以及为什么添加了某些内容。之所以没有教程涵盖这一点,是因为这不是你通常使用git的方式。
我唯一能想到你想要这样做的原因是,你添加了许多不属于git的文件(大型媒体文件、缓存等),这些文件已被删除,并且在将它们推送到生产服务器上需要很长时间(因为你提到忘记从.gitignore文件开始)。在git中,所有文本文件都被压缩,因此不需要担心你已经进行了多少次提交(相比之下,PHP源代码有超过70,000个提交,追溯至14年前,Linux内核有超过300,000个提交,许多其他成功的开源项目也是如此——因此,即使你已经进行了1000次提交,你也只是在表面上涉及了git的功能)。
在这种情况下,你所说的是清除整个历史记录并创建一个新的空白git仓库。你只需要删除/.git目录,并初始化一个新的(从Tower或命令行使用git init)。
请注意,如果你创建了一个全新的仓库,然后尝试推送到你的暂存服务器上,你将需要使用--force选项,否则它会抱怨你正在尝试重写历史记录(你确实在这样做)。当你点击Push时,Tower也有类似的force复选框。
当然,你可以在事后添加.gitignore文件。但是,请记住,这不会删除您之前添加到仓库中的任何文件。因此,最好避免首次提交文件,否则它们将永久地留在你的仓库历史记录中(有一些方法可以重写历史记录并从旧提交中正确删除所有文件的痕迹,但它们很难并超出了本答案的范围)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接