# SCMのコンセプト

バージョン管理システムにより、変更をサーバー間で双方向にコミット/プッシュ、取得することで、複数の開発者が同じプロジェクトで作業できます。

* ブランチングにより、開発者は、メインの開発ラインを阻害することなく、コードを分離し、単独で作業できます。

  **[Branch] (ブランチ)**は、特定の時点(他の環境へのプロモーション用に新しいリリースを準備する場合など)に取得されるプロジェクトのコピーです。コピーは、メインの開発ラインから、別の[Branch] (ブランチ)または[Tag] (タグ)から、取得できます。ブランチは編集可能です。したがって、元のソースから"フォーク"できます。この場合、元のソース(ブランチまたはメイン)とフォークされたブランチ間の調整は手動で行う必要があります。

* マージングにより、開発者は複数の開発ブランチとその対応するコミット履歴を結合できます。Gitマージングのコンセプトについては、[Gitマージのドキュメンテーション](https://git-scm.com/docs/git-merge)をご覧ください。

* 開発者はタグ付けにより、開発プロセスにおける特定のリビジョンを重要なものとしてマークできます。タグを使うと、以前の開発段階でジョブのデプロイに使用したものとまったく同じバージョンでエラーを修正することも可能です。

  **[Tag] (タグ)**はブランチと似ていますが、メインまたはブランチの読み取り専用のスナップショットです。作成後は編集できません。ただし、タグから新しいブランチ(編集可能)を作成することは可能です。

開発チームには、使用するワークフローを定義することが期待されています。

次の図は、GITのブランチングとタグ付けの一般的なプロセスを示しています。 ![](https://help.qlik.com/talend/ja-JP/software-dev-lifecycle-best-practices-guide/Resources/images/archi-git.png)

Gitフローについては、この[GitHubビジュアルチュートリアル](https://guides.github.com/introduction/flow/)をご覧ください。