2016-11-30 45 views
1

我已经使用Git进行尝试,但我很确定我没有正确使用它。
我想知道如何使用Git变得更专业。
我想从新鲜开始,因此从没有安装Git的情况开始。
当然,我已阅读手册并Google搜索了很多,但我不确定如何正确使用它。如何正确使用Git Git?

现在我们有一个专门的网站unix服务器。
我在Windows上使用PhpStorm进行web开发,并且我有一个大学在.htaccess中进行301小重定向更改。
也许未来我们会与另一位程序员一起扩展。
我希望能够跟踪他所做的更改,或者仅仅是为了向.htaccess添加一些重定向而过度使用Git?

在这种情况下使用git的最佳方式是什么?
主人应该在哪等
我对Git很新,所以请具体说明一下。
我也听说有可能在我上大学之前必须检查提交的内容,我想这样工作。

还做我需要用新的代码更新主或它都将是独立的树枝等

回答

2

让我用简单和最低的单词来解释。

  1. Git不一定只用于多用户环境,但它对于单个开发人员来说是相同或更有用的独立。开始时,我们应该首先利用其作为单个开发人员的所有功能,而不是协作方式。

  2. 让我们在本地系统上创建git存储库(使用git init),并且开发人员正在开发(master或branch,稍后会使用..),在开发周期中他/她应该识别非常小但完整正在工作的工作单元,即按钮被添加并且它正在执行一些基本的功能,并且它应该被分阶段(git add)和提交(git commit),并具有适当的详细信息。作为一名开发人员,我常常每天在本地存储库中进行5到10次提交。

  3. 阶段2的优点是,我们可以随时回到过去。并在遇到任何问题的情况下..创建本地存储库,因为它在提交编号。 3或提交否。 10(git checkout .. commit no。)在调试过程中非常有用,并且具有清晰的图像供进一步规划。即使在任何特定提交(git diff将显示任何2次提交之间的差异)后引发的任何问题都会很容易。所以我们通过git对我们的文件有非常好的控制。

  4. 现在不用在master中工作了,我们可以选择在分支中工作。例如,在每个新功能之前,可以创建一个分支(git branch branch_xyz,git checkout branch_xyz),并且我们可以制定某些规则(不是通过git),比如(代码审查完成,单元测试,组件测试)没有完成,代码将不会合并为主..审阅者,测试人员或感兴趣的项目团队,可以将他们系统中的特定分支拉到他们的活动中。无论是其主分支还是分支,提交逻辑都保持不变,第2点中提到的所有内容都将保持不变。我们想要标识为里程碑的一些提交可以被标记,即(git tag -a build_3.4 -m“build description)。毕竟验证后,代码可以合并到主(git checkout master,git merge branch_xyz)

  5. 上面提到的所有功能都是最小功能,可以在本地系统本身使用,无需任何服务器。现在在多用户环境中可以选择在我们自己的服务器上存储库,或者我们可以使用github或bitbucket之类的资源库。我使用bitbucket作为我的代码。它不需要只将最终更改推送到主存储库(不要等待)...我们可以继续推动我们的变化..到主存储库(git push -all -u remotename),就像我们在本地做的一样,如果在本地它是分支的一部分,在main中它也将是同一分支的一部分,如果在本地它合并到主,而不仅仅是它将合并到主服务器..

  6. 其他团队成员谁想要工作..他们可以使用git clone或git pull命令从主存储库中获取副本..和后,他们可以按照第2点中提到的相同步骤..

的Git在多用户环境

Q - 哪里是创建主(使用Git)最好的地方是它的专用服务器,但网站还托管或内部单独安装的服务器上?

  • 你不需要调用它的主人,因为git的服务器和git节点,它们都将有主(主代码)和分支机构(WIP代码),将在下面

  • 主要的Git服务器解释不需要成为专用的服务器,也不需要在托管网站的同一台机器上。它可以在任何地方,只要您可以下载并准备用于部署的构建版本。然而,git主服务器/存储库不应该用于开发目的,但不是必需的。

