我使用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