8

私たちの目標は、gitとgerritを使用して外部リポジトリ(github)でホストされているプロジェクトに基づいて内部開発を行うことです。外部リポジトリから定期的にプルして新しい変更とブランチを取り込み、gerritを使用してレビュープロセスを管理します(そしてJenkinsを使用してすべてを構築します)。

最初のプロセスは、外部リポジトリからgitを介してローカルリポジトリにクローンを作成し、次にgerritで空のプロジェクトを作成し、最後にローカルクローンをgerritにプッシュすることです。

ただし、その時点では、gerritリポジトリにブランチは表示されません。現在、ブランチとrefidを手動で追加することでこれを回避していますが、それは複雑で壊れやすいようです。余分なゆがみがなくても、デフォルトで外部ブランチが入ってくると思います。それらは確かにgithubリポジトリから作成されたクローンに含まれています。

理想的には、githubからgerritに直接クローンを作成して、それを機能させることができれば便利です...単に物事を転送するために追加のローカルリポジトリが必要な理由、またはブランチがgerritに表示されない理由は明らかではありません。ローカルクローンがプッシュされたときにクローンを作成します。提案?

4

2 に答える 2

4

git pushを実行すると、アクティブなブランチ(HEAD)のみがプッシュされます。すべてのブランチとタグをプッシュしたい場合は、次のようにしますgit push origin refs/heads/* --tags

Gerritにプッシュする前にリポジトリのローカルコピーを用意することは技術的には必要ありませんが、おそらく最も簡単な方法です。

于 2012-09-04T21:21:50.960 に答える
4

私は自分で答えを見つけたと思います。それは、リポジトリを作成する方法に要約されます(そして、裸のリポジトリへの私の正式な紹介です)。

つまり、デフォルトの方法でリポジトリのクローンを作成できます。

git clone https://github.com/foobar/myrepo.git

これにより、 myrepo/.gitディレクトリツリーが含まれる作業ディレクトリmyrepoを持つローカルクローンが生成されます。

または、裸でクローンを作成することもできます。これを行うにはいくつかの方法がありますが、-mirrorオプションは最も完全なレプリカを生成するように見えます。

git clone --mirror https://github.com/foobar/myrepo.git

これにより、上記のmyrepo / .gitディレクトリと同じ構造を持つmyrepo.gitディレクトリ(gerritまたはgitoliteで表示される場合があります)が生成されますが、作業ディレクトリビットはありません。

注:ブランチのリモート参照を持つベアクローンよりもミラーの方が望ましいかどうかはわかりません...これについて問い合わせる別のスレッドがあります。完全を期すために、リモート参照を使用してベアクローンを作成する方法を次に示します(キーは作業ディレクトリではありません)。

git init --bare ${LOCAL_REPO}
cd ${LOCAL_REPO}
git remote add origin ${REMOTE_URL}
git fetch origin --tags
git fetch origin

ミラーのアイデアを1回限りでテストし、 All-Projects.gitも存在するローカルのgerritインストールフォルダーにリポジトリを直接複製し、gerritを再起動すると、リポジトリとそのすべてのブランチが表示されます。ただし、これはgerritにとって理想的な方法ではありません。代わりに、ローカルクローン(できればベアクローン)からプッシュする必要があります。

したがって、gerritでは、Web管理インターフェースを介して新しい空のプロジェクトを作成し(最初の空のコミットを入れませんでした-それが問題を引き起こすかどうかはわかりません)、次に、あなたがしようとしているリポジトリのローカルミラー内から複製し、ブランチとタグとともに新しい空のgerritリポジトリにプッシュします。

git push <gerrit_repo> refs/heads/* refs/tags/*
于 2012-09-05T00:24:53.723 に答える