4

シナリオ:

  • githubには、ユーザー「guru」と「bigsw」というプロジェクトの彼のprimamyリポジトリがあります。このプライマリリポジトリにはいくつかのブランチがあります。("rel1"、 "rel2"、 "master")
  • このプロジェクトには、user1とuser2によって作成された2つのフォークがあります。
  • 各abobeフォークには、プライマリリポジトリと同じブランチに加えて、特定の作業を含む1つの異なるブランチがあります。したがって、user1はbigswをフォークして「utf8」というブランチを作成し、user2はブランチ「mongo」を作成しました。

  • 今、私はプロジェクトに参加したいと思っています。私の仕事には、次のブランチが必要です。

    • guru / bigsw:master
    • user1 / bigsw:utf8(読み取り:USER / REPO:BRANCH)
    • user2 / bigsw:mongo

推奨されるワークフローは何ですか?

私の考えは:

  1. githubで教祖/bisgwをフォークします(myname / bigswを取得します)
  2. git clone git://github.com/myname/bigsw(ローカルコピーを取得)

  3. user1 / bigsw:utf8ブランチのローカルコピーの同期を維持し、同様にuser2のフォークからのブランチ "mongoのコピーが必要です。したがって、user1とuser2から完全なリポジトリを複製する必要はありません。それぞれから1つのブランチのみです。

    • git remote add user1 git@github.com:user1/bigsw.git
    • git fetch user1
    • git checkout -b utf8 user1/utf8
    • 同様に、user2のmongoリポジトリの場合(最初の2つのコマンドについてはよくわかりません)

  4. git checkout -b i18n(自分のブランチを作成する-ここで変更を加えます)
  5. ソースを編集します(前のコマンドの後よりも、自動的に「i18n」ブランチに「移動」することを期待しています)
  6. git push origin i18n(githubへの変更をmyname / bigsw:i18nブランチにプッシュするため)
  7. 将来的には、i18nブランチのプルリクエストを送信する予定です/方法はわかりませんが、まだ必要ありません;)/

上記は正しいワークフローですか?はいの場合、質問:

  • user1のブランチ「utf8」とuser2の「mongo」ブランチをローカルマシンに複製する方法-3。)のコマンドは正しいですか?
  • すべての同期を維持する方法(ローカルマシンで上記のすべてから同期されたブランチが必要です)-変更はブランチ「i18n」でのみ行われます。

私はgit/githubの初心者ですが、残念ながら、この複雑なモデルから始める必要があります(少なくとも私にとっては)。https://help.github.com/を掘り下げて何かを学びましたが、すべての「git哲学」を理解していません。

私はすでに読んだ:

しかし、それでも暗闇の中でさまよう... :(

4

1 に答える 1

2

一般的にはいいですが、いくつか提案があります。

私はgit checkout -b userX userX/branch電話を省きます。代わりに、私は教祖による元のブランチにいることを確認し、次のように2つのリモートをマージするローカルブランチを作成します。

git checkout -b utf8-mongo
git merge user1/utf8
git merge user2/mongo

一見恐ろしいように見えるマージの競合に直面する可能性がありますが、それらをうまく通り抜けることができます(マージの競合を解決する方法についてのガイドを調べ、優先する変更がわからない場合は作成者と話し合います)。

次に、以下を使用して、それから独自のブランチを作成できます。

git checkout -b i18n

あなたが疑ったように。変更を行い、ルールのコミットを早期に実行し、頻繁にコミットします。すべてのアップストリームブランチから変更をプルする場合は常に、次のようにします。

git checkout utf8-mongo
git pull guru/master
git pull user1/utf8
git pull user2/mongo

上記のようにマージの競合を解決してから、ブランチに戻って新しい変更を取得します。

git checkout i18n
git merge utf8-mongo

ブランチを分割する理由は、マージの競合を管理するのは醜く、将来的にブランチを破棄して最初からやり直す可能性があるということです。その場合、他のブランチのすべてのマージを再度実行したくないので、それらを別のブランチに保存します。

githubs Webインターフェイスを使用してプルリクエストを実行する場合は、ブランチi18nからプルするようにリクエストするだけです。あなたが他の多くの人々の枝を引っ張ったので、人々(すなわち教祖)は不幸かもしれません、それは彼自身の枝に統合されるのにまだ十分に熟していないかもしれません。そのプルを調整するために、いくつかのメール連絡先が必要になる場合があります。おそらく、最初から開発者と健全なコミュニケーションをとることが最善です。

于 2012-06-17T11:27:29.540 に答える