質問: お世話になっております。 実践してみる機会が今までなかったので,かなり基本的な質問かもしれませんが,ご容赦ください。 現在作っているプロダクトのファイルが多くなってきたので,モジュールをディレクトリごとに区切って担当者毎に割り当てるという開発をしたいと思っています。 リポジトリを分けて管理する方法は知っているのですが,モジュールの数も多くなるため,リポジトリごとに区切ると返って管理がしづらいのではないかと思っています。 そこで,masterブランチをファイルを集めるだけのブランチとし,サブのブランチで各々の開発者が自分のプロダクトを作成し,mergeによって,masterにファイルを集めるといった運用はできるのでしょうか?リポジトリが空の状態からブランチを切って各々が開発すればできる気もしますが,すでにプロダクトが存在する状態で実現する方法が思いつかないのでご存じの方がいらっしゃればご教授お願いいたします。
回答: 可能かどうかで言えば、可能だと思います。 既にプロダクトが存在するケースであっても、ブランチを開発者ごとに用意して、 git commitする前に、それぞれの開発者がリポジトリに追加したいファイルやモジュールのみ、ワーキングツリーに入れて、それぞれのブランチでgit commit すれば良いです。 そうすると、ローカル上には自分の管理しているファイル以外のものも含まれてしまいますが、 リモートリポジトリ上(githubなど)では、開発者が管理しているファイル・モジュールのみが上がっている状態になります。 そして、作業が完了すればmasterへマージという流れにすれば、 masterには、全ファイルが集結し、それぞれ開発者のファイルごとにブランチで分けられているという状況ができます。 また、gitには既にプロダクトが存在していようとも、今までのプロダクトとは完全に隔離された、いわゆる「空ブランチ」を作成するオプションも存在します(git checkout --orphan ブランチ名)。 こうすれば、今までのファイルは引き継がれる(ローカルのみ)ものの、過去の編集歴(ログ)も引き継がれないからブランチをつくれます。 この状態で、ローカルに存在するファイルをすべて削除し、自分の追加したいファイルのみを追加しコミットすれば、 masterとは隔離されたファイルブランチ(?)を作成できます。 しかし、この運用方法は本来のgit運用方法とは異なる気がします。 あくまで自分の認識なのですが、 gitでは、異なる開発者が同一ファイルを触る可能性があることを前提に作られており、 ブランチは異なる開発者がお互いのやりたいことをマージするためにあるものと考えています。 つまり、質問者さまのプロダクトを管理するには、 既に存在するプロダクトそのものをgitリポジトリとし、 全員で全ファイルを共有、編集の必要があれば、 必要のあるファイルを担当者ごとのブランチで操作し、pull requestという流れが良いかと思いました。 その方が、バックアップという観点からも良いかと思います。 しかし、権限であったり何らかの特別な事情があるようでしたら、 先ほどご提案させていただいた方法で、ブランチごとにファイル管理ができるかと思います。 以上です。 少しでもお力になれれば幸いです。