2015-10-05 40 views
0

我们的代码使用Git仓库,以获取应用程序的版本(我们做的东西像{git-tag}-build{git-hash}和我们使用Capistrano的部署我们的应用程序。Capistrano的3去除git的文件夹

但是,使用Capistrano的V3 0.0(詹金斯跑了),我发现,Git仓库,取出

我试图让一些与此类似:。

namespace :environment do 
    desc 'Copies .git folder' 
    task :copy_git do 
     on roles(:app) do 
      within release_path do 
       execute :mkdir, ".git" 
       execute :cp, "-R * .git/" 
      end 
     end 
    end 
end 

但正如你可能知道,这是行不通的

这是我得到的问题:

Could not get version string (no version file and git的描述failed)

任何想法如何解决这个问题或如何在release_path中有.git文件夹?版本控制上的任何其他想法都可以接受。

回答

1

缺少.git文件夹的原因是部署通过git archive | tar -xf(简化)发生。

部署后,release_path包含一个名为REVISION的文件,您可以在其中找到部署代码的git哈希值。您可以使用它来获取确切的修订。

我通常建议您在代码库中粘贴一个变量以跟踪发布版本,例如, 1.0.0。这是RubyGems模板如何实现的。这样,您的代码版本不受限于您的版本控制系统。

希望这会有所帮助!

+0

很棒的回答。不知道REVISION文件的存在。我结束了对我们所做的和你所建议的事情的混合。 一方面,我们实现了静态版本控制(就像RubyGems一样),但我们仍然需要构建,所以我设法使用了REVISION文件中提供的哈希。所以它看起来像{静态,即1.0.4} -build {REVISION}。 – demogar