我正在将我们的代码库从svn转换为git。
我们当前的部署过程是运行内部脚本,将最新的svn修订版检出到新创建的目录中,以在服务器上创建工作副本。然后它运行任何需要发生的sql命令,并将符号链接从curent工作副本更改为新签出的工作副本。
这是处理更新的一种简单方法,如果出现问题,我们可以通过更改符号链接轻松地将代码库回滚到旧代码库。
是否可以从git服务器只将一个指定的分支提取到新创建的目录中,还是需要克隆存储库的全部内容?
或者是否有更好的方法来使用git处理代码库?
答案 0 :(得分:2)
git中的每个提交都由“sha1”id标识。此id表示文件的精确快照。因此,您可以只执行特定提交的git checkout
,而不是创建多个工作副本并对其进行符号链接。要回滚,您只需检查上次已知的良好提交ID。由于结账工作速度非常快(与SVN相比),并且不依赖于网络仓库(所以它永远不会失败),我建议你忘记这个符号化的噩梦。
要制作更加人性化的ID,您可以使用标签(基本上是提交ID的人类可读别名)。
答案 1 :(得分:0)
Git是一个分布式存储库。在进行git克隆时,你需要克隆整个存储库,你不能只是克隆一个分支或一个sha id。但是,git被压缩得很好,因为git你不应该对你的策略有任何问题。
我们在工作中这样做并且已经使用这种方法超过5年了 - 它不会减慢我们的速度,我们有一个持续交付系统,允许我们在一天内多次部署到生产,我们的部署大约3分钟 - 取决于数据库迁移。
很抱歉,答案是 - 您必须克隆整个存储库。
答案 2 :(得分:0)
我们有以下方案:
不需要符号链接,因为git中的checkout非常快。您也可以使用
git -xfd clean
确保您的源代码树是闪闪发光的,以防脚本离开。
然后,您的开发团队只需创建一个标记并推送它以获得更新的版本:
git tag 2012-09-01
git push
当然标签可以使用嵌套名称,因此您可以执行以下操作:
git tag test/2012-09-01
git tag release/2012-09-01
...
对您正在做的事情进行分类:测试修正,处理发布等等。