2011-08-17 119 views
2

我使用gitflow分支模型的一些項目。出於這個原因,當有人克隆一個存儲庫時,我希望默認檢出的分支是develop分支,而不是mastergit默認遠程分支與gitolite

對於託管在Github上的公共項目,我可以使用該存儲庫的管理部分來控制這個,但對於使用gitolite管理的私有存儲庫,我發現的唯一工作解決方案是ssh進入托管計算機並直接使用git update-ref命令裸倉庫。

有什麼辦法可以遠程執行此操作,即不需要ssh進入遠程機器?

回答

4

後實施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如果有人有興趣現在

3

這種命令的ssh訪問的問題是您需要一個交互式shell訪問,這被認爲是「壞」(因爲您可以鍵入任何你想要的命令)。

官方gitolite解決方案,這仍然涉及SSH雖然是定義一個admin defined command

這對我來說比較重要的(大概人在「企業」的世界)分開許可推到「gitolite-admin」從服務器的無限制外殼訪問回購。這個問題過去經常被訪問。

到現在爲止,這是二進制的 - 你可以有完整的shell訪問權限,也可以沒有。
如果在服務器上有合法的需要完成的任務,通常意味着你必須打破這種分離或加載少數已經有shell訪問權的人。

但是,現在可以提供腳本來執行所需操作,並將它們放入$GL_ADC_PATHcontrib/adc

這些腳本可以訪問下列變量:

  • GL_USER - 用戶名調用命令
  • GL_BINDIR - 包含所有二進制文件的目錄(特別是,gitolite.pm,這是我們真正關心的)
  • GL_REPO_BASE_ABS - 包含所有倉庫的基礎目錄的絕對路徑

你有你需要去正確repo.git並執行git update-index存在的所有信息。

+0

似乎有趣,我會探討這個選項。 – Fabio 2011-08-17 11:15:32

+0

@Fabio:如果你設法確定能夠更改默認分支爲「ADC」腳本(「管理員定義的命令」),這將是,如果你能在這裏發佈作爲一個獨立的答案很大;) – VonC 2011-08-17 11:32:51

1

(在gitolite V3)我不能看到set-head腳本,並使用一個gitolite觸發這樣的命令: git symbolic-ref HEAD refs/heads/develop。您可以隨意命名觸發器文件,並從POST_GIT部分的.gitolite.rc開始。