厨师不会从git结账开发分支

时间:2012-04-03 14:52:55

标签: git chef

以下是我检查我的回购的代码。我想在我的厨师开发环境中开发分支。

git "/home/ubuntu/workspace/repo" do                            
    repository "git@github.com:me/repo.git"
    revision "development"                                 
    action :sync                                     
    user "root"                                                                  
end

当我看到结账分支时,我得到了:

* deploy
  master

如果我在盒子上运行git checkout开发,我得到:

deploy
* development
  master

那么....我如何从厨师那里得到我的开发分支?

我正在使用厨师维基的例子。 chef wiki git example

if node.chef_environment == "QA"
    branch_name = "staging"
else
    branch_name = "master"
end

git "/home/user/deployment" do                            
    repository "git@github.com:gitsite/deployment.git"
    revision branch_name                                  
    action :sync                                     
    user "user"                                    
    group "test"                                      
end

5 个答案:

答案 0 :(得分:11)

您的开发分支已部署。它只被命名为deploy,因为大厨会检查到本地分支而不是分离的HEAD。

git提供程序

以下是实际代码的摘录:

#File: chef-0.10.8/lib/chef/provider/git.rb
def checkout                                                              
  sha_ref = target_revision                                               
  # checkout into a local branch rather than a detached HEAD              
  shell_out!("git checkout -b deploy #{sha_ref}", run_options(:cwd => @new_resource.destination))
  Chef::Log.info "#{@new_resource} checked out branch: #{@new_resource.revision} reference: #{sha_ref}"
end

您还可以在厨师客户的日志中看到一条信息消息,从中可以看到已部署的分支:

[Sun, 01 Jul 2012 18:07:40 +0200] INFO: git[/usr/local/rbenv] checked out branch: master reference: 6778c8e905d774d4dc70724c455e6fcff4c1d3e1

文档

此外,您问题中文档的链接清楚地表明:

  

请记住,如果在运行此配方后使用命令“git status”,它将返回分支名称为“deploy”,因为这是默认值。当您运行chef-client并进行调试时,您应该能够看到它检出正确的分支:

     

sudo chef-client -l debug

可以找到关于分离的HEAD状态的更多信息,例如在AlBlue的blog

答案 1 :(得分:3)

根据厨师文档中的git资源页面: http://docs.opscode.com/resource_git.html

使用以下属性:

checkout_branch

Use to specify the name of a branch to be checked out. Default value: deploy.

所以你想要这样做:

git "/home/ubuntu/workspace/repo" do                            
    repository "git@github.com:me/repo.git"
    revision "development"                                 
    checkout_branch 'development'
    action :sync                                     
    user "root"                                                                  
end

答案 2 :(得分:3)

对于仍然遇到此问题的人,您可以将enable_checkout用于false。当你将checkout_branch设置为master时,这将使你的分支机构成为主分支并且不会中断。

git "/home/user/deployment" do
   repository "git@github.com:gitsite/deployment.git"
   revision branch_name
   checkout_branch branch_name
   enable_checkout false
   action :sync
   user "user"
   group "test"
end

答案 3 :(得分:0)

正如fooforge所说:

厨师基本上会说

git checkout -b deploy remote/branch

如果您执行git log,您将看到提交。

答案 4 :(得分:0)

如果您需要回到原始开发分支,(比如说您正在使用chef deploy来配置您的应用,但您正在进行现场更改并希望提交更改),您可以执行以下操作

git push origin deploy:development