fc2ブログ

リポジトリ共有時のトラブル解決

リポジトリ共有時のトラブル解決

#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 サーバー - プロトコル

に詳細がかかれています
スポンサーサイト



テーマ : Linux
ジャンル : コンピュータ

git のリポジトリ内容の共有

git のリポジトリ内容の共有

#21 リポジトリの内容を共有してみよう
http://dotinstall.com/lessons/basic_git/6721
をもとに、
複数ユーザでの内容の共有について学習

今回は、共有リポジトリの内容を
myweb2
というディレクトリの中に作成する

これには
git clone
を使う

git clone ~/ourweb.git/ myweb2
と実行すると

Cloning into 'myweb2'...
done.
となり、
新しく myweb2 というディレクトリが作成され
その中にリポジトリも作成されている

書式としては
git clone 共有リポジトリのURL 新しいディレクトリ
というかんじになる

内容ができているか、確認するには
cd myweb2/
git log
で確認できる

そして、今度は、myweb2 の中でファイルを編集して
それを 共有リポジトリに追加する
vim index.html
でファイルを開いて
line end
と追記して保存

git add .
でインデックス化

git commit -m "line end added"
でリポジトリ登録


git clone したときに、リモート情報も
引き継ぎできているので
git push で共有リポジトリに追加することができる

今回なら
git push origin master
とすれば、URLの指定をせずに、そのまま送ることができる
これは、リモート情報も引き継ぎしているため


とりあえず、ユーザB役での編集などはできたので
今度は
ユーザA役の myweb ディレクトリで操作する
Linux なら端末を
Ctrl + Alt + t で開けるので
新しい端末を開いて
cd myweb/
で移動

共有リポジトリの内容をマージするには
git pull
を使う

でも、違いを理解するために
まずは git log で内容の確認

commit 0180f5a3844aa7df2cb4c231f03df5e61f36efe9
Author: snowpool
Date: Thu May 30 20:51:12 2013 +0900

line3 added
が最新の内容

確認したら、 git pull で内容を共有リポジトリから引っ張ってくる
今回なら
git pull origin master
とする

これで、git log で内容を確認すると

commit b3c348a6f9fa5416831020ad5649fbdf09050acc
Author: snowpool
Date: Fri May 31 20:57:41 2013 +0900

line end added

とでているので、
ユーザB役の myweb2 ディレクトリで編集したものも
しっかりと反映されていることが確認できる


これらのことから、
git clone で共有リポジトリを作成

git push で編集した内容をアップする

git pull で編集された内容をダウンロードして編集する

というような流れで複数の人による共同開発が可能となる

もっとも、複数人数での開発以外にも
git サーバーを構築して
自分の複数マシンでソースを共有することで
外出先でもソースの編集を容易にするという使い方もできるので
git 関連をやっておくと便利だと思う

テーマ : Linux
ジャンル : コンピュータ

SQLite について

SQLite について

SQLiteの公式サイトは
http://www.sqlite.org/

軽量DBでスマホなどで使われる

リファレンスとしては
http://www.sqlite.org/lang.html
が参考になる

インストールされていて
バージョン確認したいときには
sqlite3 -version
とすれば、バージョンがでる

私の場合は
3.7.11
でした

ダウンロード&インストールは
http://www.sqlite.org/download.html
に解説があります

sudo apt-get install sqlite3
でubuntu はインストールできます

インストールについては
UbuntuにSQLite3をインストールして使ってみた。
http://javastring.blog55.fc2.com/blog-entry-48.html
を参考にさせていただきました

テーマ : Linux
ジャンル : コンピュータ

git の共有リポジトリの設定

git の共有リポジトリの設定

#19 はじめての共同作業
http://dotinstall.com/lessons/basic_git/6719
を参考に
git での共有リポジトリを作成

これを使い、後々複数人で共同作業できるようにする予定
これを使えば、他の人とソースを共有して開発ができる


共有リポジトリは、本来ならネットに公開して使うもの

.git と名前を付ける

今回は ourweb.git という名前にする

今回は
ユーザAが myweb ディレクトリ
ユーザBが myweb2 ディレクトリで作成している状態

まず、共有ディレクトリにするために
mkdir ourweb.git

ourweb.git というディレクトリを作成する

cd ourweb.git
でディレクトリを移動して
共有リポジトリを作成する

共有リポジトリを作成するには
git init --bare
とする

--bare オプションをつけることで
これにより管理ファイルだけの管理となり
ここでは commit などをしないようになる

とりあえず、共有の設定はできたので
さっきまで作業していたディレクトリへ移動する
cd ../myweb

これでユーザA役のディレクトリに移動したので

#20 共有リポジトリにpushしてみよう
http://dotinstall.com/lessons/basic_git/6720
を参考にすすめていく

まずは、共有のリポジトリを登録するので
別のリポジトリを登録する
git remote
を使う

追加には add をつけるので
git remote add origin ~/ourweb.git
となる

書式としては
git remote add origin gitのパス
となる
git のパスは http:// というようなURLでもOK

git config -l
で状態確認できるので
ここで remote.origin のURLの確認もできます

core.editor=vim
alias.co=checkout
alias.st=status
alias.br=branch
alias.ci=commit
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.url=/home/snowpool/ourweb.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*

が実行結果で
remote.origin.url=/home/snowpool/ourweb.git
がURLとなります

もし、削除したいのなら
git remote rm origin gitのパス
で削除も可能

ここまでで設定ができたので
master ブランチの内容を
共有リポジトリにいれる

これは
git push origin master
とすればできる

成功すると
Counting objects: 20, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (20/20), 1.76 KiB, done.
Total 20 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (20/20), done.
To /home/snowpool/ourweb.git
* [new branch] master -> master
というメッセージがでてくる

