2

一部のプロジェクトでgitflow分岐モデルを使用しています。developこのため、誰かがリポジトリのクローンを作成するとき、デフォルトのチェックアウト ブランチはではなくブランチにしたいと思いますmaster

Github でホストされている公開プロジェクトの場合、そのリポジトリの管理セクションを使用してこれを制御できますが、gitolite で管理されているプラ​​イベート リポジトリの場合、私が見つけた唯一の有効な解決策は、ホスティング マシンに ssh し、直接git update-refコマンドを使用することです。リポジトリ。

これをリモートで行う方法はありますか?つまり、リモート マシンに ssh する必要はありませんか?

4

3 に答える 3

4

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"

誰かが興味を持っている場合は、プルリクエストです

于 2011-08-24T16:07:57.387 に答える
3

その種のコマンドに対する ssh アクセスの問題は、インタラクティブなシェル アクセスが必要なことであり、これは「悪い」と見なされます (必要なコマンドを入力できるため)。

ただし、まだ ssh を含む gitolite の公式ソリューションは、管理者が定義したコマンドを定義することです。

gitolite-adminサーバーへの無制限のシェル アクセスから" " リポジトリへのプッシュ許可を分離することは、私 (およびおそらく "企業" の世界の他の人) にとってかなり重要です。この問題は、過去に頻繁に訪問されています。

ただし、これまでは、シェルへの完全なアクセス権があるか、まったくアクセスできないかのどちらかでした。
サーバー上のシェルから正当に実行する必要があるタスクがある場合、その分離を解除するか、シェル アクセスを既に持っている少数のユーザーをロードする必要があることがよくありました。

ただし、今では、必要なことを実行するスクリプトを提供して、それらを に配置することができます$GL_ADC_PATHcontrib/adc

これらのスクリプトは、次の変数にアクセスできます。

  • GL_USER-- コマンドを呼び出すユーザーの名前
  • GL_BINDIR-- すべてのバイナリを含むディレクトリ (特に、ここで重要なのは gitolite.pm)
  • GL_REPO_BASE_ABS-- すべてのリポジトリを含むベース ディレクトリの絶対パス

適切な repo.git に移動してそこで実行するために必要なすべての情報が揃っていますgit update-index

于 2011-08-17T11:06:39.960 に答える
1

現在 (gitolite v3 では)set-headスクリプトが表示されず、次のコマンドを実行する gitolite トリガーを使用できませんgit symbolic-ref HEAD refs/heads/develop。トリガー ファイルに好きな名前を付けて.gitolite.rc、POST_GIT セクションから開始できます。

于 2012-05-12T20:27:22.637 に答える