Git 工作流程/部署

6
我是新手,想将我的网站从SVN迁移到GIT以进行版本控制和部署。我有许多开发人员在他们的本地机器上工作,我有3个服务器,“开发”,“暂存”和“生产”。
我已经阅读了关于Git如何工作的书籍和视频,因此我认为我对添加、提交等方面已经非常熟悉了,但我需要关于工作流程和部署的建议。
首先,我需要知道在哪里初始化GIT仓库。它是否需要在“生产”服务器上,并且然后在“暂存”和“开发”上克隆它,每个开发人员也会将其克隆到他们的本地机器上?
其次,每个服务器是否应该有自己的分支?即“开发”将拥有一个“开发”分支,“暂存”将拥有一个“暂存”分支,“生产”将拥有一个“生产”分支?
谢谢
4个回答

8

我最近也把我的团队从SVN迁移到了Git,我们有着相同的3个服务器的设置,分别是prod、stg和dev。

关于迁移过程,首先安装sudo apt-get install git-svn,然后进行以下步骤..

$ git svn clone [subversion_repository_url] /path/to/git/repository
$ cd /path/to/git/repository
$ git remote add origin [gir_repo_url]
$ git push origin master

关于工作流程:

这个链接 标题为 "A successful Git branching model" 是非常有用的。它介绍了如何为团队使用 "生产-暂存-开发" 类型的工作流程。

关于部署:

在每个服务器上,我们做的是, 每个服务器上都有 git 存储库在文件系统中。 要部署,我将需要部署的相应分支打包并解压缩到 /srv/www/ 文件夹中。

例如,在 生产环境 上,要部署 主分支

sudo git archive --format zip --output output.zip master -0

“master” 表示你想压缩的分支,这将不包括 .git 文件夹。然后在 /srv/www/ 文件夹内解压,sudo unzip output.zip -d /srv/www/app/ 这相当于一个 svn export 命令。

对于 Staging 服务器,我们通常检出其中一个 Release branches 或者 Dev branches

对于 Dev 服务器,我们检出需要进行测试的任何一个 feature-branch


@Nic 我上面建议的工作流程是互联网上最受欢迎的Git工作流程,我相信有成千上万的开发团队可以证明它的有效性和简单性。 - keithxm23
感谢 keithxm23。那么你的开发人员是在本地计算机上工作,然后有外部开发、暂存和生产服务器吗? - Derek Carlisle
是的。我们有一个托管在Unfuddle上的Git仓库,托管着我们所有的分支(主分支、开发分支和特性分支)。我们所有的开发人员都会克隆这个仓库,并定期进行推送和拉取以保持更新。 当准备部署时,我们通过SSH连接到我们的服务器,然后拉取/克隆(只有第一次需要)仓库,然后执行我上面提到的压缩和解压步骤。 - keithxm23
@keithxm23再次感谢。您能否请解释一下为什么您的Git-repo托管在Unfuddle上而不是您的生产服务器上?我需要另一个服务器来托管我的Git-repo吗? - Derek Carlisle
好的,但这不是必要的,对吧?我计划通过FTP上传我的网站文件,并在生产服务器上创建我的仓库,然后将其克隆到暂存、开发以及我的和其他开发人员的本地机器上。我想知道,我是否需要将Web文件导入每个克隆的存储库并将它们添加到Git中?然后我就可以开始制作分支了?(对于所有问题,非常抱歉,非常感谢您的帮助) - Derek Carlisle
显示剩余10条评论

2
您有三个问题:如何部署,如何结构化分支,以及如何结构化/托管存储库。
如何结构化分支?
您可以从简单的开始。您已经有了一个SVN存储库,因此如果您有一个主干和分支,您可以在git中以相同的方式设置它们。如果这对您不起作用,请仅在需要时更改它。
如果您想要更高级的内容,请查看git flow。另一个好的工作流是github使用的工作流程。它旨在比git flow更简单。
如何托管存储库?
一种简单的方法是像使用SVN一样。在中央服务器上有一个中央仓库,每个人都可以向该中央服务器推送和拉取。另一种选择是将某些领导开发者赋予“官方”仓库权限,由这位领导者从其他贡献者那里拉取变更,只有经过领导者批准的变更才能被合并到正式代码库中。你可以采用多种方式来实现这一点,只需要决定哪种方式最适合你。
如何部署?
同样,这也不需要改变你的SVN工作流程。你可能会从每个盒子中进行“svn update”。我只需对每个盒子执行“git pull”,并保持其他事情基本相同。

我想完全放弃SVN。该网站将被迁移到一个全新的服务器,其结构与当前网站完全不同。为了初始化Git,我可以在本地机器上执行此操作,然后在3个服务器上克隆它,还是必须在服务器上初始化,以便我可以通过SSH进行克隆? - Derek Carlisle
1
@DerekCarlisle 可以使用类似 gitolite 的工具来管理权限,并将其作为您的“中央”主机来托管代码库。让您的服务器与之通信,并确保所有推送和拉取都通过该工具进行。可以查看我上周的演示文稿:http://nicbertino.com/?p=141 - Nic
我认为最简单的方法是SSH到您的中央仓库服务器,然后在那里初始化存储库,然后将其克隆到其他所有位置。但在原始克隆之后,您可以使用推送/拉取完成其他所有操作。因此,克隆到本地,导入代码,提交,然后将其推回中央。 - Dan
我同意Nic的观点。像gitolite这样的工具对于管理多个用户非常有帮助。当然,您也可以考虑使用像bitbucket.org或github这样的服务(大多数都提供私人托管)。 - Dan
@Nic 这是一份精彩的演示文稿! 构建得非常好! :) 是否有演示文稿音频/视频的链接? - keithxm23
显示剩余2条评论

1

很大程度上取决于什么对你来说是正确的。

另一个答案中链接的分支模型是一个非常好的起点。

通常,您会有一个代表发布代码的master分支。

暂存取决于您想要暂存什么 - 我们的团队有一个名为staging的单独分支,用于持续集成服务器的暂存构建。不同的功能可以合并到此分支中以在暂存环境中进行测试。

部署将取决于您是否使用CI或直接从存储库中的分支进行部署。


我只是希望每个开发人员都能够在本地工作,为每个“功能”创建一个分支,他们可以将其推送到托管在外部的“开发”服务器,然后可以检查并将其推送到“暂存”进行测试,如果一切正常,则可以将其推送到“生产”,这将成为现场网站。 - Derek Carlisle

0

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