我有两台服务器,生产和开发.在生产服务器上,有两个应用程序和多个(6)数据库(MySQL),我需要将它们分发给开发人员进行测试.所有源代码都存储在开发服务器上的GitLab中,开发人员只能使用此服务器,并且无权访问生产服务器.当我们发布一个应用程序时,master会登录到生产环境并从Git中提取新版本.数据库很大(每个超过500M并且数不胜数),我需要尽可能简单地将它们分发给开发人员进行测试.
在将数据库(每个数据库)转储到单个文件的备份脚本之后,执行将每个数据库推送到其自己的分支的脚本.如果开发人员想要更新他的本地副本,则会拉出其中一个分支.
发现这个不起作用.
生产服务器上的Cron每天都会保存二进制日志,并将它们推送到该数据库的分支中.因此,在分支中,有每日更改的文件,开发人员会提取他没有的文件.当前的SQL转储将以另一种方式发送给开发人员.当存储库的大小变得太大时,我们将向开发人员发送完全转储并刷新存储库中的所有数据并从头开始.
精简版
需要每天早上向70多人分发每晚构建,想要使用git来平衡传输,并且在我开始设计系统之前想知道是否存在提示,陷阱或缺陷.
长版
每天早上我们都需要将我们的夜间版本分发给70多人(艺术家,测试人员,程序员,制作人员等)的工作室.到目前为止,我们已将构建复制到服务器并编写了一个同步程序来获取它(使用下面的Robocopy); 即使设置了镜像,传输速度也会慢得多,因为在高峰时间需要一个小时或更长时间才能同步(非高峰时间约为15分钟),这表明它是硬件I/O瓶颈.
我有一个很棒的(虽然绝对不是原创)想法是在整个工作室分配负载.在调查使用臭名昭着的bit-torrent协议编写客户端之后,我想到了另一个想法,我可以使用git作为设计,它可以让我们分发构建和修订管理,同时减少服务器的额外好处.
问题
你如何开始使用git?我有像Perforce和SVN这样的集中式源控制系统的经验.阅读文档,似乎您需要做的就是运行git init path\\to\folder,然后在另一台机器上运行git clone url?
我在哪里获得url上述git clone命令?我可以定义吗?我发现有一个网址奇怪的概念,因为git没有中央服务器 - 或者是这样吗?例如类似于一个比特洪流的跟踪器?
识别构建,使用变更列表编号或标签的更好选择是什么?
是否可以限制存储的修订数量?这将是有用的,因为除了夜间构建之外,我们还有一些我们想要分发的CI构建,但是无限数量修订无处不在.在Perforce中,您可以通过设置属性来限制修订.
我现在在存储图像方面遇到了困境:
我只想在请求非常少的情况下检查它们。有了这个,我不喜欢我的 git 存储库被图像弄得乱七八糟,因为我有几兆字节大小的图像。
目前,我正在做的是将除二进制文件、目标文件和图像之外的几乎所有内容都包含到我的 git 存储库中。
然后每周,我都会对所有内容进行完整的 zip 备份。
我想问的是,是否有办法将文件放入 git 而不进行版本控制?
我知道它违背了 git 的目的,但是可以通过这种方式控制 git repo 的大小。
为了显示:
pic1.jpg。我想把它放到 git 中。pic1.jpg为另一个图像但具有相同的文件名,它只会覆盖pic1.jpg而不进行版本备份。这听起来可能很危险,但是从我从 git 中学到的是,如果您将文件提交到其中,它将永远留在那里。
我想到了另一个解决方案:项目将被完全压缩并放置在一个保管箱中,项目的新开发人员将从保管箱中获取它,提取,执行 git fetch,然后合并。
我希望有人可以分享他们在这方面的经验/专业知识。
我有一个网站文件/文件夹结构模板,可以开始使用git.它.gitignore在images文件夹中包含一个空文件,这引出了我的两部分问题:
1.)这个空.gitignore文件是否会忽略文件夹内的所有图像images,还是放在那里以允许在将任何图像放入内部之前将空文件夹添加到存储库中?
2.)网站图像是否应包含在git存储库中?对我来说,图像文件的编辑和更改与其他文件一样,并且随着时间的推移跟踪所述更改将是有益的.
什么是最佳做法?你做了什么,为什么?