git удаленная ветка по умолчанию с gitolite - PullRequest
2 голосов
/ 17 августа 2011

Я использую gitflow модель ветвления для некоторых проектов.По этой причине, когда кто-то клонирует репозиторий, я бы хотел, чтобы ветвью по умолчанию была выбрана ветка develop, а не master.

. Для общедоступных проектов, размещенных на Github, я могу управлять этим с помощью Admin.раздел для этого репозитория, но для частного репозитория, управляемого с помощью gitolite, единственное найденное мною рабочее решение - это подключиться к хосту по ssh и использовать команду git update-ref непосредственно в голом репозитории.

Есть ли способ сделать это удаленно, т.е. без необходимости SSH на удаленной машине?

Ответы [ 3 ]

4 голосов
/ 24 августа 2011

После нескольких часов, потраченных на реализацию предложения VonC, я, к сожалению, обнаружил, что set-head скрипт уже существует в репозитории gitolite : - (

Однако я уже реализовал свойверсия для этого, поэтому я публикую ее здесь. Я реализовал дополнительную функцию, которая может ограничить команду set-head только для создателей репозитория. Возможно, я раскошелюсь с проектом 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"

Вот это запрос на получение , если кто-то заинтересован

3 голосов
/ 17 августа 2011

Проблема с ssh-доступом для такого рода команд заключается в том, что вам нужен интерактивный доступ к оболочке, который считается «плохим» (потому что вы можете затем ввести любую команду).

ОфициальныйРешение gitolite, которое все еще включает ssh, состоит в том, чтобы определить определенную администратором команду :

Это довольно важно для меня (и, вероятно, других в "Корпоративный «мир» отделить разрешение выдвинуть репо «gitolite-admin» от неограниченного доступа оболочки к серверу.Эта проблема часто посещалась в прошлом.

До сих пор, однако, это был двоичный файл - у вас либо был полный доступ к оболочке, либо его вообще не было.
Если были задачи, которые на законных основаниях необходимо было выполнитьиз оболочки на сервере это часто означало, что вам пришлось прервать это разделение или загрузить несколько человек, у которых уже был доступ к оболочке.

Теперь, однако, можно предоставить сценарии для выполнения того, что вы хотите,и положить их в $GL_ADC_PATH.contrib/adc

Эти сценарии имеют доступ к следующим переменным:

  • GL_USER - имя пользователя, вызвавшего команду
  • GL_BINDIR - каталог, содержащий все двоичные файлы (в частности, gitolite.pm, это все, что нам действительно нужно здесь)
  • GL_REPO_BASE_ABS - абсолютный путь к базовому каталогу, содержащему всеthe repos

У вас есть вся необходимая информация, чтобы перейти к правильному repo.git и выполнить там git update-index.

1 голос
/ 13 мая 2012

Теперь (в gitolite v3) я не вижу сценарий set-head и использую триггер gitolite, выполняя эту команду: git symbolic-ref HEAD refs/heads/develop.Вы можете назвать файл триггера как угодно и начать его с .gitolite.rc в разделе POST_GIT.

...