18

私はGerrit Code Reviewで Git をセットアップしており、Git を初めて使用するユーザーにとって必要な Git コマンドを比較的簡単にする方法を探しています。

新しい機能ブランチを開始するために現在持っているコマンドは基本的に次のとおりです (Gerrit が であると仮定origin):

git checkout baseline
git pull
git checkout -b work1234
git push -u origin work1234

work1234これにより、いくつかの から分岐した新しい作業パッケージが開始されbaseline、最後のプッシュで Gerrit に分岐が作成され、上流が設定されます。したがって、.git/config次のようになります。

[branch "work1234"]
        remote = origin
        merge = refs/heads/work1234

現在、Gerrit は、たとえば、レビュー用の新しいコミットを特別な refspec にプッシュすることを望んでrefs/for/work1234います。私はこれを手動で行うことができます:

git push origin work1234:refs/for/work1234

私がやりたいことは、プレーンが現在のブランチを Gerrit が必要とするリモートの refspec にプッシュするように設定する方法を見つけること.git/configですgit push。私は次のgit config分野を見てきました:

  • branch.<name>.*-プッシュ参照仕様を設定するための特定のオプションがないようです
  • push.default- 私はupstreamここが欲しい
  • remote.<name>.pushrefs/heads/*:refs/for/*-私はここで試しましたが、この場合は常にすべてのローカルブランチgit pushをプッシュしたいのですが、現在のブランチだけが必要です

Git だけでこれを行うことができない場合は、refspec を完全に指定する小さなラッパー スクリプトを作成します。ただし、Git がネイティブに適切な場所にプッシュできるとよいでしょう。

4

4 に答える 4

8

git-submit私は新しいスクリプトを書くことになりました:

#!/bin/sh -e

if [ -z "$1" ]; then
    REMOTE=origin
else
    REMOTE=$1
fi

BRANCH=`git symbolic-ref HEAD`
case $BRANCH in
    refs/heads/*)
        BRANCH=`basename $BRANCH`
        ;;
    *)
        echo "I can't figure out which branch you are on."
        exit 1
        ;;
esac

git push $REMOTE HEAD:refs/for/$BRANCH

このスクリプトを/usr/local/libexec/git-core/git-submit挿入すると、レビューのために新しいコードを Gerrit に送信するためのコマンドが 1 つあります。

$ git submit

Gerrit がoriginリモートでない場合はgit submit <remote>、適宜使用してください。

于 2011-08-21T23:05:47.520 に答える
4

私が見つけた2つのオプション:

1)私が作成したプロジェクトをチェックしてください、ggh:https ://github.com/hobbs/ggh

2)リモートでデフォルトのプッシュrefspecを構成できます。ハードコードされたリモートブランチを使用してこれを行う方法を理解しただけで、追跡しているリモートに常にプッシュするようにリモートrefspecをワイルドカード化する方法を理解しようとしています。

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = ssh://gerrit/repo
    push =  HEAD:refs/for/master
于 2012-02-16T17:48:45.780 に答える
2

これはGreg Hewgillの回答の改善です。

プロファイル bin フォルダーなど、パス上のどこかにスクリプトを作成します (必要に応じて、Windows でも作成します)。

$ mkdir ~/bin
$ vi ~/bin/git-submit

次の内容で:

#!/bin/sh -e

if [ -z "$1" ]; then
    REMOTE=origin
else
    REMOTE=$1
fi

BRANCH=`git symbolic-ref HEAD`
case $BRANCH in
    refs/heads/*)
        BRANCH=`basename $BRANCH`
        ;;
    *)
        echo "I can't figure out which branch you are on."
        exit 1
        ;;
esac

REMOTE_BRANCH=`git config --get "branch.$BRANCH.merge"`
if [ -z $REMOTE_BRANCH ]
then
    echo "There is no tracking information for the current branch."
    echo "If you wish to set tracking information for this branch you can do so with:"
    echo ""
    echo "    git branch --set-upstream $BRANCH <remote>/<branch>"
    echo ""
    exit 1
fi

git push $REMOTE HEAD:refs/for/$REMOTE_BRANCH

次のようなリモート追跡ブランチを作成するとします。

$ git checkout -b MyBranch origin/master

あなたは単に呼び出すことができます:

$ git submit

refs/for/master...この場合はプッシュします。

于 2012-08-08T16:10:17.490 に答える
0
git config push.default upstream
git config branch.work1234.merge refs/for/work1234
git config branch.work1234.remote origin

または .git/config:

[push]
        default = upstream
[branch "work1234"]
        merge = refs/for/work1234
        remote = origin

ワイルドカードをどこかに配置して、すべてのブランチで機能させる方法があるかどうかはわかりません。

于 2011-08-22T02:52:19.493 に答える