1

我正在将我们的代码库从 svn 转换为 git。

我们当前的部署过程是运行一个内部脚本,将最新的 svn 修订检出到新创建的目录中,以在服务器上创建一个工作副本。然后它运行任何需要执行的 sql 命令,并将符号链接从当前工作副本更改为新签出的工作副本。

这是一种处理更新的简单方法,如果出现问题,我们可以通过更改符号链接轻松地将代码库回滚到旧代码库。

是否可以从 git 服务器中仅获取一个指定的分支到新创建的目录中,或者我是否需要克隆存储库的全部内容?

或者有没有更好的方法来使用 git 处理代码库?

4

3 回答 3

2

git 中的每个提交都由“sha1”id 标识。此 id 代表文件的确切快照。因此,您不必创建多个工作副本并对其进行符号链接,而只需执行git checkout特定的提交即可。要回滚,您只需检查最后一个已知的良好提交 ID。由于结帐工作非常快(与 SVN 相比)并且不依赖网络存储库(因此它永远不会失败),我建议您忘记符号链接的噩梦。

要制作更人性化的 ID,您可以使用标签(本质上是提交 id 的人类可读别名)。

于 2012-09-07T14:26:22.313 回答
0

我们有以下方案:

  1. 我们使用 gitolite 对我们的网络存储库进行访问控制,并让我们的构建服务器使用一个特殊的 SSH 密钥,该密钥只​​有对存储库的读取访问权限。
  2. 我们在构建机器上有一个完整的克隆,并定期从我们的构建脚本中获取。
  3. 我们使用标签名称来标记要构建的东西。我们使用 2012-09-01[az] 作为这些名称的模式,因为它们的排序很好。例如,2012-09-01 之后是 2012-09-01a,如果您每天需要多个构建...也可以使用完整的时间戳。
  4. 当自动 shell 脚本看到要更改的标签(最后一个标签是最新的)时,会执行签出/重建。

不需要符号链接,因为 git 中的结帐速度非常快。你也可以使用

git -xfd clean

以确保您的源代码树干净整洁,以防您的脚本乱七八糟。

然后,您的开发团队只需要制作一个标签并推送它即可获得更新的构建:

git tag 2012-09-01
git push

当然标签可以使用嵌套名称,因此您可以执行以下操作:

git tag test/2012-09-01
git tag release/2012-09-01
...

对您正在做的事情进行分类:测试修复、发布版本等。

于 2012-09-08T17:41:23.777 回答
0

Git 是一个分布式存储库。执行 git clone 时需要克隆整个存储库,不能只克隆分支或 sha id。但是,git 压缩得很好,你不应该因为 git 而对你的策略有问题。

我们在我的工作中这样做并且已经使用这种方法超过 5 年了 - 它并没有减慢我们的速度,我们有一个持续交付系统,允许我们在一天内多次部署到生产中,我们的部署大约是 3分钟长 - 取决于数据库迁移。

抱歉,答案是 - 您必须克隆整个存储库。

于 2012-09-08T17:33:58.787 回答