前の関連記事:Git(17)EclipseでGitのチュートリアルビデオ:その1
Git tutorial 2: Committing, pushing, pulling and resolving conflicts with git and Eclipse 4.5.1 - YouTube
一人しか開発者がいないとリポジトリの矛盾が起こりそうでないのですが、私の場合は職場と自宅のPCで開発していて、それぞれでマージする前のローカルリポジトリに手を入れてしまってコンフリクトすることがしばしばあります。
まず前回自宅のPCからプッシュしたGitHubのリモートリポジトリを職場のPCにクローンします。
GitHubのモートリポジトリをクローンする
EclipseをGitパースペクティブに切り替えます。
Git RepositoriesビューのClone a Git Repository and add the clone to this viewボタンをクリックします。
Clone URIを選択してNext。
GitHubのhellogitリポジトリのURLをペーストします。
AuthenticationにはGithubのユーザー名とパスワードを入力します。
Next。
リモートリポジトリのmasterブランチが選択されているのでNext。
前回GitHubにプッシュしたリポジトリにはPyDevプロジェクトの設定も含めたのでImport all existing Eclipse projects after clone finishesにチェックをつけてFinish。
これでリモートリポジトリのクローンだけでなく、ローカルリポジトリからPyDevプロジェクトをPyDev Package Explorerに取り込んでくれます。
PyDevパースペクティブに切り替えてPyDev Package Explorerをみるとちゃんとhellogitプロジェクトが表示されています。
インタープリターが見つからないとエラーがでているので、インタープリターを設定し直します。
hellogitプロジェクトを右クリック→Properties。
PyDev - Interpreter/Grammar。
Click here to configure an interpreter not listed.をクリック。
New→Browseで/usr/python3を選択。
Selection neededにでてくるものはすべて選択したままOK。
これでInterpreterとして/usr/python3が選択できるようになりました。
OK。
プロジェクトのプロパティ画面に戻ってきたらInterpreterとして/usr/bin/python3を選択してOK。
printが何故かundefind variableと言われてエラーがでていますが、Eclipseを再起動したらエラーが消えました。
多分Eclispeの再起動までしなくても、File→Refreshでエラーが消えると思います。
hellogit.pyを書き換えてGitHubにプッシュする
names = ["Bilbo","Frodo","Aragorn","Leglas","Gandalf"] # print greetings for i in range(0,len(names)): print("Hello, {}".format(names[i]))helllogit.pyの内容をこのコードに書き換えて保存しました。
PyDev Package Explorerでみるとファイル名の前に「>」がついているのがわかります。
これはまだローカルリポジトリに反映されていない内容があることを示しています。
コミットして編集した内容をローカルリポジトリに反映させます。
PyDev Package ExplorerでPyDevプロジェクトを右クリック→Team→Commit、でもできますが、階層が深くて面倒なので、まずGitパースペクティブに切り替えます。
Git Repositoriesビューでhelllogitリポジトリを右クリック→Commit。
hellogit.pyをUnstaged ChangesからStaged Changesへドラッグして、Commit MessageをrenewalとしてCommitしました。
Localのmasterのハッシュ値がRemote Trackingと異なった47bfea1に変化したことがわかります。
Git RepositoriesビューでLocalのmasterを右クリック→Push branch。
これでRemote TrackingとLocalのハッシュ値が同じ47bfea1になりました。
GitHubでhelllogit.pyを見てみるとhellogit.pyの編集内容が反映されていることがわかります。
GitHubのリポジトリに直接コミットする
チュートリアルビデオではworkspaceを違えたEclipseを二重起動して、二人の開発者が矛盾したリポジトリをプッシュする状況を作っていますが、それは面倒なので今回は直接GitHubのリポジトリを編集して競合する状況を作ります。
まずGitHubにあるリモートリポジトリのhellogit.pyを編集します。
hellogit/hellogit/src/hellogit.pyのEdit this fileボタンをクリックします。
names = ["Bilbo","Frodo","Aragorn","Leglas","Gandalf"] # print greetings to the fine folks in the Middle Earth for name in names: print("Hello, {}".format(name))2行目と3行目を書き換えました。
編集画面の下にあるCommit changesの欄のCommit Messageにconverted for loopと入力しCommit changesボタンをクリックしました。
これでGitHubのリポジトリにコミットできました。
リモートリポジトリとコンフリクトするようにローカルリポジトリにコミットする
Eclipseでhellogit.pyを以下のように編集して保存しました。
names = ["Bilbo","Frodo","Aragorn","Leglas","Gandalf","Boromir","Faramir"] # print greetings for i in range(0,len(names)): print("Hello, {}".format(names[i])) print("How are you doing today?")Git Repositoriesビューでhellogitリポジトリを右クリック→Commit。
hellogit.pyをStaged Changesに移動させ、Commit Messageにadded a print out and two new charactersと入力してCommit。
Localのmasterブランチのハッシュ値が47bfea1から3ae7f92に変化しました。
Git Repositoriesビューでhellogitリポジトリを右クリック→Show In→History、とするとローカルリポジトリのコミットグラフがHistoryビューに表示されます。
GitHubのリモートリポジトリの状態をEclipseに反映させる
Remote Trackingのorigin/masterブランチのハッシュ値が47bfea1と変わっていないのでまずGitHubにあるリモートリポジトリのハッシュ値を取得します。
Git Repositoriesビューでhellogitリポジトリを右クリック→Fetch from Upstream。
Remote Trackingのorigin/masterブランチのハッシュ値が861da92に変わり、コミットメッセージもGitHubで直接コミットしたメッセージが反映されています。
Git Repositoriesビューに反映されていないときはRefreshボタンをクリックします。
リモートリポジトリのコミットグラフを見るにはまずリモートリポジトリをチェックアウトする必要があります。
Git RepositoriesビューのRemote Trackingのorigin/masterブランチで右クリック→Checkout。
リモートリポジトリのブランチにチェックアウトしたので、このブランチを編集したいのなら新しいブランチを作成するように言われます。
しかし今回はブランチの状態を確認するだけなので、 Checkout Commitボタンをクリックします。
Headは見せかけのものなのでコミットしないように注意を促されます。
OK。
Localのmasterブランチにあったレ点がRemote Trackingのorigin/mastarブランチに移動していることがわかります。
この状態でhellogitリポジトリを右クリック→Show In→History、とするとリモートリポジトリのコミットグラフがHistoryビューに表示されます。
確認が終わったら、 Git RepositoriesビューのLocalのmasterブランチで右クリック→Checkoutとするかmasterブランチをダブルクリックして、ローカルリポジトリのぶらんちをチェックアウトして元に戻しておきます。
ローカルリポジトリとリモートリポジトリをマージする
Git Repositoriesビューでhellogitリポジトリを右クリック→Merge。
Localのmasterブランチにマージするブランチを選択するとMergeボタンがクリックできるようになります。
Merge optionsとFast forward optionsはとりあえずこのままMergeボタンをクリックしました。
狙い通りコンフリクトしました。
<<<<<<< HEAD names = ["Bilbo","Frodo","Aragorn","Leglas","Gandalf","Boromir","Faramir"] # print greetings for i in range(0,len(names)): print("Hello, {}".format(names[i])) print("How are you doing today?") ======= names = ["Bilbo","Frodo","Aragorn","Leglas","Gandalf"] # print greetings to the fine folks in the Middle Earth for name in names: print("Hello, {}".format(name)) >>>>>>> refs/remotes/origin/masterエディタをみるとコンフリクトしている内容が表示されました。
======のある8行目より上がローカルリポジトリの内容、下がリモートリポジトリの内容になっています。
チュートリアルビデオでは2行目のリストのnamesはローカルリポジトリのコミットしか操作していないのでコンフリクトしていないと言っていますが、今回はコンフリクトの内容に含まれていますね。
コンフリクトを修正してコミットする
チュートリアルビデオではコンフリクトの修正をこのまま直接手動でしていますが、今回は手助けしてくれるマージツールを使ってみます。(EclipseでGitを使う(6)マージツールを使う。 | TECH Projin)
hellogit.pyのエディタ画面で右クリック→Team→Merge Tool。
左右に相違部分を表示してくれます。
左がローカルリポジトリの内容、右がリモートリポジトリの内容になります。
ボタンひとつで左側から右側にコードをコピーできるのですが、今回はそのままもっていけるところはなさそうなのでビデオの通り手で直しました。
names = ["Bilbo","Frodo","Aragorn","Leglas","Gandalf","Boromir","Faramir"] # print greetings to the fine folks in the Middle Earth for name in names: print("Hello, {}".format(name)) print("How are you doing today?")この通りに修正したら保存してCommitします。
hellogit.pyをUnstaged ChangesからStaged Changesに移動させるとCommit Messageの内容が自動的に入力されました。
そのままCommit。
マージした内容をリモートリポジトリにプッシュする
コミットによってマージした内容がLocalのmasterに反映されていることがわかります。
Historyビューをみると分岐していたコミットグラフがまた一つになっていることがわかります。
origin/masterブランチの先頭はまだ2つ前のコミットにあります。
Git Repositoryビューで、Localのmasterブランチを右クリック→Push Branch。
これでmasterとorigitn/masterが同じコミットの位置に揃いました。
参考にしたサイト
Git tutorial 2: Committing, pushing, pulling and resolving conflicts with git and Eclipse 4.5.1 - YouTube
masterブランチとorigin/masterブランチのマージのチュートリアルビデオ。
EclipseでGitを使う(6)マージツールを使う。 | TECH Projin
マージツールを使うと相違点を左右に表示してくれます。
0 件のコメント:
コメントを投稿