4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Make ITAdvent Calendar 2018

Day 22

Git(Hub) Private Repository 作成からConflict解消まで[学生初心者向け](後編)

Posted at

Make IT Adventcalendar 22日目です。@moya0423が担当します。
この記事はGit(Hub) Private Repository 作成からConflict解消まで学生初心者向け(前編)の続きとなります。
まだ読んでいない方はこちらから読んでいただけると幸いです。

##リポジトリ関連・用語解説

master(マスター)やbranch(ブランチ)・push(プッシュ)など分からない用語が増えてきたので用語解説をします。

###Git cloneとは

git cloneとはリモートリポジトリ(共有セーブデータ)を丸ごと自身のローカルリポジトリ(個人セーブデータ)に持って来て保存するよ という命令文です。
文字だとイメージが付きにくいので実際にcloneしてみましょう。
キャプチャ.PNG
Githubにあるリモートリポジトリから早速cloneしてみます。 画面右側にあるClone or DownloadからコードをコピーしてGit-Bashに貼り付けます。
cloneするコマンドは以下の通りです。

$ git clone "Githubからコピーしてきたコード"

キャプチャ.PNG
実際にcloneした結果です。リモートリポジトリにあるファイルが全てローカルリポジトリに送信・保存されている事が確認できます。
###add/commitとは
$ git addとはインデックスにファイルを追加するためのコマンドです。
$git commitとはインデックスに追加されているファイルをコミット(個人セーブデータにセーブ)するためのコマンドです。
インデックス?コミット?とはなんぞやって話ですが文字だけでは説明が難しいので画像を交えて説明します。アートボード 1.png
Gitの管理下で実際に作業しているファイル/フォルダのことをワークツリーと呼びます。
Gitではワークツリーとリポジトリの間にインデックスが存在しています。
このインデックスでは$git addされたファイルを保持します。
インデックスに保持された内容からリポジトリにコミット(個人セーブデータにセーブ)します。

###push/pull/fetch/mergeとは
アートボード 3.png

####pull(プル)とは
リモートリポジトリ(共有セーブデータ)からデータをローカルリポジトリに送り込み、送り込んだデータをローカルリポジトリに反映させる(書き込む)処理です。

####push(プッシュ)とは
ローカルリポジトリにコミット(セーブ)されたファイル/フォルダをリモートリポジトリ(共有セーブデータ)にデータを送り込む処理です。pushの対はpullだと思われがちですが、正確にはfetchが対です。

####fetch(フェッチ)とは
リモートリポジトリ(共有セーブデータ)のファイル/フォルダをローカルリポジトリ(個人セーブデータ)にデータを送り込む処理です。

####merge(マージ)とは
pushやfetchされたデータを送信先へ取り込む・ブランチを統合する処理のことです。 直訳すると併合や合併です。

##branch(ブランチ)とは

アートボード 5.png

直訳すると枝・支流です。
枝分かれさせることを「ブランチを切る」と言います。
ブランチには並行して別の作業を進める。
特定の課題を解決するためのブランチ(トピックブランチ)など使い方は多岐に渡ります。
画像のように中年ちゃんからブランチを切り、Aでは仕事をしている中年ちゃんを、Bでは筋トレをしている中年ちゃんを。のように中年ちゃんを分身させ別の作業を同時に進めるイメージです。
またmerge(結合)することによって「筋トレもして仕事もした中年ちゃん」を作成することが出来ます。

##早速リポジトリ操作からコンフリクト解消まで

実際にリポジトリの操作からコンフリクト解消までしていきます。

アートボード 1.png

リモートリポジトリからcloneした後に差分ファイルをリモートリポジトリから持ってきます。
リモートリポジトリから二通りの方法でファイルを持っていきます。
A君はpull,Bちゃんはfetchした後にmergeをします。

持ってきたいファイルはhuman.txtです。
早速A君がPullしたようです。
$git pull
キャプチsャ.PNG

human.txtがワークツリー内に入っていることが確認出来ます。
git pullはデータを受け取った後に、そのデータを取り込む処理です。 すなわち fetchした後にmergeをしています。続いてBちゃんもデータを取り込んだようです。
キャプチャss.PNG

#$ git fetchでリモートリポジトリから差分データを受け取った後に
$ git diffでローカルリポジトリと最新データとの差分を確認しています。
「human.txtが追加されていて、中身はこんな内容ですよ」 と表示されているのが確認できます

これを確認した後に$ git merge origin/masterで最新データをローカルリポジトリにmerge(合併)させているのが確認出来ます。
A君もBちゃんもやっていることは同じです。 A君の場合は、データを受け取り、その後すぐにデータをcommitしているので、持ってきたくないファイルもマージしてしまう恐れがあります。 git pullするときは慎重にしましょう。

##conflict(競合)とは
「衝突」とも言われています
マスター側と別のブランチ、別のブランチ同士で同じファイルの同じ部分を変更した時に、どっちをマージすればいいのか分からなくなってしまいます その時の事象を「コンフリクト」と呼びます。
アートボード 10.png

###解決方法その1
競合している部分を削除する。
108a7efc5c55d595599593a373842f04 (1).png

========で挟んだ上と下の部分が競合を起こしているところです。
どちらをマージするべきか吟味した上でどちらかを消して競合を解決しましょう。

###解決方法その2

1200px-Star_wars2.svg.png

force(フォース)のちからを利用する
git push -f *非推奨

git push -fでgit pushを強制出来ます。
競合先を強制的に上書きされてしまうので、あまりおすすめできません

#最後に
Calendarの概念をぶち壊す勢いで期限が過ぎてしまいました 過ぎた割に雑
しっかり勉強した上で前後編合わせて編集して行く予定です。
間違いだらけだと思われますのでご指摘をいただけると幸いです。
読んでくださってありがとうございました。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?