2

そのため、私たちは CVSNT から Perforce または Git に移行しています。私はここ数週間、それらの機能を調査してきました。Perforce は集中化されているため、実際にはもう少し類似していることは明らかです。

Git は速いように見えますが、私たちはすべての開発者が同じ部屋にいる会社です。100 人以上の開発者がいるにもかかわらず、すべてのコンピューターは CVSNT サーバーに接続されています...

このため、Git を Perforce と同様に機能するように適応させる方法がわかりません..

オフラインの場合、Git リポジトリのクローンを作成すると、履歴とそのリポジトリに関するすべてをコピーしてオフラインで動作させますが、同時に作業を行うと、たとえばローカル ファイルの履歴があるのは奇妙に思えます...

したがって、開発者 B がコミットしてサーバーにプッシュしても、開発者 A はそれを知りません。ファイルの履歴には残りません...彼が実際にサーバーからプルしない限り、そうですよね?! (それらが同じブランチにある限り..)

しかし、それがこのように機能する場合、実際には分散 SCM を使用して集中管理された方法で作業することになります...そして、サーバーにプッシュされたときに「推測」する必要があります..ファイルかどうかを知るコマンドがあったとしても新しいリビジョンがあります。手動で確認する必要があるのは悪いことです..

他の人が実際にいつサーバーにプッシュするかなどを知らなくても、Gitが実際にどのように並行して機能するかを誰かがよりよく説明できますか?

もう1つ、Gitで素敵なリビジョングラフを見つけることができませんでした.Tortoise Gitで見つけましたが、リビジョンのグラフというよりもブランチグラフに似ています..

4

3 に答える 3

5

...そして、いつサーバーにプッシュされたかを「推測」する必要があります..ファイルに新しいリビジョンがあるかどうかを知るためのコマンドがあっても、手動で確認する必要があるのは悪いことです..

このために、 git hooksと呼ばれる機能があり、各コミットの前または後に (およびその他の時点で) スクリプトを起動できます。

したがって、それを使用して、特定のブランチで作業している他の人に、誰かがプッシュしたことを通知する (電子メール、SMS、ハト) ことができるので、フェッチを行う必要があります。

于 2013-10-07T12:04:42.810 に答える
4

git のような DVCS を使用した通常のワークフローは、誰かがプッシュしているかどうかを推測することに依存していません。

あなたはプッシュするだけで、他の誰かがあなたの前にプッシュした場合、あなたのアクションはデフォルトで拒否されます(「早送り」ではないため)。

次に、プルします:

  • 理想的にgit pull --rebaseは、そのブランチの最新のコミットの上で作業をやり直すためです)。
  • すべてがまだ機能するかどうかを確認します
  • あなたは押し返す

リビジョン グラフに関しては、何が起こっているかを簡単git log --graphに確認できます (このエイリアスが気に入っています)。

于 2013-10-07T12:11:54.317 に答える
3

通常のシナリオ (非常に単純化された) は次のとおりです。

  1. 開発者はマスター ブランチを自分のマシンにチェックアウトします (SVN では別名「トランク」、最新のコミットがある場所)。
  2. そこから分岐し、ローカル ブランチを作成します。
  3. このローカル ブランチで、彼は必要なコミットを作成します。
  4. 彼は、このブランチから「プル リクエスト」を作成します (つまり、マスターにマージして戻すように要求します)。
  5. マスター ブランチの担当者は、変更を確認してマスターにマージします。

マスター ブランチは、開発者が分岐した時点から変更される可能性がありますが、新しい変更がマスター ブランチに加えられた変更と交差しない場合、マージは自動的に行われます。そのため、マスター ブランチはgit、マージを実行するときに無視できる時間だけブロックされます。

それらが交差する場合 (それほど頻繁ではありません)、それを解決する方法は 2 つあります。まず、プル リクエストの処理を担当する担当者は、競合を手動で解決できます。第二に、彼は開発者に電話して、それを行うように頼むことができます。次に、開発者は更新されたマスター ブランチをチェックアウトし、それをローカル ブランチにマージして (競合を解決)、新しいプル リクエストを作成します。これで、ほぼ確実に成功します。

もちろん実際には、複数のブランチ (たとえば、マスター、主要な機能のためのブランチ、リリース ブランチなど) と複数の管理担当者が同時に存在する場合があります。ただし、いずれにせよ、グローバル ロックはなく、メイン リポジトリとの接続を維持する必要もありません。

Git を使用した非常に優れた開発プロセスについては、Git Flowで説明されています。

于 2013-10-07T12:12:44.403 に答える