リポジトリ共有時のトラブル解決
#22 共有時のトラブルを解決する
http://dotinstall.com/lessons/basic_git/6722
を参考に、
共有ゆえに起こるトラブルの解決方法の学習
これは共有であるために起きるトラブルとして
ありえるのが
ユーザBが編集し commit までしたことを知らず
ユーザAが同じ場所を編集し
このためコンフリクトが発生して
エラーがでる
というもの
とりあえず、実践したほうがわかりやすかったので
cd ~/myweb2/
で
ディレクトリを移動して
vim index.html
で最終行へ
share test
と記述して保存
git add.
git commit -m “share test added”
git push origin master
で変更した内容を共有リポジトリに送ります
ここまでは問題なしです
次に、ユーザA体験をします
cd ~/myweb
で移動して
vim index.html
で
share start !
と追記して保存します
そして、今回は git add と git commit を同時に行います
git commit -am “shared start”
というように
git commit のオプションに
-am
をつけるだけです
実際に git commit までできているか確認するには
git log
とすれば
commit 2a08e46f36ed7d10a431adc6fdf227548212902c
Author: snowpool
Date: Fri May 31 21:33:01 2013 +0900
shared start
というように、無事に commit されているのが
確認できます
ここまでは問題ないのですが
ここから共有リポジトリに送ろうとすると
エラーで止まります
git push origin master
を実行すると
To /home/snowpool/ourweb.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to ‘/home/snowpool/ourweb.git’
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. ‘git pull’)
hint: before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.
となり、エラーがおきて先にすすめません
hint: its remote counterpart. Merge the remote changes (e.g. ‘git pull’)
とあるように、
先に git pull するように促されます
この場合、
git push origin master
を実行します
修正箇所が異なっている分には問題があまりないのですが
修正箇所が同じ場合コンフリクトが発生します
このため、修正することが必要になります
今回、 vim index.html でファイルを開くと
以前、コンフリクトの修正をしたときのように
line 1st
line2
line3
line end
<<<<<<< HEAD
share start!
=======
share test
>>>>>>> c11d37315a0378907809998e842de7b1a59ffbde
となっているので、
line 1st
line2
line3
line end
share start!
というように修正し、保存します
あとは、インデックス化とコミットを両方一気に行うので
git commit -am “conflict fixed”
そして再び
git push origin master
を実行すると、無事に実行できます
このように、共有リポジトリの場合
git push
git pull
を多用することになりそうです
あと、Git サーバー – プロトコルがあって
Local
SSH
Git
HTTP/S
といったプロトコルが使えます
それぞれ利点、欠点がありますので
用途により使い分けすることになると思います
プロトコルに関しては
Git サーバー – プロトコル
に詳細がかかれています