転送の書式は
git push origin ブランチ名

テーマ : Linux
ジャンル : コンピュータ

git で短縮名のエイリアスを使う

git で短縮名のエイリアスを使う

#18 エイリアスを使ってみよう
http://dotinstall.com/lessons/basic_git/6718
を参考に
エイリアスについて学習

これは git のコマンドを短縮名でつかうというもの

例えば
git checkout
これを短縮したいなら
git config --global alias.co checkout
とする

これと同様に
status
branch
commit
これらも短縮で使えるように登録しておく

git config --global alias.st status
git config --global alias.br branch
git config --global alias.ci commit

こうしておくことで
bit branch を
git br
で行うことができる

Linux の場合、Tab キーによる補完機能を使えば
ある程度は楽できるけど
このエイリアスを設定することでよりやりやすくできる

設定したエイリアスについては
git config -l
とすることで確認が可能

私の環境の場合だと
core.editor=vim
alias.co=checkout
alias.st=status
alias.br=branch
alias.ci=commit
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
となっています

テーマ : Linux
ジャンル : コンピュータ

git でのタグ

git でのタグ

git をわかりやすくするためのタグについて学習
参考サイトは
#17 タグを使ってみよう
http://dotinstall.com/lessons/basic_git/6717

git のタグは
git commit したときのID

commit cce3862b9c30a544c772e675ccd5f6a98e345022
というような数字の羅列ではわかりにくいので
これをわかりやすくするために
タグを使う

まずは、実践したほうがわかりやすいので
vim index.html
で最後に
line3 を追記して保存

そして
git add .
git commit -m "line3 added"
でリポジトリ作成

これで git log で確認すると

commit 0180f5a3844aa7df2cb4c231f03df5e61f36efe9
Author: snowpool
Date: Thu May 30 20:51:12 2013 +0900

line3 added

が追加されているのを確認できる

今回は、まずここへ version 1.0 というタグをつける

直近の commit に対してタグを付けるには
git tag v1.0
というようにする

書式は
git tag タグ名

また
git tag
とすれば、タグの一覧をみることができる

また、タグを付けることで
タグからcommit 内容をみることも可能

git show v1.0
というように
git show タグ名
とすれば

commit 0180f5a3844aa7df2cb4c231f03df5e61f36efe9
Author: snowpool
Date: Thu May 30 20:51:12 2013 +0900

line3 added

diff --git a/index.html b/index.html
index fc3bbf4..705cd1f 100644
--- a/index.html
+++ b/index.html
@@ -1,2 +1,3 @@
line 1st
line2
+line3
というように、タグをつけた commit の内容をみることができる

タグ名は git tag で確認できる

git tag タグ名は、直近の commit だけで
もっと前のものにもタグをつけたいのなら
git tag タグ名 commitのID
とする
commit のIDは、全部ではなく
最初から7行ぐらいまででOK

例えば
commit 0180f5a3844aa7df2cb4c231f03df5e61f36efe9
のIDのところに v0.9 としたいのなら

git tag v0.9 0180f5a3844aa7

というようにする
これで、git tag
とすれば
v0.9
v1.0
となる

あとかた追加したタグでも
git show v0.9
とすることで

commit 0180f5a3844aa7df2cb4c231f03df5e61f36efe9
Author: snowpool
Date: Thu May 30 20:51:12 2013 +0900

line3 added

diff --git a/index.html b/index.html
index fc3bbf4..705cd1f 100644
--- a/index.html
+++ b/index.html
@@ -1,2 +1,3 @@
line 1st
line2
+line3

というように、問題なく追加できる

また、タグを削除したいときには
git tag -d v0.9
というように
git tag -d タグ名
とすれば消す事ができる

成功すると
Deleted tag 'v0.9' (was 0180f5a)
というようなメッセージがでる


消えているか確認するには
git tag
で一覧がでるので、ここからなくなっていれば消去成功

テーマ : Linux
ジャンル : コンピュータ

マージの衝突を解決

マージの衝突を解決

#15 マージの衝突を解決してみよう (1)
http://dotinstall.com/lessons/basic_git/6715
を参考に
マージの衝突を解決する

新しくブランチをつくって
さらに、そのブランチに移動する
つまり checkout まで行うには
git checkout -b hogehoge
というようにすればOK

書式としては
git checkout -b ブランチ名
となる

確認のため
git branch とすると
hoge
* hogehoge
master
となっていて
作成した hogehoge に移動しているのが確認できる


ここからは git のマージの衝突を実行
vim index.html
でファイルを
line1 から line first へ変更して保存

git add .
でインデックス化して

git commit -m "not 1 but fitst"
とすることで
vim を起動せずにリポジトリに保存

ここまではいままでと同じ

ここからが衝突
まず、ブランチを hogehoge から master に変えるので
git checkout master

そして、 vim index.html で編集
中身は、ブランチごとにわけられているので
line1
をmaster のほうでは
line 1st
と変更して保存

そして、同じように
git add .
git commit -m "not 1 but 1st"
と実行

この状態でマージすると衝突が発生する
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

このように、問題発生して
解決しないと git commit できないという状況になる

この解決方法が動画で紹介されているのが
#16 マージの衝突を解決してみよう (2)
http://dotinstall.com/lessons/basic_git/6716
のほう

現状をまずは git status で確認

# On branch master
# Unmerged paths:
# (use "git add/rm ..." as appropriate to mark resolution)
#
# both modified: index.html
#
no changes added to commit (use "git add" and/or "git commit -a")
とメッセージがでて
修正を促される

このため、vim index.html でファイルを修正する

ファイルを開くと
<<<<<<< HEAD
line 1st
=======
line first
>>>>>>> hogehoge
line2
となっている

現在のブランチは master のほうで
<<<<<<< HEAD
line 1st
=======
が master のほう

