GIT vs.強制的に - 2 つの VCS が入力されます…1 つが終了します [クローズ]

StackOverflow https://stackoverflow.com/questions/222782

質問

そこで私は職場で GIT を販売してもらっているところです。まず最初に必要なことは、GIT がすでにやり慣れていることの方が優れていることを全員に納得させることです。現在は Perforce を使用しています。他にも同様のセールを経験した人はいますか?何か良いリンクやアドバイスはありますか?

大きな利点の 1 つは、ネットワークから切断された状態でも作業できることです。もう 1 つの優れた IMO は、追加/チェックアウトの処理方法です。追加ポイントも大歓迎です!また、合計で約 10 ~ 20 人の開発者がいます。

役に立ちましたか?

解決

Perl  5インタープリターのソースコードは現在、Perforceからgitに変換するという苦労を経験しています。たぶん、サムVilain’の git-p4raw インポーターは興味深いものです。

いずれにせよ、中央集中型のすべてのVCSで得られる主要な勝利の1つであり、ほとんどの分散型VCSも生であり、 速度 を圧倒します。あなたが経験するまで、ほんの一瞬のほんの数分で、プロジェクトの全歴史を手にすることがどれほど自由であるか想像することはできません。各コミットの完全な差分を含むプロジェクト履歴全体のコミットログを生成することも、ほんの一瞬で測定できます。 Gitは非常に高速で、帽子が飛びます。ネットワーク上でラウンドトリップする必要があるVCSは、ギガビットイーサネットリンク上でも、競合する可能性がありません。

また、gitを使用すると、コミット時に慎重に選択することが非常に簡単になるため、作業コピー(または単一ファイル内)の変更を複数のコミットに分散できます–必要に応じてさまざまなブランチにまたがります。これにより、作業中のメンタルノートを少なくすることができます–慎重に作業を計画する必要はありません。どの変更セットをコミットするかを前もって決定し、他の作業を延期する必要があります。必要に応じて変更を加えることができますが、変更を解くことができます–ほとんど常に簡単に–コミットする時間です。 スタッシュはここで非常に大きな助けになります。

これらの事実により、gitを使用する前よりも、より多くの集中的なコミットを自然に行うことができます。これにより、一般的に履歴がより便利になるだけでなく、 git bisect

私は今、考えられないことがもっとあると確信しています。チームをgitで販売するという提案の1つの問題は、上記で示唆したように、多くのメリットが相互に関連しており、相互にやり取りしていることです。ワークフローを変更し、どの変更が真の改善になります。これを考慮する必要があり、明示的に指摘する必要もあります。

他のヒント

