gitは分散システムであると想定されていますが、Googleで見つけたすべてのチュートリアルとベストプラクティスワークフローは、サーバー(通常はgithub、または独自のセットアップ)を使用することをお勧めします
私はgitを小さな個人プロジェクト(2〜3人)に使用しています。チームメンバーのマシン間で変更を直接同期するためのベストプラクティスワークフローを見つけることができます。あるいは、なぜこれを避けて代わりに「中央」サーバーを設定する必要があるのか、いくつかの説得力のある議論は何ですか?
ありがとう、
ベン
「サーバー」の意味に依存します。 Gitは中央サーバーがなくても問題なく機能しますが、多くのチームは中央リポジトリを使用すると便利です。
「サーバー」が「サーバーソフトウェアのインストール」を意味する場合、gitは特殊なソフトウェアなしで、sshを介して、またはファイルシステム上で動作します(中央リポジトリかどうか)。
多くのユーザーが使用するワークフローは、すべての開発者が変更を共通のリポジトリに「プッシュ」(送信)し、そのリポジトリからすべての変更を取得することです。このようなもの:
この場合、中央リポジトリはDevelopersコンピューターの1つ、github、またはその他の場所に配置できます。
サーバーなしでgitを使用することもできます。メールを使用するだけです。この場合、フローは次のようになります。
これは半自動化された方法でも実行できます
複数の「リモート」リポジトリを使用するようにgitをセットアップできます。警告は、neverチェックアウトするリポジトリ(つまり、誰かが作業している開発者コピー)にプッシュする必要があるということです。この場合、フローは次のようになります。
私見このタイプのワークフローは、すぐに混乱と故障につながります。
最初に行う必要があるのは、すでにどのようなワークフローがあるかを考え、それを使用するようにgitを構成することです。何かを実行したら、それを微調整できます。別のコンピューターをサーバーとしてセットアップする必要はありません。中央リポジトリを使用することに慣れている場合は、誰もがプッシュするベアリポジトリを作成するだけです。なぜローカルネットワーク上にないのですか?
中央レポ:
mkdir foo.git
cd foo.git
git init --bare
あなたのレポ:
mkdir foo
cd foo
git init
// add files
git add .
git commit -m "Initial commit"
git remote add Origin //path/to/central/repo/foo.git
git Push Origin master
その他のリポジトリ:
git clone //path/to/central/repo/foo.git
これで、誰でもmasterブランチから直接プッシュおよびプルできます。これで開始できます。
必ずしもどこかに物理サーバーにコピーを置く必要はありませんが、どこかに「祝福された」リポジトリがあると助けになるかもしれません-チームの1人を(おそらくローテーションで)人々の変更を収集して管理する責任を負わせる最終として扱われる準備ができています。通常のリポジトリにブランチを保持するか、ローカルシステムに別のリポジトリを維持してマスターソースを保存できます。
具体的な例として、LinuxとLinus Torvaldsを考えてみてください-誰もがプッシュする中央リポジトリはありませんが、Linusは、「準備ができている」と考えるすべてのコードを含むリポジトリを維持しています(そして、「準備完了」)。そうすれば、コードの内容の標準的な定義と、リリースを定義する場所が得られます。
中央サーバーは、技術的なものではなく、ソーシャル構造として設定する必要があります。そうすることで、混乱の可能性なしに、誰もが最新の公式バージョンを見つける場所を知ることができます。
前述のように、Gitは中央集中型サーバーがなくても非常にうまく機能します。ただし、中央サーバーを使用する正当な理由は、他の開発者がローカルマシンにアクセスしなくてもプルできる機能が完成したら、コードをプッシュする「常にオン」の場所を確保することです。
たとえば、現在私は3人の開発チームで働いています。私たちは皆ラップトップで作業しています。互いのマシンからプルするだけのワークフローを作成できます。しかし、機能に取り組んで、全員がオフィスを出た後にチャンスをコミットし、ラップトップがオンになっていてネットワーク上で利用可能になっていない限り、彼らはこのシステムを見てもらいたいと思っています。もし彼らが私よりも早く現れたら(いつもそうする)、彼らは私のラップトップがオンラインに戻るまで待たなければならない。
BitBucketやGitHubのようなもの、またはオフィスの常時接続サーバーにプッシュする場合、他の開発者は、次にオンラインになったときに行った変更を簡単に取得できます。
それが私にとって中央サーバーを持つ主な理由であり、実際にはGitのせいではなく、ラップトップでの作業の結果です。
Gitはこの種のセットアップではかなりうまく機能しますが、他の誰かのチェックアウトされたブランチに変更をプッシュすることは避けたいでしょう( https://git.wiki.kernel.org/index.php/GitFaq#Why_won。 27t_I_see_changes_in_the_remote_repo_after_.22git_Push.22.3F )。コードをプッシュし、他の人の変更をマージする統合ブランチがあるかもしれません。
中央レポが頻繁に使用される主な理由は、すべてのコードの標準的なベースとして使用できるからです。一方、3つ以上ある場合、マージする必要があるものについて推論するのは少し難しいかもしれません進行中の開発の枝。
セクション「共有チームリポジトリの設定方法」