line first
>>>>>>> hogehoge
line2
が hogehoge ブランチのほうで

このうちどちらかを残すか、もしくは修正することになる

今回は master のほうを残しておきたいので
修正するには
<<<<<<< HEAD
line 1st
=======
line first
>>>>>>> hogehoge
line2



line 1st
line2
というように、いらない部分を削除して保存

あとは git add .
git commit -m "confilict fixed"
というように、ふつうに git commit できるようになる

確認するには
git log

commit 734665444c30621d32b3800d56ffd1dcd5583201
Merge: 6379343 a989662
Author: snowpool
Date: Thu May 30 20:09:07 2013 +0900

confilict fixed

commit 637934389be80431ac468343f50129bb0a587018
Author: snowpool
Date: Thu May 30 19:57:21 2013 +0900

not 1 but 1st

commit a989662710cb5542428878d9de9028c89920c2f7
Author: snowpool
Date: Thu May 30 19:52:36 2013 +0900

not 1 but fitst

commit cce3862b9c30a544c772e675ccd5f6a98e345022
Author: snowpool
Date: Thu May 30 07:02:34 2013 +0900

script added

commit 1110869d4bef57d3502c434ad9f4a94c8633242f
Author: snowpool
Date: Wed May 29 20:55:00 2013 +0900

line2 を追加

commit 53d156650c331b31b33c8907f25527e61978dfcf
Author: snowpool
Date: Tue May 28 21:28:11 2013 +0900

initial commit
(END)
commit a989662710cb5542428878d9de9028c89920c2f7
Author: snowpool
Date: Thu May 30 19:52:36 2013 +0900

not 1 but fitst

以下略

というように
commit できているのが確認できる

テーマ : Linux
ジャンル : コンピュータ

git でブランチをマージする

git でブランチをマージする

#14 ブランチをマージしてみよう
http://dotinstall.com/lessons/basic_git/6714
を参考に
ブランチをマージする方法を学習

前回作成した hoge の中で作成した
myscript を
master のほうへ反映させたいときには

git merge
を使う

まず、 git checkout master
で hoge から master にブランチを移動する

次に
git merge hoge
とする

書式としては
git merge 取り込みたいブランチ名
というかんじ

結果に
Updating 1110869..cce3862
Fast-forward
myscript.js | 1 +
1 file changed, 1 insertion(+)
create mode 100644 myscript.js

とでて反映される

本当に反映されているか確認したいときには
git log
を実行して
commit cce3862b9c30a544c772e675ccd5f6a98e345022
Author: snowpool
Date: Thu May 30 07:02:34 2013 +0900

script added

commit 1110869d4bef57d3502c434ad9f4a94c8633242f
Author: snowpool
Date: Wed May 29 20:55:00 2013 +0900

line2 を追加

commit 53d156650c331b31b33c8907f25527e61978dfcf
Author: snowpool
Date: Tue May 28 21:28:11 2013 +0900

initial commit
というように、script added が追加されていることを確認できる

もし、作成した hoge が
もう機能を取り込んだので、不必要なので消したい
というときには
git branch -d hoge

このように、テスト環境のブランチを作成し
いらなくなったら
git branch -d ブランチ名
で削除する
というようにしていくことで、効率的な開発が可能になる

http://dotinstall.com/lessons/basic_git/6714

の補足情報に
ほかにもいろいろ載っているので
こちらも参考にしながら使っていこうと思います

テーマ : Linux
ジャンル : コンピュータ

git でブランチ

git でブランチ

#13 ブランチを使ってみよう
http://dotinstall.com/lessons/basic_git/6713
を参考に、ブランチを行ってみた

ブランチとは
分岐、枝分かれという意味

複数バージョンを平行して開発するときに使う

git branch
とすると
いまあるブランチ一覧がみれる
最初は
master
のみ

ブランチを作成するには
git branch ブランチ名
とする

今回は
git branch hoge

この状態で git branch すると
hoge
*master
というように2つになっている

master の横に*がついているけど
これは今いるブランチを示している

なので、hoge に移動する

移動するときには
git checkout ブランチ名

今回は
git checkout hoge
で成功すると
Switched to branch 'hoge'
と表示される

この状態で git branch で確認すると
* hoge
master
というように
hoge のほうに移動して*がついているのが確認できる

これにより、各ブランチごとに状態をわけることが可能
つまり、データベースに近い感覚
使うデータベースが ブランチ
中のテーブルとかが それぞれのバージョン
というかんじになる

試しに
vim myscript.js
を作成して、中身を
alert();
だけ記述して保存

git add .
git commit -m "script added"
で追加

git log
で確認すると
commit cce3862b9c30a544c772e675ccd5f6a98e345022
Author: snowpool
Date: Thu May 30 07:02:34 2013 +0900

script added

commit 1110869d4bef57d3502c434ad9f4a94c8633242f
Author: snowpool
Date: Wed May 29 20:55:00 2013 +0900

line2 を追加

commit 53d156650c331b31b33c8907f25527e61978dfcf
Author: snowpool
Date: Tue May 28 21:28:11 2013 +0900

initial commit
となっている

この状態から
master のほうへ戻りたいときには
git checkout master
を実行

そして、 git log を実行して状態を確認してみると

commit 1110869d4bef57d3502c434ad9f4a94c8633242f
Author: snowpool
Date: Wed May 29 20:55:00 2013 +0900

line2 を追加

commit 53d156650c331b31b33c8907f25527e61978dfcf
Author: snowpool
Date: Tue May 28 21:28:11 2013 +0900

initial commit

というように、
hoge のほうでは追加した script added
が入っていないことが確認できる

web 開発をするときに最初にベースを作って
そこから派生して作成するというときに便利

テーマ : Linux
ジャンル : コンピュータ

