13

私はgit単一のリポジトリで使用することに慣れています。しかし、私は最近 Android の開発に手を出しており、頭を包み込もうとしていrepoます。ディレクトリにxmlを作成してカスタムgitリポジトリをセットアップし.repo/local_manifests(リポジトリ1.19を使用しています)、正常にrepo sync動作します。

カスタム git リポジトリを見る# Not currently on any branch.git checkout abcd1234git checkout origin/master. 変更を加える限り、元に戻す方法がわかりません。これが私の通常の git ワークフローです。

git checkout origin/master
#make changes to working directory
git add .
git commit -m 'useful message'
#assume time has passed and there could be changes upstream
git fetch
git rebase origin/master
git push origin master

技術的にブランチにいないので、どうすれば変更をプッシュできますか? ツールがあることは知っていますrepo uploadが、それがどのように機能するのか正確にはわかりません。私は Gerrit を使ったことはありませんが、Github にプッシュされる前に他のチーム メンバーがコードをレビューできるように設定する価値があるかもしれません。正直なところ、私はまだ と について非常に抽象的な理解を持っていrepoますGerrit

4

1 に答える 1

17

技術的には、

git checkout origin/master

すぐに切り離された HEAD 状態になります。

良くも悪くも、これはまさにrepo syncデフォルトで行われることです。つまり、マニフェストにリストされているリポジトリはすべて、 fresh 後に分離された HEAD 状態になりrepo syncます。

デタッチされた HEAD は完全に正常な状態ですrepo- オリジン/マスターが前方にrepo sync移動すると、ローカル状態も移動します (事実上、git checkout origin/master再び移動します)。

ただし、独自の変更を加えてアップストリームにプッシュする場合、この奇妙な状態は良くありません。この場合、次のいずれかを実行できます。

repo start master .

masterこれは、現在のプロジェクト ( ) で呼び出されたブランチの追跡を開始することを意味し.ます。

または、次を使用できます(実際、私はこれを好みます):

git checkout --track origin/master

どちらの方法でもほぼ同じ結果が得られます。切り離された HEAD 状態ではなくなり、リモート ブランチを追跡するローカル ブランチになります。

この時点で、ローカル コミットを作成し、標準を使用してそれらを直接アップストリームにプッシュするかgit push(ただし、これはサーバー ポリシーで許可されていない場合があります)、または Gerrit コード レビューに提出することができます (強く推奨され、ほとんどの Android ショップでデフォルトの選択となっています)。追跡ブランチが配置されると、Gerrit への送信は次のように簡単です。

repo upload     # upload changes in multiple repositories at once

また

repo upload .   # upload changes in current git repo only, fast!

(これは、マニフェストにレビュー サーバーの適切な設定が含まれていることを前提としています)。

于 2013-01-27T07:11:54.470 に答える