2016-12-30 5 views
3

gitに精通している人なら、repoとブランチの違いを理解するのに役立ちます。私は最近gitに紹介されており、それらを理解するのに少し時間がかかります。ローカルのボックスにリモートのレポ(たとえばfoo)をクローンするように指示されました。次に、そこからローカルブランチを作成します。ブランチ上で作業(ファイルの更新/作成/削除)し、リモートサーバ(bitbucketなど)に追加/コミット/プッシュします。目の2番目のセットの後に支店を見直し、okと言う。その後、開発またはマスターブランチにマージされます。gitのリポジトリとブランチの違いは何ですか?

次に、リポジトリはこの画像でどのような役割を果たしますか?私に実行したすべての操作はブランチに対してです...

+1

レポには複数のブランチが含まれています - あなた自身が言ったように、ブランチを追加* –

+0

私のダウンワードではありません。リモートブランチが生きる場所としてレポを考えることができます。ローカルブランチはすべての作業を行い、ローカルブランチはリモートブランチと同期します。 –

答えて

6

レポジトリは、コンピュータで複製するプロジェクト全体(ディレクトリとファイル)です。 A ブランチは、バージョンです。

リポジトリには複数のブランチがあります(複数のバージョンのリポジトリがあり、複数の機能が並行して開発されています)。結局あなたのコードをバージョン管理する目的は、異なる時間に進化したプロジェクトの複数の側面を扱うことができることです。ブランチ。 Gitは "作業ツリー"(作業台を表す)という表現を "枝"と一緒に使用します。画像でいっぱいですね。

関連:differences between local and remote branchesを知りたい場合。

枝に対処するためのあなたの方法に関する

:私の地元のボックスに

クローンリモートレポ(例えばFOO)。次に、そこからローカルブランチを作成します。ブランチ上の作業(更新/作成/削除)とリモートサーバへの追加/コミット/プッシュ

これはgitでうまくやっています。私はいつもこのように進んでお勧め:

----A---B---C--  (REMOTE, master) 

      | 
      |  (Pull to local : `git pull origin master`) 
      v 

----A---B---C--  (LOCAL, master) 

その後、ローカルのマスター(git checkout -b branch1)からの作業をブランチを作成して、変更をコミットし、リモートにプッシュ:

----A---B---C------  (REMOTE, master) 

----A---B---C---D--  (REMOTE, branch1) 

      ^
       | 
       |  (Push to remote : `git push origin branch1`) 

----A---B---C------  (LOCAL, master) 
      \ 
       D----  (LOCAL, branch1) 

そして、あなたあなたの機能/修正/何にでも喜んで、branch1masterにマージすることができます。

2

Gitでは、リポジトリはプロジェクト全体を参照します。 1つのGitリポジトリ内に、少なくとも1つのbranchがあります。 git branch newFeatureを使用すると、リポジトリ内に新しいブランチを作成して、特定の新しい機能に関連するコードベースの変更に対する変更を追跡できます。

いつでもリポジトリをクローンすると、ローカルマシン上にプロジェクトリポジトリのコピーが作成されます。また、git pullには、他の開発者がパブリックリポジトリにプッシュした変更があります(詳細はherehereをご覧ください)。

2

リポジトリには、すべての変更の履歴など、プロジェクトに関するすべての情報が含まれています。各変更は、「コミット」の形でリポジトリに入力されます。

ブランチとリポジトリの違いを示すために、私が述べたプロセスを説明し、ブランチとリポジトリの使用方法を指摘します。これはgitチュートリアルではなく、ブランチとリポジトリについて話すことができます。

通常、ユーザーはコピーを取得し、変更を送信できるリモートリポジトリが存在します。実際の開発作業はリモートリポジトリでは直接実行されません。

ユーザーはリモートリポジトリの最初のコピーをクローンとして取得します。これにより、ユーザーマシン上にローカルリポジトリが作成されます。ローカルリポジトリは、リモートリポジトリの完全なコピーです。

ブランチは、単にリポジトリ内のコミットの1つを指すポインタです。 最も単純なケースでは、 "master"というデフォルトのブランチがあり、masterは最新のコミットを指しています。 各コミットは番号で識別されます。これはその時点でのレポのハッシュです。たとえば、この場合、マスタはコミットを指すことがあります。

2d2cd6cf6f634e88ad19fa454fdcd2e1c26009c7 

開発者は、リモートリポジトリとチェックアウトブランチマスタを複製できます。 次に、開発ブランチを作成してチェックアウトします(featureX-devなど)。

git checkout -b featureX-Dev 

この時点で、両方のブランチ(masterとfeatureX-Dev)は同じコミットを指しています。 ファイルを変更します。 ブランチfeatureX-devのローカルコピーへの変更をコミットします。 ローカルリポジトリのfeatureX-Devブランチは、masterよりも新しいコミットを指します。 分枝featueX-devをリモートリポジトリにプッシュして、レビューできるようにします。

git push -u origin featureX-dev 

-uは、ブランチをリモートにプッシュしてgitにこのブランチを追跡させたいときに初めて使用されます。

他の開発者(リモートリポジトリを既にクローンしている)は、pullを実行することによって、リモートリポジトリからfeatureX-devブランチを取得できます。

それを確認してOKだと伝えたら、featureX-devブランチをローカルリポジトリのmasterのコピーにマージし、masterをプッシュできます。

お待ちください!既に他の開発者がリモートマスターに変更をプッシュした場合はどうなりますか?あなたの地元のレポで

あなたのチェックアウトマスター

git checkout master 

は、あなたが彼らの最後に新しい誰かが行われた変更、およびマスターポイントがコミット持つリモート

git pull origin master 

からマスターを引きます。 今、あなたは誰がマスターを変更していない場合に行わ害がないマスター

git merge featureX-dev 

のローカルコピーにあなたのdevのブランチをマージすることができます。マージは、コミットをマスターブランチに追加するだけです。 作成されている場合は競合を解決し、マスターをリモートに戻します。

+0

ランディ・リーバーナイト、返信いただきありがとうございます。あなたの詳細な返信は、私が学んできたプロセスの理解を確実に固めます。恵まれた一日を! – DaeYoung

関連する問題