Chef无法从Git中检出开发分支

9

以下是检查我的存储库的代码。我想在我的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 development 命令,会得到以下输出:
deploy
* development
  master

那么,我如何让git从chef中检出我的dev分支呢?

我正在使用来自chef wiki的示例。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

我找不到指定'git'闭包中应该写什么的文档,但是我的直觉告诉我'revision'可能不是你想要的。通常'revision'指向特定的SHA,而不是一个分支。是否有其他可能是它的属性? - Roy Truelove
嗨,我从厨师维基百科中添加了源代码。 - Tampa
我有完全相同的问题... - wallyqs
5个回答

11

您的开发分支被部署。之所以仅命名为deploy,是因为chef将检出到本地分支而不是分离的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

你还可以在Chef客户端日志中看到信息消息,其中包含已部署分支的信息:

[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 的博客上找到。


3

如果您仍然遇到此问题,您可以将enable_checkout设置为false。这将使您的分支保持在主分支上,并且在将checkout_branch设置为主分支时不会出现故障。

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
根据Chef文档中的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

1
我认为这不是一个准确的答案。我尝试了一下,看起来会产生两个分支 - “deploy”和“development”,其中选择了“deploy”分支。 - Nathan Buesgens

0

正如fooforge所说:

基本上,chef会说

git checkout -b deploy remote/branch

如果你执行git log,你将看到提交记录。


0
如果您需要推回到原始开发分支(比如您正在使用Chef部署来提供应用程序,但是您正在现场进行更改并希望提交更改),您可以执行以下操作:
git push origin deploy:development

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接