git reset の取り消し方法

git reset の取り消し方法

#12 過去のバージョンに戻ってみよう (2)
http://dotinstall.com/lessons/basic_git/6712
を参考に
git reset の取り消し方法を学習

前回の状態が
ORIG_HEAD に保存されているため

git reset を実行した状態から
前回の状態に戻したいのなら

git reset --hard ORIG_HEAD
とする
これで

line1
だけの現状から
line1
line2
となっていた1つ前のファイル状態へ戻ることができる

テーマ : Linux
ジャンル : コンピュータ

git で過去バージョンへ戻す方法

git で過去バージョンへ戻す方法

#11 過去のバージョンに戻ってみよう (1)
http://dotinstall.com/lessons/basic_git/6711
を参考に過去バージョンに戻す方法を学習

バージョン管理システムの便利なのは
過去に戻って変更点をなかったことにできること

vim index.html
でファイルを編集
まず
line1
line2
となっているので
line3
を最終行に追記

git add .
でインデックス化

本来なら、git commit するけど
これを git log をみて直前の状態に戻したい場合には
git reset
を使う

一気に戻したいときには
オプションの
--hard を付ける

今回は何回か commit を繰り返しているけど
直前の commit 状態まで戻したいなら
HEAD を使う
オプションまでつけたコマンドは
git reset --hard HEAD
となる

現在の変更したindex.html は
line1
line2
line3

これを
git reset --hard HEAD
を実行すると
HEAD is now at 1110869 line2 を追加

と表示され
前回の commit 状態である
line1
line2

に戻っている

2つ前の状態まで戻したいのなら
git reset --hard HEAD^
というように
^ を追記する

また、もっとさらに前に戻したいのなら
git log で履歴をだして

commit 1110869d4bef57d3502c434ad9f4a94c8633242f
となっている部分の cpmmit ID を指定すればいい

今回は、もっと前の状態まで戻したいので
commit 53d156650c331b31b33c8907f25527e61978dfcf
のところまで戻してみた

git reset --hard 53d156650c

IDは全部いれずに最低最初から7ケタあれば十分

あとは、中身を確認すると
cat index.html
line1

というように、最初の状態まで戻すことができる

テーマ : Linux
ジャンル : コンピュータ

git の直前のコミットの変更

直前のコミットの変更

#10 直前のコミットを変更する
http://dotinstall.com/lessons/basic_git/6710
を参考に
コミットについて学習

すでに、前回
git add .
でインデックス状態なので
git commit
を実行するけど、一行しかコメントをつけないのなら
fit commit -m "line2 を追加"
というようにすれば
commit できる

実行結果は
[master f754810] line2 を追加
Committer: snowpool
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

git config --global user.name "Your Name"
git config --global user.email you@example.com

After doing this, you may fix the identity used for this commit with:

git commit --amend --reset-author

2 files changed, 2 insertions(+)
create mode 100644 .gitignore

結果を確認するため
git log
とすると

commit f7548100f0a9eedc4fee017f677ca19bfc5cd1cb
Author: snowpool
Date: Wed May 29 20:55:00 2013 +0900

line2 を追加

commit 53d156650c331b31b33c8907f25527e61978dfcf
Author: snowpool
Date: Tue May 28 21:28:11 2013 +0900

initial commit

となり、
入力したコメントが反映されている

書式としては
git commit -m "メッセージ"
となる

あと git commit したファイルの修正について
これは
vim index.html
で編集して
git add .
で再びインデックス化

そして
git commit --amend
と実行する

すると vim がたちあがり
コメントを変更するかどうか聞かれるので
:wq
でそのまま保存

これで余計に commit を増やさずに
変更を保存できる

ちなみに、git log で確認した結果は
commit 1110869d4bef57d3502c434ad9f4a94c8633242f
Author: snowpool
Date: Wed May 29 20:55:00 2013 +0900

line2 を追加

commit 53d156650c331b31b33c8907f25527e61978dfcf
Author: snowpool
Date: Tue May 28 21:28:11 2013 +0900

initial commit
というように
変更がされていないことが確認できる

テーマ : Linux
ジャンル : コンピュータ

git に特定のファイルを含めない方法

git に特定のファイルを含めない方法

#09 git管理に含めない設定について
http://dotinstall.com/lessons/basic_git/6709
を参考に git について学習

とりあえず、
vim error.log
でファイルを作成してみた

git add .
で一気にファイルをインデックスにできるけど
インデックスに含めたくないファイルもある
例えばログファイル

そんなときには
vim .gitignore
で設定ファイルを作成し
*.log
というようにファイル拡張子を指定することで
ログ関連ファイルはインデックス化しないようになる

とりあえず、現在のファイルは
index.html
error.log
.gitignore
となっているけど

git status を実行した結果は
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: index.html
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# .gitignore

となっていて
error.log が対象から外れているのが確認できる

これも実際にやったほうが分かるので
git add .
で一気にインデックス化して
git status
で確認すると

# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# new file: .gitignore
# modified: index.html
#

というように
error.log が対象から外れてインデックス化されたことが
確認できる

.gitignore ファイルの有効範囲は
作成したディレクトリから下全部になる

このため、一番上に書くと
そこからのサブディレクトリまで設定は反映されるので注意

テーマ : Linux
ジャンル : コンピュータ

git でのファイル操作

git でのファイル操作

git で
git add するときのオプション
ファイルの削除、移動するときのコマンドを
#08 gitでのファイル操作について
http://dotinstall.com/lessons/basic_git/6708
を参考に学習

いままでの学習だとファイルを1つずつ実行していたけど
現実のプロジェクトではまとめて行うことになる

こんなときには
git add .
とする

これは、今のディレクトリより下のファイルを全て
git add するという意味になる

