4

権限管理にgitoliteを使用しながら、Gitで「Integration-Manager」ワークフローを使用していますGitoliteには、個人ユーザーのブランチを簡単に管理するためのこの優れたオプションがあります。

refs/personal/USERNAME/USERBRANCHNAME

私たちの場合、これらは開発者が書き込みアクセス権を持っている唯一のブランチです。これは、次のように、「元の」リモートの「マスター」ブランチである「blessed」リポジトリから定期的にプルしていることを意味します。

$ git pull origin master

ただし、次のように、定期的に作業を個人のブランチに戻す必要があります。

$ git push origin master:refs/personal/mysuername/mybranchname

これらの長いブランチ名の入力は古くなり、非常に高速になります。特に、さまざまな長いブランチ名から定期的にプルする必要があるインテグレーターにとってはそうです。ほとんどの人は、次のようなもっと簡単なものを入力したいと思っています。

$ git push origin master:mybranchname

だから、私の質問は、「名前を短くしてタイプミスを減らして、これを簡単にするにはどうすればよいですか?」です。ユーザーのリモートブランチのエイリアスまたはショートカットを作成する方法はありますか?私たちのインテグレーターは、各開発者のエイリアスを作成して、コマンドも簡素化できるようにしたいと考えています。

また、どちらの場合もリモート名とブランチ名を指定しなくても、常に1つのブランチからプルして別のブランチにプッシュするようにgitを構成することは可能ですか?これは開発者には役立ちますが、インテグレーターには役立ちません。...同じリモートとブランチからプッシュとプルを行う単一のデフォルトの構成に精通していますが、プッシュブランチとプルブランチが異なるため、この場合は機能しません。

ありがとう!

4

3 に答える 3

4

はい。別の名前のブランチを追跡するだけです。git ブランチや --set-upstream などのマニュアル ページを参照してください。

お役に立てれば。

于 2011-09-08T23:39:07.813 に答える
1

注: 以下では、どのように機能するかがわからないため、gitolite を無視しています。

マスター ブランチを追跡する代わりに、各開発者は自分の個人的なブランチを追跡できます。更新が必要な場合は、マスターからマージできます。(現在の設定は逆のようです。全員がマスターを追跡し、手動でプッシュしています。)

また、タブ補完についても忘れないでください。私が bash を使用している Ubuntu では、入力git push origin o<TAB>が完了するorigin/と、別Tabのブランチに使用可能なブランチのリストが表示されます。


個人のブランチを作成する

インテグレータがレポを にチェックアウトしている場合~/prj:

integrator:~/prj$ git push origin master:trevor-personal
integrator:~/prj$ git push origin master:pydave-personal

開発者のリポジトリをセットアップする

各開発者は、個人のブランチを使用して複製できます。

trevor:~$ git clone /path/to/master/repo.git -b trevor-personal prj
pydave:~$ git clone /path/to/master/repo.git -b pydave-personal prj

または、オリジンで個人のブランチを追跡する既存のクローンの新しいブランチをチェックアウトすることもできます。

pydave:~/prj$ git checkout -b personal origin/pydave-personal 

または、既存のブランチを使用する場合は、set-upstream を使用できます。

pydave:~/prj$ git branch --set-upstream personal origin/pydave-personal  

ワークフロー

開発者ブランチに変更を投稿します。

trevor:~/prj$ git commit -am'changed something'
trevor:~/prj$ git push

マージします。

integrator:~/prj$ git pull
integrator:~/prj$ git push origin origin/trevor-personal:master

master ブランチから変更を取得します。(オリジンのマスターを使用することについて具体的に説明する必要があります。git pull変更をマージするだけですpydave-personal

pydave:~/prj$ git pull origin master
于 2011-09-09T01:51:13.773 に答える
1

ご意見やご提案をいただき、ありがとうございます。開発者とインテグレーターに裸git pushとを使用させる方法は次のgit pullとおりです。

開発者向け

上記の最も単純なインテグレーション マネージャー ワークフローでは、開発者は ( ) を複製git cloneしたため、ローカル マスター ブランチのリモート マスター ブランチを自動的に追跡しているため、必要なものは次のとおりです。

git pull

彼女のローカル マスター ブランチを更新するには。彼女が他のブランチで作業している場合は、Adam が提案したように、追跡している上流のブランチを更新できます。

git branch --set-upstream MYOLDBRANCH origin/master
# or, use longer, more explicit syntax, like:
git branch --set-upstream MYOLDBRANCH refs/remotes/origin/master

追跡されたブランチ (この場合はオリジン/マスター) がデフォルトでプルされます。

デフォルトのプッシュ ターゲットは別のブランチであり、同じ名前ではないため、push.default が tracking、current、または matching であることを利用することはできません。代わりに、開発者は次のように、.git/config ファイル内の特定のリモートへのすべてのプッシュに対して、デフォルトの source:destination refspec を設定する必要があります。

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = GITREPOHOSTNAME:REPONAME
        push = master:refs/personal/MYDEVNAME/MYBRANCHNAME

次のようにエイリアスを作成することもできます。

git config alias.pushToMyBr 'push origin master:refs/personal/MYDEVNAME/MYBRANCHNAME

エイリアスは非常に強力で、キーストロークを回避する究極の柔軟性を提供します。:-) 上記のケースは、次の簡単な方法で実行できます。

git pushToMyBr

インテグレーター向け

この単純なケースでは、インテグレーターは通常、origin/master という 1 つの場所にプッシュします。push.default が matching、tracking、または current に設定されている場合、次のようにベア プッシュが機能します。

git config push.default current
git checkout master
git push

さまざまな個人開発者ブランチからの頻繁なプルは、より困難なケースです。インテグレーターは、次のようにエイリアスを使用してタスクを簡素化できます。

git config alias.pullFromXY 'pull origin refs/personal/DEVNAMEX/BRANCHNAMEY:master
# or, pull to a specific topic branch
git config alias.pullFromABtoC 'pull origin refs/personal/DEVNAMEA/BRANCHNAMEB:branchC'

インテグレーターは、ブランチを作成して、次のように開発者の個人的なリモート ブランチを追跡することもできます。

git checkout -b test_devXbranchY origin/personal/DEVNAMEX/BRANCHNAMEY
# or, use a more specific syntax:
git checkout -b test_devXbranchY refs/remotes/origin/personal/DEVNAMEX/BRANCHNAMEY

これが機能するためには、インテグレーターは自分のフェッチ リストに個人的なブランチを追加する必要があります。これは、彼女の .git/config を次のように直接編集することで実現できます (git-config やその他の git コマンドでこれを行う方法がわかりません。)

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = MYGITHOSTNAME:MYREPONAME
        fetch = +refs/personal/*:refs/remotes/origin/personal/*
        # Fetch a specific developer's branches:
        fetch = +refs/personal/devX/*:refs/remotes/origin/personal/devX/*

助けてくれてありがとう!これが、ヘッドスペースの外で gitolite と個人のブランチを使用している他の誰かに役立つことを願っています。

ありがとう!

トレバー

于 2011-09-17T22:04:39.147 に答える