我正在公司内部实施更好的版本控制实践,而且我并不完全确定如何开始使用git来应对我们目前的情况。
现在我们有一个开发和生产服务器。直接对开发服务器进行更改,在经过测试和准备好之后,我们通过良好的SFTP拖动将它们移动到生产服务器上。下降。
我想以某种方式在这个过程中实现git(使用GitHub),但我不确定从哪里开始。我们的开发代码库非常与我们的生产代码库不同,因为我们有10-15个正在进行的项目和错误修正,但不能或不应该推送。
我们如何以一种我们可以开始使用git的方式实现这一点,而不必首先将我们的dev与生产代码库相匹配?
答案 0 :(得分:5)
首先,如果您有10-15个正在进行的项目,他们现在如何与彼此合作?
Git通过提供分支来解决这个问题。因此,不是将项目混合在一起并共享问题,而是将每个实验分离到它自己的分支上,并且将基于主分支或开发分支。如果涉及它,这也有利于使它们更容易合并。
那么推荐的工作流程是什么?简而言之,只需使用一个中央git存储库。
我想说,将中央git存储库从生产代码中移除,然后移植到"实验"有希望的。或者让实验者将它们合并到新的分支上,然后帮助他们提交它们并推动分支机构。
然后,要更新生产,您将从主分支中提取。要更新开发服务器,您可以从开发分支中获取。不再使用SFTP。功能分支实验可以根据需要切换到开发,甚至更好,只能用于每个开发人员正在运行并自行测试的本地副本。
这本身与git无关,但是图片中很大一部分似乎都缺失了,因为y'都依赖于SFTP,它没有版本化:一旦你有版本控制系统到位后,只要将它们推送到中央存储库,就不再需要托管签出的位置和提交的位置。您现在可以托管本地主机版本的网站来运行实验。它会很快。它将是可访问的。它不会破坏开发服务器或实时服务器,直到您真正提交并更新它们,因此您可以在本地计算机上的本地分支上非常自由且非常有力地进行实验。假设您正在使用网站,您只需在主机文件中创建一个带有别名的完全本地副本即可。所以我在http://nw.local有一个完全本地的网站,它映射到一个带有git存储库的文件夹。如果我想进行实验,我git branch experiment;git checkout experiment
然后进行攻击并进行提交,如果我喜欢结果,我会将提交重新绑定或合并到dev分支上并推送它。然后我经常删除那个分支,并开始一个新的分支,具有新的或类似的实验特征。
答案 1 :(得分:1)
你有一个典型的场景,一切都在掌控之中。使用git,它更加简单。
首先,我建议你有一个中央git存储库。可以将生产和开发服务器建立为该中央git存储库的不同分支。现在,由于您始终使用生产分支部署生产代码,因此我们将其称为中央仓库的master
分支。
有了这个,让我们来到开发服务器。您首先创建另一个名为dev
的分支,并将其基于master
分支。它反映了您产品的最新稳定版本,并且dev
分支应该是master
+将要发布的功能。有了这个结构,您现在需要建立一个协议来测试和部署正在进行的所有项目。
现在,假设员工X正在处理功能F.然后X可以在他的本地创建一个名为branchFeatureF
的新分支。这需要从origin/master
分支创建,因为这是稳定版本。 X在他的功能上工作了几天,感觉它已经准备好接受测试了。好的,现在把它推到dev
分支。它与推送master
一样好,但由于您仍处于测试阶段,因此您正在使用dev
分支进行测试,然后再转到master
。
所有QA都在开发分支上完成。修复任何错误后,功能F现在可以发布了,所以是时候将功能分支branchFeatureF
合并到master
并部署代码 - 非常棒。
现在主人具有功能F,因此在您dev
分支上的另一名员工X'测试另一个功能F'之前,您将从功能F的最新master
中提取更改并测试出来。当然,如果这些特征没有相互冲突,F和F'可以同时处理X和X'推送到dev
分支并立即测试它们各自的特征。
从本质上讲,您通过要求他们创建自己的功能分支但确保他们始终推送到dev
分支并{{1}分支始终与最新的master保持同步。这确保在合并分支时不会浪费时间来计算任何合并冲突。作为repo维护者,您将负责将QA批准的功能分支合并到master中并在生产中部署代码。没有弄乱dev
分支。