また、git add でインデックス化したファイルの削除は
git rm index.html
というようにして
移動するときにも
git mv index.html
というようにする

これは Linux コマンドで rm とか mv で移動してしまうと
いままで管理しているファイルがどこにいったのか
把握できなくなるので、
git 管理下においたファイルは
git rm
git mv
といったコマンドを使って管理することになる

テーマ : Linux
ジャンル : コンピュータ

git で差分確認

git で差分確認

#07 差分を確認してみよう
http://dotinstall.com/lessons/basic_git/6707
を元に
git での差分確認

これができると、どこを修正したかわかるようになる

わかりやすさを求めるので
index.htmlを編集して
line2 を最終行へ追記

この状態で
さきほどのように
git status
とすると
まだ add も commit もされていないということと
index.html が編集されたということがでてくる

そして、今回は変更されたところを見たいので
git diff
と実行

すると
diff --git a/index.html b/index.html
index a29bdeb..c0d0fb4 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
line1
+line2

と表示される

ただし、確認できるのは
git add でインデックスに追加していない状態のものを
確認するもの

git add を行ったものは別のコマンドを使って確認することになる

それが


実験のため
git add index.html でインデックス登録
そして
git status
で確認すると

# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# modified: index.html
#
となり
index.html は編集されたけど
まだ commit されていないということが表示される

このインデックス状態で差分を調べるには
git diff --cached
とする

これで、 git commit する前、つまりインデックス登録状態の差分を表示できる

ちなみに、実行結果は
diff --git a/index.html b/index.html
index a29bdeb..c0d0fb4 100644
--- a/index.html
+++ b/index.html
@@ -1 +1,2 @@
line1
+line2

テーマ : Linux
ジャンル : コンピュータ

git の状態把握

git の状態把握

git で
どのファイルがどの状態で管理されているかを把握する
ことについて学習

#06 現在の状態を把握しよう
http://dotinstall.com/lessons/basic_git/6706
を、もとに学習

vim index.html

最終行へ line2 を追記

そしたら、
git status
で現状の確認

すると
# On branch master
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: index.html
#
no changes added to commit (use "git add" and/or "git commit -a")

と表示され
modified: index.html
と表示される

modified は変更されたという意味なので
modified : index.html

index.html が変更されたという状態を示す

no changes added to commit (use "git add" and/or "git commit -a")
の部分は
まだ add  も commit もされていないということ

# (use "git add ..." to update what will be committed)
は変更を保存するなら
git add
しましょうという意味で

# (use "git checkout -- ..." to discard changes in working directory)
間違えているのなら
git checkout
を使って修正しましょう
という意味

が表示されている


今回は、修正の仕方がでているので
この機会に実践
git checkout -- index.html

これを実行した後に
cat index.html
を実行すると

line1
line2
だったのが
line1
だけに修正されている

今回は単純な修正だったけど
プログラミングのソースの修正には非常に役立つ
すべて修正するのはかなり面倒だけど
こうやって管理できると非常に楽

テーマ : Linux
ジャンル : コンピュータ

git log のオプション

git log

#05 gitのログを見てみよう
http://dotinstall.com/lessons/basic_git/6705
を参考に、今回は git log について

git log を実行すると
端末にいろいろな情報がでてくる

commit 53d156650c331b31b33c8907f25527e61978dfcf

となっているのが
git のIDのようなもので
基本的にユニーク、つまりかぶらないIDになる
SQL の primary key のようなかんじ

Author: snowpool
Date: Tue May 28 21:28:11 2013 +0900

これは
git したユーザと
コミットした日付

snowpool
がユーザ

Date: Tue May 28 21:28:11 2013 +0900
が日付となる

initial commit
はメッセージ
これはプログラミングでよくつかうコメントアウトのようなもの


ちなみに、
git log --oneline
とすると
コンパクトに一行にまとまる

53d1566 initial commit

というように、IDとメッセージだけでる
53d1566
がID

initial commit がメッセージ


そして、一番使いそうな変更点のみの表示
これを見るには
git log -p

不通に git log
で出した部分に加え、変更点も表示される

diff --git a/index.html b/index.html
new file mode 100644
index 0000000..a29bdeb
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+line1
が今回でてきた部分

--- /dev/null
は変更点なしということ

@@ -0,0 +1 @@
+line1
変わった行数と変わった内容がでる

@@ -0,0 +1 @@
が変わった行数

+line1
が変わった内容


git log --stat
とすると
どのファイルが何ヶ所変更されたか見る事ができる

今回は
index.html | 1 +
1 file changed, 1 insertion(+)

となっているので
index.html を1箇所変更しているということになる

テーマ : Linux
ジャンル : コンピュータ

git によるバージョン管理 コミット

git によるバージョン管理 コミット

まずは
myweb というディレクトリ作成

mkdir myweb
cd myweb/

で作業用ディレクトリに移動

git init
を実行すると git でこの myweb というディレクトリを使う
ということを宣言する
つまり関数の初期化のようなものらしい

成功すれば
Initialized empty Git repository in /home/snowpool/myweb/.git/

というようにでるので
そしたら次の段階へ

もしダメなら
git config --global core.editor vim
を実行する必要があるらしい

これで下準備はできたので
ファイルを作成

vim index.html
中身は適当で、ただバージョン確認につかうために作成
今回は再現できればいいので
line1
と書いて保存

ここまでできたら、インデックスへ登録
インデックスへ登録するには
git add を使う
今回なら
git add index.html
となる

インデックスへ登録したら
ようやくリポジトリへ登録
これは
git commit
を使う

すると、エディタが開くので
一番上にメッセージを書き込む
今回も再現をしたいので
initial commit

これをやりたいけど
なぜか ubuntu の場合
git commit
で起動したのは vim ではなく nano