Perforceを職場で使用しています。 Gitを使用しているのは、コードの作業中にサーバーに接続できない場合でも、何らかの形式のバージョン管理が必要だからです。いいえ、オフライン作業の調整はまったく同じではありません。ここで、gitが大きな利点であることがわかりました。

  1. 分岐速度-gitは最大で数秒かかります。
  2. 競合-P4Mergeの自動解決により、1週間分の作業が1回破壊されました。それ以来、マージするときは手で解決したいと思います。 Gitが競合についてプロンプトを表示するとき、それは実際には競合です。残りの時間は、gitが問題を正しく解決し、時間を節約します。
  3. マージの追跡-1つのブランチが他の2つのブランチからマージを継続的に受信している場合、perforceの頭痛の種を知っています。 gitでは、gitのマージの結果は実際にはその祖先が誰であるかを知っている新しいコミットであるため、頭痛は最小限に抑えられます。
  4. 許可-ファイルを操作しようとした回数を追跡できませんでしたが、Perforceでチェックアウトされていないためにできませんでした。 XCode(または堅実なPerforce SCMプラグインを持たない任意のエディター)をオフラインで使用した場合、これがどのように苛立たせるかがわかります。 Gitでそれについて心配する必要はありません。変更します。 Gitは私を止めず、バックグラウンドで追跡します。
  5. メインツリーを整理する-gitを使用すると、コミットを並べ替えてコードを整理し、履歴をきれいに整理できます。前回のチェックインの一部であると想定されていたため、「このファイルをチェックインする」ことはありません。ゴミ。誰にも役立たないので、私はそのようなコミットをつぶします。
  6. スタッシング-p4 shelveコマンドを使用するには、perforceサーバーのバージョンが2010.1以降である必要があります。
  7. パッチの作成-gitで簡単に実行できます。コマンドラインを使用せずにPerforceでそれが可能かどうかわからない。
  8. GUIからパッチをメールで送信-繰り返しますが、ここでgitが勝ちます。
  9. ディスク容量-perforceでは、すべてのブランチがコピーです。つまり、ソースツリーが巨大な場合、ディスク領域がすぐに消費されます。構築を開始すると、追加のスペースもカウントされません。ブランチとディスクスペースの間にリンクがあるのはなぜですか? gitを使用すると、100のブランチを持つことができ、一度に1つのブランチしか存在しません。特に2つのバージョンで同時に作業したい場合は、クローンを作成して作業を行い、必要に応じて1つのクローンを削除します。何も失うことはありません。
  10. XCode4を使用している場合は、perforceサポートが廃止され、gitサポートが組み込まれました。私のようにクロスプラットフォームで作業する場合、これは非常に重要です。 Visual Studioでは、git拡張機能を使用できます。 PERFORCEを使用すると、両方のOSで同じようにうんざりします。まあ、今はもう少しMacでXCode4をシーンに追加するかもしれません。
  11. 欠陥のあるチェックイン(またはgit bisectルール)を見つける-バグが導入された場所を把握するために、perforceでバイナリ検索を実行しようとしたことがありますか?かなり面倒ですよね?途中で他のブランチから統合された場合、さらに面倒です。どうして?そのようなタスクの自動化がないためです。 PERFORCEと対話するには独自のツールを作成する必要があり、通常は時間がありません。 gitを使用すると、開始点(「良い」点と「悪い」点)を指定して、検索を自動化します。さらに良いことに、ビルドとテストのプロセスを自動化できるスクリプトがある場合、gitをスクリプトに接続することができ、チェックインを見つけるプロセス全体が自動化されます。それはそうあるべきです。
  12. リファクタリング全体の変更の追跡-BigClassをSmallClass1とSmallClass2に分割してみてください。 Perforceにとって、BigClassは存在しなくなり、2つの新しいクラス(SmallClass1とSmallClass2がソースツリーに加わりました)。 Perforceにとって、BigClassとSmallClass1およびSmallClass2の間には関係がありません。一方、Gitは、BigClassのx%が現在SmallClass1にあり、BigClassのy%がSmallClにあることを知るのに十分スマートです。

perforceから切り替えるには説得力があります。私が使用した2つの会社では、それは十分すぎるほどでした。それらは両方とも異なるオフィスを持つ会社でしたが、オフィスには十分なインフラストラクチャがセットアップされていたため、切り離された/切断された機能を持つ必要はありませんでした。

変更について何人の開発者について話しているのですか?

