git默认远程分支与gitolite

时间:2011-08-17 10:52:29

标签: git gitolite git-flow

我正在为某些项目使用gitflow分支模型。出于这个原因,当有人克隆存储库时,我希望默认的签出分支是develop分支而不是master

对于在Github上托管的公共项目,我可以使用该存储库的Admin部分来控制它,但对于使用gitolite管理的私有存储库,我找到的唯一可行解决方案是ssh到托管计算机并使用git update-ref命令直接在裸存储库中。

有没有办法远程执行此操作,即无需ssh到远程计算机?

3 个答案:

答案 0 :(得分:4)

花了几个小时来实施VonC建议后,我遗憾地发现set-head脚本already exists in gitolite repository: - (

但是我已经实现了我的版本所以我在这里发布它。我实现了一个额外的功能,它可以将set-head命令仅限制为存储库创建者。也许我会分叉gitolite项目并将该功能添加到原始版本。

BTW这是我的版本:

#!/bin/sh

. $(dirname $0)/adc.common-functions

[ $# -eq 2 ] || die "usage: $0 <repo> <branch>"

if [ $SDB_WRITER_ALLOWED ]; then
  # this will check only for write permission on the given repository
  get_rights_and_owner $1 # this also set $repo variable
  [ -z "$perm_write" ] && die "You don't have write permission on $repo"
else
  # require a repository creator to change default branch
  valid_owned_repo $1
fi

# move to repo dir
cd "$GL_REPO_BASE_ABS/$repo.git"

# check for branch existence
match=`git branch | sed 's/^\( \|*\) //' | grep $2`
# this will check for an exact match in branch name  
[ "$2" = "$match" ] || die "Unable to find branch $2 in repository $repo"

# update the default checked out branch
git symbolic-ref HEAD refs/heads/$match   

echo "Head branch for repository $1 updated to $2"

如果有人感兴趣的话,那就是pull request

答案 1 :(得分:3)

对于这种命令的ssh访问问题是你需要一个交互式shell访问,这被认为是“坏”(因为你可以输入你想要的任何命令)。

官方的gitolite解决方案,仍然涉及ssh,是定义 admin defined command

  

对我(以及可能是“公司”世界中的其他人)来说,将对“gitolite-admin”repo的权限与对服务器的无限制shell访问权限分开是非常重要的。过去经常访问此问题。

     

到目前为止,这是二进制的 - 你要么拥有完整的shell访问权限,要么根本没有访问权限   如果从服务器上的shell中有合法需要完成的任务,通常意味着你必须打破这种分离或加载已经拥有shell访问权限的少数人。

     

但是,现在可以提供脚本来执行您想要的操作,并将它们放在$GL_ADC_PATH中。 contrib/adc

这些脚本可以访问以下变量:

  
      
  • GL_USER - 调用命令的用户的名称
  •   
  • GL_BINDIR - 包含所有二进制文件的目录(特别是gitolite.pm,这是我们真正关心的)
  •   
  • GL_REPO_BASE_ABS - 包含所有repos的基本目录的绝对路径
  •   

您拥有所需的所有信息,可以转到正确的repo.git并在那里执行git update-index

答案 2 :(得分:1)

现在(在gitolite v3中)我看不到set-head脚本并使用gitolite触发器执行此命令:git symbolic-ref HEAD refs/heads/develop。您可以根据需要为触发器文件命名,并从POST_GIT部分的.gitolite.rc开始。