下にヘルプがでているのでそこまで問題にはならないけど
使いなれた vim のほうがやりやすいので

Nanoの基本ガイド
http://www.gentoo.org/doc/ja/nano-basics-guide.xml
を見ながら
Ctrl + o で保存して
Ctrl + x で終了

git config --global core.editor vim
を実行して
nano から vim へ変更

履歴の確認をするには
git log
で見る事ができる

テーマ : Linux
ジャンル : コンピュータ

git によるバージョン管理

git によるバージョン管理

git とはバージョン管理につかうもの
公式サイトは
http://git-scm.com/book/ja

ドットインストールでは
Linux で
git
vim
を使っている

作業ディレクトリは
/home/ユーザとなっている

このあたりについては
#01 gitとは何か?
http://dotinstall.com/lessons/basic_git/6701
を参照

とりあえず、今回はgit の学習ということで
デスクトップの Ubuntu へインストール
参考にしたのは公式サイトの
インストールページ
http://git-scm.com/book/ja/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

sudo apt-get install git
でインストール完了

vim に関しては
sudo apt-get install vim
でインストールできる


ちなみに、
ディストリによってインストール方法が異なる
fedora
centOS の場合
yum install git-core
となる



git の概要としては

ファイル作成

修正

ある程度まとまったらDBへ保存


作業ディレクトリ
 ファイルの作成、修正など

インデックス
それぞれの状態、つまりバージョンの違いを保存

リポジトリ
ローカルとリモートがある
個人ならローカル
リモートはネット上でソース共有に使える

ドットインストールでは
ローカルのほう

準備完了できたら
#04 初めてのコミットをしてみよう
http://dotinstall.com/lessons/basic_git/6704
から
git の学習を開始

テーマ : Linux
ジャンル : コンピュータ

AWS のバーチャルホスト設定

value domain でドメイン取得したので
AWSで設定してみました


参考サイト
http://centossrv.com/apache-virtualhost.shtml

http://www.server-world.info/query?os=CentOS_6&p=httpd&f=6

まず、バーチャルホストのためのディレクトリ作成

cd /var/www/html
mkdir ドメイン名

どちらのサイトを参考にしても
NameVirtualHost *:80
の#を消すとあるので実行

しかしうまくいかないため
aws バーチャルホストで検索
http://qiita.com/items/075ccbf147ca8eb568b8
を参考にしたら、
元ドメインも定義しないとダメということなので
<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName ドメイン名
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /var/www/html/www.ドメイン名/
ServerName www.ドメイン名
</VirtualHost>
と最終行にいれて
apache2 再起動したら、独自ドメインが反映されたけど
バーチャルドメインはダメでした
つまり、
ドメイン名
はOK

でも
www.ドメイン名
はダメ

という状態でした

今回は value domain だったので、他のところも試してみようと思います

テーマ : Linux
ジャンル : コンピュータ

公開鍵認証ではまった事

公開鍵認証ではまった事

CentOS 6.4 64bit で
公開鍵認証でアクセスするように変更して躓き
解決したのでメモです

クライアントマシンは
Ubuntu 12.04 LTS 64bit

まず、Ubuntu で
Ctrl + Alt + t
で端末を開き

ssh-keygen -t rsa
で鍵を作成
パスワードを聞かれるので、任意のパスワードを入力

ssh-copy-id コマンドで転送できるので
ssh-copy-id '-p2222 snowpool@192.168.10.110'
で転送
書式解説すると
-p2222 は変更したポート番号

あとは
ユーザ名@IPアドレス
となっています

ポートを変更していないのなら
ssh-copy-id ユーザ名@IPアドレス
でOKです

その後
ssh-add ~/.ssh/id_rsa
を実行して
あとは
ssh -p 2222 192.168.10.110
でログインできるようになります

もし
ssh-add ~/.ssh/id_rsa
を忘れると
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
と表示されログインできません

このエラーがでることによりかなり悩みました

sshの公開鍵認証の設定でつまずいた
http://daily.belltail.jp/?p=112
を参考にすることで、無事解決しました

ポート変更後の
ssh-copy-id コマンドについては
How to use ssh-copy-id on a non-standard port
http://superuser.com/questions/446665/how-to-use-ssh-copy-id-on-a-non-standard-port
を参考にさせていただきました

テーマ : Linux
ジャンル : コンピュータ

linux-headers-3.5.0-30-generic インストール

VMware Player を起動しようとしたところ
カーネルがみつからないということで
必要なパッケージをインストール

uname -r
でカーネルバージョンを確認し
次に

sudo apt-get install linux-headers-3.5.0-30-generic
でインストール

あとは、普通に
vmplayer &
で起動して 管理者権限パスワードをいれれば無事アップデート完了

テーマ : プログラミング
ジャンル : コンピュータ

twitter のユーザ認証

twitter のユーザ認証

#07 ユーザー認証をしてみよう
http://dotinstall.com/lessons/tw_connect_php_v2/21907
を参考にユーザ認証について学習

認証したユーザーの情報を取得するためのAPIは
https://dev.twitter.com/docs/api/1.1/get/account/verify_credentials
を参考にする

認証に必要な callback.php を作成

ユーザ認証には
codebird.php を使うので
require_once('config.php');
require_once('codebird.php');
で読み込む
ファイルのパスに注意

初期化に
consumer key
consumer secret
が必要なので、これは定数から取得する

初期化のあたりは、
https://github.com/mynetx/codebird-php

1. Authentication
を参考にして、ほぼコピペ

Codebird\Codebird::setConsumerKey('YOURKEY', 'YOURSECRET');

Codebird::setConsumerKey(CONSUMER_KEY, CONSUMER_SECRET);
というように定数に変更

$cb = \Codebird\Codebird::getInstance();
はそのままコピペ