问 - 创建主人后,我需要将主人克隆到我自己的计算机并开始开发。之后,我需要将更改提交给git-server?

  • 让我们假设你的团队1)罗恩3成员 - 开发人员2)Gerard-开发3)Sytse - 测试仪,你目前的版本是build_4_01在主分支坐在主git的服务器上,而今天没有任何的你的团队成员已经在系统中获得了代码。

  • 首先,所有这三个人已经在他们的本地系统上安装了git,并从主服务器克隆它。现在,他们已经在本地的Git仓库主分支下build_4_01

  • 下一个罗恩被要求在接下来的功能工作,这将被命名为build_4_02

  • 罗恩第一次将自己的本地的Git仓库即branch_build_4_02创建一个分支,并在branch_build_4_02下完成代码。

  • build_4_02下共有20个小功能,Ron在10天内完成。

  • 的每个小的功能完成之后,罗恩用于执行对本地信息库

  • 每个提交之后提交,或者在一天结束时,罗恩将推代码(GIT推)到主服务器(无担心,主服务器不会搞乱现有的代码,Ron所推动的是分支branch_build_4_02内,主服务器保持主分支有效分开)

  • 在他的开发时间的这10天里,很多次Ron想要杰拉德帮忙查看代码,或者在技术上帮助他

  • 因此Gerard需要Ron提供的所有最新代码。每天早上,Gerard都会执行git pull(命令),并且它会将他的本地git存储库与Ron所做的所有最新更改同步起来,Gerard可以在branch_4_02中看到它们。完成编码(build_4_02)后,Sytse )获悉,他也很喜欢杰拉德执行他的本地系统拉入请求,并得到了最新的代码

  • Sytse部署从混帐分支4_02代码测试服务器上,并完成测试在测试

  • 他提出了一些缺陷,但是Ron已经修复了这些缺陷,并将代码推送到了git服务器上,Sytse将它们拖到了本地git上etest

  • 经过测试并收到测试签名后,再进行生产部署。代码仍然在分支4_02

  • Ron现在指出他的本地git在10天内(git checkout master)第一次掌握并合并分支到master(git merge branch_4_02),他还给了一个特定的标记以持续提交所谓build_4_02所以每个人都可以通过名称标识

  • 具体承诺会像3003b9fe441dd6a2e3c1410880c3a86b496fcb27但可以用4_01_code_completed,test_completed用户友好的名称即进行标记,4_01_prod

  • 罗恩执行再努一把力(混帐推..)所以同样的变化也会反映在服务器上。

  • Gerard负责Prod的部署,他在他的本地系统上执行git pull,使用Master分支中的最新代码,他为特定的提交(Ron完成)执行prod部署并将其命名为build_4_02。

  • 团队中的每个人都在其本地git存储库上执行了git pull请求,以便与prod同步。

  • Sytse有时需要在生产问题的工作,因此想回去打造401,他只会签的具体承诺,将有构建4_01代码在他的系统

Q - 后我需要在git-server上与主服务器合并?

合并将发生在本地的git签字之后将Sytse接收,但会再次被推到服务器罗恩没有上述合并

Q后 - 我如何从推更改网站混帐服务器?

它与您当前的过程相同,唯一的区别是人推送到网站的变化,将在他的本地PC上,并在 推动更改网站之前,他会确保他得到最新的代码,并有正确的提交(标签build_4_02),同杰拉德上述

Q &做了

Q - 所以只用于接收和发送构建确保git的主服务器会。我可以简单地使用单独的电脑作为git主服务器,只安装了git和centos?

是的,可以使用单独的服务器,虽然不是强制性的,但是不是调用它的作业来接收和发送构建,而是说它将是集中式代码库,其中团队可以获得任何版本的代码。

Q - 当Ron做了git合并branch_4_02时,更改与本地git和git主服务器合并在一起?而对这些合并的感谢git主服务器将始终是最新的?

