我使用gitflow分支模型的一些项目。出于这个原因,当有人克隆一个存储库时,我希望默认检出的分支是develop
分支,而不是master
。git默认远程分支与gitolite
对于托管在Github上的公共项目,我可以使用该存储库的管理部分来控制这个,但对于使用gitolite管理的私有存储库,我发现的唯一工作解决方案是ssh进入托管计算机并直接使用git update-ref命令裸仓库。
有什么办法可以远程执行此操作,即不需要ssh进入远程机器?
我使用gitflow分支模型的一些项目。出于这个原因,当有人克隆一个存储库时,我希望默认检出的分支是develop
分支,而不是master
。git默认远程分支与gitolite
对于托管在Github上的公共项目,我可以使用该存储库的管理部分来控制这个,但对于使用gitolite管理的私有存储库,我发现的唯一工作解决方案是ssh进入托管计算机并直接使用git update-ref命令裸仓库。
有什么办法可以远程执行此操作,即不需要ssh进入远程机器?
后实施VonC建议花了几个小时,我悲哀地发现,一个set-head
脚本already exists in gitolite repository :-(
不过,我已经实现我的版本为,所以我在这里张贴。我实现一个额外的功能,可以限制设置头部命令只有存储库的创造者。也许我会分叉gitolite项目,并将该功能添加到原始版本。
顺便说一句,这里是我的版本:
#!/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如果有人有兴趣现在
这种命令的ssh访问的问题是您需要一个交互式shell访问,这被认为是“坏”(因为您可以键入任何你想要的命令)。
官方gitolite解决方案,这仍然涉及SSH虽然是定义一个admin defined command:
这对我来说比较重要的(大概人在“企业”的世界)分开许可推到“
gitolite-admin
”从服务器的无限制外壳访问回购。这个问题过去经常被访问。到现在为止,这是二进制的 - 你可以有完整的shell访问权限,也可以没有。
如果在服务器上有合法的需要完成的任务,通常意味着你必须打破这种分离或加载少数已经有shell访问权的人。但是,现在可以提供脚本来执行所需操作,并将它们放入
$GL_ADC_PATH
。contrib/adc
这些脚本可以访问下列变量:
GL_USER
- 用户名调用命令GL_BINDIR
- 包含所有二进制文件的目录(特别是,gitolite.pm,这是我们真正关心的)GL_REPO_BASE_ABS
- 包含所有仓库的基础目录的绝对路径
你有你需要去正确repo.git并执行git update-index
存在的所有信息。
(在gitolite V3)我不能看到set-head
脚本,并使用一个gitolite触发这样的命令: git symbolic-ref HEAD refs/heads/develop
。您可以随意命名触发器文件,并从POST_GIT部分的.gitolite.rc
开始。
似乎有趣,我会探讨这个选项。 – Fabio 2011-08-17 11:15:32
@Fabio:如果你设法确定能够更改默认分支为“ADC”脚本(“管理员定义的命令”),这将是,如果你能在这里发布作为一个独立的答案很大;) – VonC 2011-08-17 11:32:51