ユーザ認証関連もコピペでOKらしいけど
https://github.com/mynetx/codebird-php

Or you authenticate, like this:

の下にコードが載っているが、バージョン変更されたのか
コードが微妙に違っているので
http://dotinstall.com/lessons/tw_connect_php_v2/21907
の部分を使ってみた

twitter で認証されると
GETで 'oauth_verifier' が渡される
if (! isset($_GET['oauth_verifier'])) {
なので、もし渡されないならという意味

$auth_url = $cb->oauth_authorize();
header('Location: ' . $auth_url);
die();
では、 twitter 認証画面に飛ばしている

その場合、スコープ内の処理が実行される

認証できたなら
else のスコープの中の処理が実行される

'oauth_verifier'
は認証完了したときに返ってくる値

$_SESSION['oauth_token'] = $reply->oauth_token;
$_SESSION['oauth_token_secret'] = $reply->oauth_token_secret;
はユーザが必要なAPIにアクセスするのに必要

$cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
でユーザが必要なAPIを使えるようにする処理

$me = $cb->account_verifyCredentials();
でユーザ情報をみることができる

ここまでできたら
var_dump($me);
で格納できているか確認

account_verifyCredentials();

codebird.php での twitter API を使ったアクセス方法

詳しくは
https://github.com/mynetx/codebird-php
3. Mapping API methods to Codebird function calls
を参考に

テーマ : プログラミング
ジャンル : コンピュータ

ツイッターでログインするWebサービス作成 

ホーム画面の作成

http://dotinstall.com/lessons/tw_connect_php_v2/21905
を参考に

/var/www/twitter/へ
index.php を作成

まず、
reqiure_once('config.php')l
require_once('codebird.php');
で必要なファイルの読み込み

このとき、注意点として
config.php

codebird.php

index.php とおなじディレクトリにおくこと
これを間違えるとファイルパスが違っていて
画面が真っ白になるので注意

ファイルの有無は
Linux なら ls コマンドをつかって確認可能

もし、別の場所におきたいのなら
require_once() のパスを変えること


これは、java の import
C の include と同じ

次に
HTMLタグを使って画面を作成

普通のHTMLと変わらないけど
a要素で
<a href="logout.php">ログアウト</a>
というようにログアウトする処理をつけること

そして、つぶやきのリスト表示のため
<ul>
<li></li>
</ul>
で場所を指定しておく

ファイルの編集はテキストエディタではなく
Eclipse を使用
ただ、あまり多くのプロジェクトが開いていると面倒なので
Ctrl[ + Shift] + W [全て]閉じる
で一旦今つかっているのを消しておきます

Eclipse と追加プラグインにより、
コードの記述が楽になるし、タイプミスが減るので
便利ツールは活用することをおすすめします

Eclipse にはショートカットキーがあり
これを知っていると作業効率があがります

http://dotinstall.com/lessons/tw_connect_php_v2/21906
を参考にログイン画面を作成

セッションを使うので、コードを追記
session_start();
でセッション開始

そして、ログイン判定をif で実装
ログインしているなら me に格納します

if (empty($_SESSION['me']))
は me の中身が空ならという意味

header('Location: '.SITE_URL.'login.php');

SITE_URL は config.php で
定義した定数で、サイトのURL
これは公開環境じゃなくて
ローカルIPでもOK

PHPでは . で java script の+連結みたいに使えるので
SITE_URL.'login.php'
http://192.168.10.248/login.php
という意味になる


これができたら、次にログイン画面作成

最初からつくるのは面倒なので
cp base.html login.php
でファイルをコピーし
内容を編集します

変更点として
a要素で
ログインするため、いろいろな処理をするのは
callback.php になっているので
<a href="callback.php">twitter でログイン</a>
というように、ファイルを指定します

テーマ : プログラミング
ジャンル : コンピュータ

twitter アプリのための設定

twitter アプリのための設定

#04 アプリの設定をしよう
http://dotinstall.com/lessons/tw_connect_php_v2/21904
に書かれているソースを
/var/www/twitter/config.php に追記していく

必要なものを定数として格納する

定数はPHPでは define() で行う
左が自作の定数
右がその内容
となる

つまり、メンテを考えると、非常に効率的
右の値を変えるだけで、簡単に変更ができる
define('DSN', 'mysql:host=localhost;dbname=dotinstall_tw_connect_php');
では
ホスト名、DBの名前になる
今回なら
ホスト名 = localhost
DB名 = dbname=dotinstall_tw_connect_php
どちらも sql の設定で行ったもの

define('DB_USER', 'dbuser');
これはユーザ名
grant all on dotinstall_tw_connect_php.* to dbuser@localhost identified by '**********';
で作成した
@localhost の前にある名前

また
define('DB_PASSWORD', '**********');
はパスワード
*********は任意のものに変えてある

define('CONSUMER_KEY', '********************');
define('CONSUMER_SECRET', '*********************************');
これらは、
twitter のアプリの設定画面の
Details のところに載っている

define('SITE_URL', 'http://dev.dotinstall.com/tw_connect_php/');
はサイトURL

error_reporting(E_ALL & ~E_NOTICE);
はエラー関連の表示

session_set_cookie_params(0, '/tw_connect_php/');
はセッション範囲の指定

テーマ : プログラミング
ジャンル : コンピュータ

twitter アプリのためのDB作成

twitter アプリのためのDB作成

twitter アプリのユーザ情報を格納するので
DBを作成する

開発環境は Ubuntu12.04 64bit

すでに apache2 と PHP はインストール済みなので
MySQL を入れる

sudo apt-get install mysql-server
でインストールできる

install しているときに root 権限のパスワードを設定するのでパスワードを入力
この root は Ubuntu のではなくて
MySQL の root 権限

これで準備できたので
#03 データベースの設定をしよう
http://dotinstall.com/lessons/tw_connect_php_v2/21903
を参考にDBの作成


今回、アプリ作成のためディレクトリを作成
/var/www/twitter としてみた

前回ダウンロードした圧縮ファイルを
ここに解凍して置く
codebird-php-master/src/codebird.php
が使うファイルなので、
codebird.php

/var/www/twitter/
へコピーしておく

そしたら、DB の作成
動画では、PHPファイルを作成し
その中のものから コピペしているけど
sql ファイルにまとめておいて実行するということもできるので
今回はこの方法を使います

config.php のSQL部分のコピペを行い
vim setup.sql で sql ファイルを作成し
貼り付け
そのときにパスワードの
********************
を任意のパスワードに変更し保存

mysql -u root -p < setup.sql
を実行すれば、sqlファイルの内容を実行することができます


作成できているか確認するには
mysql -u root -p
で mysql にログインして

show databases;
でDBを確認して
dotinstall_tw_connect_php
があるのを確認

そして
use dotinstall_tw_connect_php
で使用DBを切り替えて

desc users;
でテーブルの中身を確認

これでOKなら
exit で mysql を抜けます

テーマ : プログラミング
ジャンル : コンピュータ

twitter でログインする webサービス

twitter でログインする webサービス

必要なものが
HTML
CSS
PHP
MySQL

Codebird-PHP
https://github.com/mynetx/codebird-php
これは ZIP ボタンをクリックして
圧縮ファイルをダウンロードして解凍して使う

必要なものができたら、次は
twitter アプリの登録

これは
https://dev.twitter.com/
へアクセスし
sign in して登録する

sign in したら、自分の twitter アイコンをクリックして
My Applications をクリックし
create a new application をクリック

必要な項目が英語だけど
name にはアプリの名前
ただし、twitter という名前をいれるのはダメ

description にはアプリの解説

web site には
自分サイトのURL

callbackURL には
自分のサイトURLに
callback.php をつければOK

規約を読んでOKなら
yes I agree にチェックをいれて

よみにくい文字を入力すれば登録完了

もし、間違えても
登録アプリの Settings タブで
修正が可能なので、そんなに失敗を気にしなくてもいい

テーマ : プログラミング
ジャンル : コンピュータ

HTML5 でメモ帳作成 その5

HTML5 でメモ帳作成 その5

一定時間毎ではなく、文字を入力した時点で
保存されるようにする

これは、twitter とか ブログとかで
下書きの自動保存みたいに使えるので
忙しいときに活用できそう

参考にできるのが
#08 キー入力毎に自動保存
http://dotinstall.com/lessons/memo_html5/2308

これは
jQuery を使う
keyup は文字入力したというイベント

$('#memo').bind('keyup',function(){
localStorage.setItem('memo',$('#memo').val());
}
というソースの部分が該当

これは
id="memo" のテキストエリアの内容を
keyup イベント発生
つまり文字入力するたびに
localStorage に保存するというもの

今後の課題としては
Ajax とかでもっと使いやすくできると面白いかもしれない

テーマ : プログラミング
ジャンル : コンピュータ

HTML5 でメモ帳作成 その4

HTML5 でメモ帳作成 その4

自動保存はできたので、今度は保存していることを
わかりやすくするため
保存時にメッセージを表示


#07 自動保存時にメッセージを出す
http://dotinstall.com/lessons/memo_html5/2307


まずは、表示する領域を設定
今回はp 要素に id="message" としている
また、最初に非表示にしたいので
display:none というスタイルを適用
<p id="message" style="display:none;">saving ....</p>

あとは、保存した時に表示するように
java script で制御

ユーザ関数 autoSave() に追記する
$('#message').show().hide(200);
これは
id="message" のところを表示にして
その後 0.2秒たってから
隠すというもの
show() は表示
hide() は隠すという意味

200 は 0.2 秒単位という意味になる

実行すると、02秒ごとに
saving .... とずっと繰り返し表示される

テーマ : プログラミング
ジャンル : コンピュータ

HTML5 でメモ帳作成 その3

HTML5 でメモ帳作成 その3

ようやく、自動保存の開始
今回は、一定時間ごとに保存するというもの
setTimeoutを使って自動保存

http://dotinstall.com/lessons/memo_html5/2306
を参考に作成

#15 タイマー処理の違い
http://dotinstall.com/lessons/basic_javascript_tips/2115

無名関数と即時関数で出来ること
http://dotinstall.com/lessons/basic_javascript_tips/2118

も参考にしたほうがわかりやすい

これを使うと、保存するボタンをおさなくてもよくなる

このため、UIから保存ボタンを削除して
かわりにオート保存機能を実装

function autoSave(){
localStorage.setItem('memo',$('#memo').val());
setTimeout(autoSave,1000);
}

となる
$('#memo').val()

id="memo" のテキストエリアの
val() つまり、内容
ということ

なので
localStorage.setItem('memo',$('#memo').val());

id="memo" のテキストエリアの内容を
localStorage に保存するという意味になる

そして、その間隔を
setTimeout(autoSave,1000) で
1000 にしているので1秒ごと
に実行される

あと、即時関数を使ったほうが、書くときにも楽

関数を作成して
autoSave();
でもいいけど

(function autoSave(){
localStorage.setItem('memo',$('#memo').val());
setTimeout(autoSave,1000);
})();
というようにして即時関数にしたほうが書く手間が省ける

これにより、自動保存できるし
他の人がおなじURLへアクセスすればみれるので
共有掲示板のようなものも作れる

テーマ : プログラミング
ジャンル : コンピュータ

最新記事
検索フォーム
GREEハコニワ攻略サイト
リンク
カテゴリ
月別アーカイブ
フリーエリア
最新記事
FXプライムレート
最新コメント
最新トラックバック