本当の質問は、gitが提供できる組織のニーズを満たしていないperforceについてはどうですか?同様に、gitはperforceと比較してどのような弱点がありますか?自分で答えられないなら、ここで尋ねても助けにはなりません。会社のビジネスケースを見つける必要があります。 (たとえば、全体的な所有コストが低い(おそらく、中間学習段階の生産性の低下、(少なくとも最初の)管理コストの増加など)

私はあなたが厳しい売りに出ていると思います-PERFORCEは置き換えようとするのにかなり良いものです。あなたがPVCまたは安全を起動しようとしている場合、それは簡単です。

切り替え中または切り替え後の人々を幸せに保つという観点から、早期に理解すべきことの1つは、ローカルブランチがGitでどれだけプライベートになり、ミスを犯すことができるかということです。それらすべてを入手して、現在のコードからいくつかのプライベートブランチをクローンし、そこで実験を行ってください。いくつかのファイルの名前を変更し、チェックインし、別のブランチからのものをマージし、履歴を巻き戻し、変更セットを別のセットの上にリベースします。彼らの最悪の事故でさえ、彼らの同僚にどのような影響を与えないかを示してください。あなたが望むのは、開発者が安全だと感じて、より速く学ぶことができる状況です(Gitには重要な学習曲線があるため)。そして最終的には開発者としてより効果的になります。

一元化されたツールを学ぼうとするとき、明らかに、リポジトリの他のユーザーに問題を引き起こすような間抜けを作ることが心配になります。恥ずかしさだけの恐怖は、実験から人々を落胆させるのに十分です。特別な「トレーニング」さえも開発者はトレーニング中に見たことのない本番システムの状況に必ず遭遇するため、リポジトリは役に立ちません。したがって、開発者は心配に戻ります。

しかし、Gitの分散された性質はこれを排除します。ローカルブランチで実験を試すことができます。もしそれがひどく間違っている場合は、ブランチを捨ててください。だれも知る必要はありません。何でもローカルブランチを作成できるので、実際のライブリポジトリで見ている問題を再現できますが、「ビルドを壊す」危険性はありません。またはそれ以外の場合は自分をだます。完了したらすぐにすべてをチェックインすることができ、バッチ処理をしてきれいな小さなパッケージにしようとすることはありません。そのため、今日4時間を費やした2つの大きなコード変更だけでなく、途中で覚えていたビルドの修正、同僚に何かを説明するときに見つけたドキュメントのスペルミスなども修正されました。また、プロジェクトの方向が変わっているために主要な変更が放棄された場合は、ブランチからビルド修正とスペルミスを選択し、手間をかけずにそれらを保持できます。

個人的にgitで私を売ったコマンドはでしたバイセクト。現在のところ、この機能が他のバージョン管理システムで利用できるとは思いません。

とはいえ、ソース管理のためにGUIクライアントに慣れている人は、gitに感心することはないでしょう。現在、唯一のフル機能のクライアントはコマンドラインです。

人々が使用しているPerforce機能は何ですか?

  • 単一マシン上の複数のワークスペース
  • 番号付きチェンジリスト
  • 開発者ブランチ
  • IDEとの統合(Visual Studio、Eclipse、 SlickEdit、...)
  • 多くのビルドバリアント
  • 複合ワークスペース
  • いくつかの修正を統合するが、他の修正は統合しない
  • など

すべての人がコマンドラインから取得および書き込みを行う場合、gitはそれをカバーしているので、他のすべてのRTSも同様です。

どうやら GitHubは企業にgitトレーニングコースを提供するようになりましたそれに関するブログ投稿

  

私は過去数週間、GitでAndroidを訓練するために何度かGoogleキャンパスに行ってきました。 Shawn Pearce(彼のGitとEGit / JGitの栄光から彼を知っているかもしれません–彼はJunioが町を離れたときに保守を引き継ぐヒーローです)に働きかけ、Googleエンジニアのトレーニングを支援するように頼まれましたAndriodは PerforceからGitへの移行を行っているため、Androidを大衆と共有できます。喜んでやりました。

     

[…]

     

Logical Awesomeは正式にこの種のカスタムトレーニングサービスをすべての企業に提供しています。 Gitへの切り替えを検討している場合は、トレーニングと計画を立ててください。

エンファシス鉱山。

私は長い間Perforceを使用していますが、最近はGITも使用し始めました。これが私の「目的」です。意見:

Perforceの機能:

  1. GUIツールの方が機能が豊富なようです(タイムラプスビュー、リビジョングラフなど)
  2. 最新リビジョンに同期するときの速度(履歴全体を転送するオーバーヘッドなし)
  3. Eclipse / Visual Studioの統合は本当に素晴らしい
  4. チェンジリストごとに1つのブランチで複数の機能を開発できます(これがGITよりも優れているかどうかはまだ100%確信できません)
  5. 「スパイ」することができます;他の開発者がやっていること-彼らがチェックアウトしたファイルの種類。

GIT機能:

  1. GITコマンドラインはPerforce(init / clone、add、commit。複雑なワークスペースの構成はありません)よりもはるかに簡単であるという印象を受けました
  2. チェックアウト後にプロジェクト履歴にアクセスするときの速度(同期時に履歴全体をコピーするコストがかかります)
  3. オフラインモード(開発者は、到達不能なP4サーバーがコーディングを禁止することに文句を言いません)
  4. 新しいブランチの作成がはるかに高速になりました
  5. 「メイン」各開発者は独自のローカルサンドボックスを持つことができるため、GITサーバーは十分なTBytesのストレージを必要としません
  6. GITはオープンソース-ライセンス料なし
  7. あなたの会社がOpenSourceプロジェクトにも貢献している場合、GITでパッチを共有する方がはるかに簡単です

OpenSource / Distributedプロジェクトの全体GITはP2Pアプリケーションに似ており、誰でも開発に参加できるため、常にGITをお勧めします。たとえば、Perforceでリモート開発を行っていたときに、1週間に1回、1Mbpsリンクで4GBプロジェクトを同期していたことを思い出します。そのため、多くの時間が無駄になっただけです。また、それを行うためにVPNをセットアップする必要がありました。

小規模な会社があり、P4サーバーが常に稼働している場合、Perforceも非常に優れたオプションであると言えます。

しばらくGitを使用していましたが、最近Gitサーバーのハードドライブがクラッシュし、最新の状態に戻すことができませんでした。数日前の状態に戻ることができました。サーバーがバックアップされたとき。チームの全員が変更をプル/プッシュし、出来上がり、サーバーは現在の状態に戻ります。

Perforceとgit(および最も一般的に言及されているもの)の1つの重要な違いは、それぞれの巨大なバイナリファイルの処理です。

たとえば、ビデオゲーム開発会社の従業員のこのブログのように: http://corearchitecture.blogspot.com/2011/09/git-vs-perforce-from-game-development.html

しかし、重要なことは、大規模な6gbリポジトリがある場合、ドキュメントとこれまでに構築されたすべてのバイナリ(そして最後に、はい!実際のソース履歴)を含む、gitとperforceの速度の違いです。巨大企業はPerforceを実行する傾向があるため、すべての重要な操作を地下の巨大サーバーバンクにオフロードするように設定しています。

Perforceにとってのこの重要な利点は、Perforceとは何の関係もない要因、つまり、Perforceを実行している会社がサーバーバンクを購入できるという事実に起因しています。

そして、とにかく、結局のところ、Perforceとgitは異なる製品です。 GitはVCS専用に設計されており、これはPerforceよりもはるかに優れています(特に、他の言葉で言うと、Perforceでのブランチは一般的に使いやすい、より多くの機能を備えているため、手術は専門家のみが行うべきです:P)( http://stevehanov.ca/ blog / index.php?id = 50

Perforceゲインを使用する企業が享受するその他のメリットは、PerforceがVCSだけでなくファイルサーバーでもあり、ビルドのパフォーマンスをテストするためのその他の多くの機能を備えているためです。

最後に:Gitはオープンソースであり、ブートがはるかに柔軟であるため、重要な操作を中央サーバーにオフロードして高価なハードウェアを実行するgitにパッチを当てることはそれほど難しくありません。

GITが勝つことを知っていることの1つは、「行末を保持する」機能です。 perforceは、Unix、Dos / Windows、またはMacOS9形式(" \ n"、" \ r \ n"または" \ r)に変換することを主張しているようです。

Windows環境または混合OS環境でUnixスクリプトを作成している場合、これは非常に苦痛です。ファイル拡張子ごとにルールを設定することもできません。たとえば、.sh、.bash、.unixファイルをUnix形式に変換し、.ccp、.bat、または.comファイルをDos / Windows形式に変換します。

GIT(これがデフォルト、オプション、または唯一のオプションかどうかはわかりません)では、「行末を保持する」ように設定できます。つまり、ファイルの行末を手動で変更すると、GITはその形式をそのままにします。これは、物事を行う理想的な方法のように思えますが、なぜこれがPerforceのオプションではないのか理解できません。

この動作を実現できる唯一の方法は、ファイルをバイナリとしてマークすることです。私が見るように、それは欠けている機能を回避するための厄介なハックになるでしょう。すべてのスクリプトなどで行うのは面倒であるだけでなく、おそらくほとんどの差分なども壊れます。

「ソリューション」現時点で解決しているのは、スクリプトがUnix環境にデプロイされるたびに、sedコマンドを実行してスクリプトからすべてのキャリッジリターンを削除することです。これも理想的ではありません。特にそれらのいくつかはWARファイル内にデプロイされており、展開したときにsed行を再度実行する必要があるためです。

これは、GITに大きな利点をもたらすと思うものであり、上記で言及したことはないと思います。

編集:もう少しPerforceを使用した後、コメントをいくつか追加します。

A)Perforceで本当に見落としているのは、変更されたファイル、削除されたファイル、追加されたファイルを含む、明確でインスタンスの差分です。これは git diff コマンドを使用してGITで使用できますが、Perforceでは、変更を記録する前にファイルをチェックアウトする必要があります。また、Eclipseなどのメインエディターを自動的にセットアップする必要がある場合もありますファイルを編集するときにファイルをチェックアウトすると、ファイルを他の方法(メモ帳、UNIXコマンドなど)で編集する場合があります。また、Eclipseやp4eclipseを使用しても、新しいファイルはまったく自動的に追加されないようです。そのため、すべての変更を見つけるには、「Diff against ...」を実行する必要があります。ワークスペース全体で、まず実行に時間がかかり、次に非常に複雑な除外リストを設定しない限り、すべての種類の無関係なものが含まれます。これは次のポイントにつながります。

B)GITでは、.gitignoreは非常にシンプルで管理しやすく、読みやすく、理解しやすいと感じています。ただし、Perforceで設定可能なワークスペースの無視/除外リストは扱いにくく、不必要に複雑に見えます。ワイルドカードが機能する除外を取得できませんでした。次のようなことをしたいです

-//Server/mainline/.../target/...   //Svend_Hansen_Server/.../target/...

サーバー/メインライン内のすべてのプロジェクト内のすべてのターゲットフォルダーを除外します。しかし、これは期待したようには機能しないようであり、次のようなプロジェクトごとに行を追加することになりました。

-//Server/mainline/projectA/target/...  //Svend_Hansen_Server/projectA/target/...
-//Server/mainline/projectB/target/...  //Svend_Hansen_Server/projectB/target/...
...

およびbinフォルダー、.classpathおよび.projetファイルなどの同様の行。

C)Perforceには、かなり便利なチェンジリストがあります。ただし、変更のグループを作成し、それらすべてをチェックしてチェンジリストに入れてから、そのチェンジリストを送信する前に他の作業を行うと仮定します。後で最初のチェンジリストに含まれるファイルの1つに変更を加えた場合、そのファイルはそのチェンジリストに残り、元々追加した変更のみが含まれていると仮定して、後でチェンジリストを送信することはできません同じファイルになります)。 GITでは、ファイルを追加してさらに変更を加えた場合、それらの変更は追加されず( git diff に表示されたままになり、c

Gitの経験はありませんが、分散VCSでもあるMercurialの経験はあります。本当にプロジェクトに依存しますが、私たちの場合、分散VCSは、頻繁に壊れるビルドを基本的に排除するため、プロジェクトに適していました。

クライアントサーバーVCSに向いているものもあれば、分散型のものになったものもあるため、プロジェクトに本当に依存していると思います。

git の気に入らない点は次のとおりです。

まず第一に、分散されたアイデアは現実に直面して飛んでいると思います。実際に git を使用している人は皆、Linus Torvalds も含めて一元的な方法で使用しています。カーネルが分散方法で管理されている場合、実際には「公式」カーネル ソースをダウンロードできないことを意味します。ソースは存在しないでしょう。Linus のバージョンが必要か、Joe のバージョンが必要かを決定する必要があります。またはビルのバージョン。それは明らかにばかげているため、Linus が集中ワークフローを使用して管理する公式の定義が存在します。

自分のものの一元的な定義が必要であることを受け入れると、サーバーとクライアントの役割が完全に異なることが明らかになるため、クライアント ソフトウェアとサーバー ソフトウェアは同じであるべきであるという定説は純粋に制限的になります。クライアントとサーバーの定説 データ 同じであるべきというのは、明らかにばかばかしいものになります。特に 15 年の歴史があり、誰も気に留めず、誰もがクローンを作成しなければならないコードベースではなおさらです。

私たちが実際にそうした古いものを使いたいのは、通常の VCS と同じように、食器棚にしまって、そこにあることを忘れることです。git が毎日ネットワーク上ですべてのデータをやり取りしているという事実は、それを削除するように要求するため、非常に危険です。その枝刈りには多くの面倒な決定が必要であり、失敗する可能性もあります。したがって、人々はおそらく歴史のさまざまな時点からの一連のスナップショット リポジトリ全体を保存するでしょう。しかし、そもそもソース管理の目的はそれではなかったでしょうか?この問題は、誰かが分散モデルを発明するまで存在しませんでした。

Git は人々に歴史を書き換えることを積極的に奨励しており、上記のことがおそらくその理由の 1 つです。通常の VCS では、管理者以外は履歴の書き換えを不可能にし、管理者がそれを考慮する理由がないようにします。私が間違っている場合は訂正してください。しかし、私の知る限り、git には通常のユーザーに書き込みアクセスを許可する一方で、履歴の書き換えを禁止する方法はありません。つまり、恨みを持つ開発者 (または学習曲線にまだ苦労している開発者) は、コードベース全体を破壊する可能性があります。それをどうやって締めるのですか?そうですね、履歴全体のバックアップを定期的に作成するか、つまり履歴を正すか、電子メールですべての差分を受け取り、手動でマージする一部の貧弱な SOD を除くすべてのユーザーへの書き込みアクセスを禁止します。

資金が豊富な大規模プロジェクトの例を取り上げ、そのプロジェクトで git がどのように機能するかを見てみましょう。アンドロイド。一度、Android システム自体を試してみることにしました。git にアクセスするには、リポジトリと呼ばれる多数のスクリプトを使用する必要があることがわかりました。リポジトリの一部はクライアント上で実行され、一部はサーバー上で実行されますが、両方とも、その存在自体が、どちらの能力においても git が不完全であるという事実を示しています。何が起こったのかというと、一週間ほどソースを取得できず、その後完全に諦めてしまいました。いくつかの異なるリポジトリから本当に膨大な量のデータを取得する必要がありましたが、サーバーは私のような人々で完全に過負荷になってしまいました。リポジトリがタイムアウトになり、タイムアウトした場所から再開できませんでした。git がそれほど分散可能であれば、その 1 台のサーバーの負荷を軽減するために何らかのピアツーピア処理を行ったはずだと思うでしょう。Git は分散可能ですが、サーバーではありません。Git+repo はサーバーですが、リポジトリは単なるハックのアドホックなコレクションであるため、配布できません。

git の不十分さを示す同様の例として、gitolite (およびその先祖はあまりうまくいかなかったようです) があります。Gitolite は、その仕事を git サーバーのデプロイメントを容易にすることであると説明しています。繰り返しますが、この存在そのものが、git がクライアントであるのと同様に、サーバーではないことを証明しています。さらに、それがどちらかに成長した場合、それは設立の原則を裏切ることになるため、決してそうではありません。

たとえ分散されたものを信じていたとしても、git は依然として混乱するでしょう。たとえば、支店とは何でしょうか?リポジトリのクローンを作成するたびに暗黙的にブランチが作成されると言われていますが、それは単一のリポジトリ内のブランチと同じであるはずがありません。つまり、少なくとも 2 つの異なるものがブランチと呼ばれていることになります。ただし、リポジトリで巻き戻して編集を開始することもできます。それは 2 番目のタイプの分岐のようなものですか、それともまた別のものですか?おそらく、それはあなたが持っているリポジトリの種類によって異なります - そうそう、リポジトリもあまり明確な概念ではないようです。通常のものと裸のものがあります。裸の部分がソース ツリーと同期しなくなる可能性があるため、通常の部分にプッシュすることはできません。しかし、彼らはそれを考えていなかったため、裸のものに cvsimport することはできません。したがって、通常のものに cvsimport し、それを開発者がヒットしたベアなものにクローンし、それを cvs 作業コピーに cvsexport し、これを cvs にチェックインする必要があります。誰が迷惑するでしょうか?これらすべての複雑な問題はどこから来たのでしょうか?分散されたアイデア自体から。私は最終的に gitolite をやめました。なぜなら、gitolite は私にさらに多くの制限を課すことになるからです。

Git はブランチングは軽いものであるべきと言っていますが、多くの企業はすでに深刻な不正ブランチの問題を抱えているため、ブランチングは厳格な取り締まりを伴う重大な決定であるべきだと私は考えていたでしょう。ここが Perforce の真価を発揮するところです...

perforce では、非常に機敏な方法で変更セットを操作できるため、ブランチが必要になることはほとんどありません。たとえば、通常のワークフローでは、メインライン上の最新の正常なバージョンと同期してから、機能を作成します。ファイルを変更しようとすると、そのファイルの差分が「デフォルトの変更セット」に追加されます。チェンジセットをチェックインしようとすると、メインラインからのニュースをチェンジセットに自動的にマージし (事実上リベースし)、コミットします。このワークフローは、理解する必要がなくても適用されます。したがって、Mainline は変更履歴を収集し、後で簡単に選択することができます。たとえば、古いもの、たとえば、前々のものを元に戻したいとします。問題のある変更が行われる前の瞬間に同期し、影響を受けるファイルを変更セットの一部としてマークし、その後の瞬間に同期して、「常に私のもの」とマージします。(そこには非常に興味深いものがありました:同期とは、ファイルが編集可能であるかどうか (つまり、これで、問題のある変更セットを元に戻す変更リストが完成しました。後続のニュースをマージすると、メインラインの上に追加して目的の効果を得ることができる変更リストが作成されます。私たちは決して歴史を書き換えたわけではありません。

さて、このプロセスの途中で、誰かがあなたに駆け寄り、すべてを削除してバグを修正するように指示したとします。デフォルトの変更リストに名前 (実際には番号) を付けて「一時停止」し、空になったデフォルトの変更リストのバグを修正してコミットし、名前付き変更リストを再開するだけです。さまざまなことを試すときに、一度に複数の変更リストが一時停止されるのが一般的です。簡単でプライベートなものです。メインラインへのマージを先延ばしにしたり回避したりする誘惑に駆られることなく、ブランチ体制から本当に欲しいものを手に入れることができます。

git で同様のことを行うことは理論的には可能だと思いますが、git では、私たちが承認するワークフローを主張するのではなく、実質的にあらゆることが可能になります。集中モデルは、無効な一般化である分散モデルと比較して、有効な単純化の束です。これは過度に一般化されているため、基本的にリポジトリと同様に、その上にソース管理を実装することを期待しています。

もう 1 つはレプリケーションです。git では何でもできるので、自分で理解する必要があります。perforceでは、事実上ステートレスなキャッシュを取得します。知る必要がある唯一の構成はマスターがどこにあるかだけであり、クライアントは独自の裁量でマスターまたはキャッシュのいずれかを指定できます。5 分の作業なので、失敗するはずがありません。

コード レビューや Bugzilla リファレンスなどをアサートするためのトリガーやカスタマイズ可能なフォームもあり、もちろん、実際に必要な場合に備えたブランチもあります。クリアケースではありませんが、それに近いもので、セットアップとメンテナンスが非常に簡単です。

全体として、誰もがそうしているように、一元的な方法で作業することがわかっている場合は、それを念頭に置いて設計されたツールを使用するのもよいと思います。Git は、Linus の恐ろしい機知と、人々が羊のようにお互いを追いかける傾向のせいで過大評価されていますが、その主な存在意義は実際には常識に反していません。それに従うことで、Git は自らの手を縛ってしまうのです。 (a) ソフトウェアと (b) データはクライアントとサーバーの両方で同じでなければならないという 2 つの巨大な定説があり、集中管理されたジョブでは常に複雑で不自由なものになります。

不正なコード行管理の代わりとしてGITを使用することは一般的です。 Perforceの短所の多くは、不適切な分岐戦略の結果です。他の集中管理ツールでも同じです。大量のブランチを作成する必要がある場合は、何か間違ったことをしていることになります。開発者がなぜそれほど多くのブランチを作成する必要があるのですか?

また、とにかく切断された作業が非常に重要なのはなぜですか?誰かが電車で働くことができるように?これは、最近ではワイヤレス接続を取得できない唯一の場所です。そして、ほとんどの列車でさえ、まともなWiFiを備えています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top