不,合并只发生在本地系统,从一个分支到另一个分支,或从子分支到主分支,反之亦然。要发送它的主服务器,git push命令应该在本地服务器上执行,它给予开发者更多的控制权,只有当开发人员要求时,才会将提交发送到服务器。进一步使用push命令,开发人员也必须提及远程服务器名称。

Q - 提交的最佳方式是开发人员为其提供标记4_02_prod,并且部署更改的人员拉取代码并为其提供标记4_02_build?

由开发人员(Ron)完成并标记为4_02_prod的理想代码,应该像Prod一样不加修改地完成,在这种情况下,部署者不需要标记。 但是在某些情况下,部署人员(Gerard)在Ron更改之上进行更改时,他必须为其标记好标题,即4_02_deployed。好处是在生产问题期间,一个简单的差异(git diff)将清晰地描述2个提交/标签之间的变化,以缩小问题的范围,进一步提交/标签可以被测试人员拉动以进一步调查。

Q-当一切都完成后,你应该删除分支还是你保留所有内容?

在Ron将分支4_02合并到主设备并给它一个标记4_02_prod后,立即将它推送到Prod,必须删除branch_4_02。因为在标签4_02_prod的主分支中可以使用相同的内容 。在这段时间之后保持分支活力,没有任何优势,但是如果有人错误地使用它,将会有很大的风险,这将会是一团糟。

要删除它,Ron将能够看到2个分支1)一个在本地系统使用命令git branch 2)另一个在主服务器上使用命令 git branch -r。两者都必须被删除,然后是git push,所以主服务器也是同步的。

Q - 你提到我需要删除两个地方的分支。本地和主服务器上的一个。但是,当我在本地删除分支并在主服务器上时,我仍然可以恢复到旧版本?

是的,如果你从本地git和主服务器删除分支,你仍然有所有版本的代码,因为在分支被删除之前,分支本身被合并为主,并被标记为4_02_prod。

这是git的美丽,只需使用一个命令git checkout开发人员只要提交就可以获取任何版本的代码。

在目前的情况下,Ron只需要执行一个命令git checkout tags/build_4_02_prod,他的系统中就会有旧代码。他可以通过只执行一个命令git checkout master

Q具有最新 代码 - 而你说先删除该版本,然后做推(由你做主我猜的),这一切都在部署之前做的网站/直播代码?

分支删除后有,我再次推送,所以服务器同步。为了更安全一侧,我做2推1)合并完成后,主2)分支删除完成后。如果以某种方式将分支删除而不是其他,则在随后的推送过程中将不断发出错误。

+0

感谢您的解释,但我仍然对某些事情感到困惑。我想去多用户环境。哪里是创建主站(使用git)的最佳地点是在托管网站的专用服务器上,还是在内部单独安装的服务器上?创建主人后,我需要将主人克隆到我自己的计算机上并开始开发。之后,我需要将更改提交到git-server?之后,我需要与git-server上的主服务器合并?我该如何将更改从git-server推送到网站上? – FamousWolluf

+0

我编辑了我以前的答案,并用现实生活中的简单场景回答了这些问题。您可以询问是否仍然有任何查询.. :) – Girish

+0

Thanx的解释非常清楚,但我仍然有一些问题,对不起。 因此,要确保git主服务器仅用于接收和发送构建。 我可以简单地使用一个单独的电脑作为git主服务器,只有git和centos上安装? 当Ron做了git合并branch_4_02时,更改与本地git和git主服务器合并在一起? 和thanx这些合并git主服务器将始终是最新的? ..... – FamousWolluf

0

通常master branch是默认分支,总是需要与稳定的所有代码更新。工作流看起来像 -

  • 一个或多个开发人员创建并切换到一个新的分支从主。然后做改变并测试代码。完成任务后(&代码也是稳定的),请创建一个pull requestmerge代码与主分支。

  • 现在,master有了一些新的变化,所有其他开发人员将最新的master代码放入他们正在处理的不同分支中。

  • 当需要发布产品版本时,请提供tag (e.g. v1.0.0)主分支中的提交。然后从该标签创建一个新分支(例如release-v1.0.0)并发布产品。