|
1: 2011-07-28 (木) 06:33:39 yuji |
| + | *gitとは, [#q7c3fbd0] |
| + | subversionに代わる新しいバージョン管理システムということで,gitだ。。~ |
| + | Androidもgitで管理されている。というよりも,Linuxカーネルの管理を目的としてLinus Torvaldsが開発したものだそうだ :) |
| | | |
| + | たしかにLinuxカーネルの開発では,開発している人たちがLinux Kernel Mailing Listにパッチを投稿して,それをソースに反映させるという開発スタイル。もともと別のバージョン管理システムを使ってたはずなんだけど,なんかの問題でgitを開発したのかな・・・ |
| + | ということで,Linuxカーネルではスゴイ量のソースコード,変更点の抽出やリポジトリ操作があるんだろうから,性能は折り紙付きかな。 |
| + | |
| + | subversionと何が違うのかというと,大きく違うところは分散レポジトリを使えるということらしい。~ |
| + | 分散レポジトリってなにかがよくわからないんだが,ファイルを管理しているデータベースの格納先を中央の1箇所ではなく,いろいろな所に持てるということだと思う。 |
| + | |
| + | gitでの作業フローは, |
| + | |
| + | -中央リポジトリからコピーする |
| + | -コピーしたリポジトリを編集し,コンテンツの修正,追加,削除を行う |
| + | -ローカルへコミットする |
| + | -中央リポジトリへ変更内容を反映させる |
| + | |
| + | になる。 |
| + | |
| + | 実際のリポジトリへのアクセスには, |
| + | -ローカル |
| + | -WebDAV |
| + | -Git独自プロトコル |
| + | -rsync |
| + | -ssh |
| + | でアクセスできるようだ。 |
| + | |
| + | Linusは,トランスメタ時代にCVSを使えと言われて,その時にCVSを憎むほど嫌いになったらしい。Subversionに対しては,史上最大の無意味なプロジェクトであると思っているとの事。SubversionがCVSの改良というスタンスで開発された訳が,その理由になっている :-D |
| + | |
| + | **インストール [#e0bea0ae] |
| + | # yum install git |
| + | でインストールした。 |
| + | |
| + | **設定 [#i8a8679b] |
| + | git configコマンドはで,gitの環境設定ファイルを編集する。 |
| + | gitの環境設定ファイルは,環境に応じ3つの場所に置かれる。 |
| + | |設定ファイルの場所|意味|git configのオプション|h |
| + | |/etc/gitconfig|システム上の全てのユーザとリポジトリ|--system| |
| + | |~/.gitconfig|各ユーザ用|--global| |
| + | |.git/config|現在管理中の,Gitリポジトリ|付けない| |
| + | 普通は,--globalを使って設定すればいい気がする。 |
| + | $ git config --global user.name "Yuji Ueno" # ユーザ名 |
| + | $ git config --global user.email yuji@yeno.homeip.net # メールアドレス |
| + | $ git config --global color.ui auto # 出力を見やすくする |
| + | $ git config --list |
| + | color.ui=auto |
| + | user.name=Yuji Ueno |
| + | user.email=yuji@yeno.homeip.net |
| + | |
| + | **使い方 [#h058b63f] |
| + | ***作業領域をgitで管理対象にする [#ifb5a1e6] |
| + | hogehoheディレクトリ以下をgitで管理する。 |
| + | $ cd hohehoge |
| + | $ git init |
| + | こうすると,hogehogeディレクトリに「.git」というディレクトリが作られ,このディレクトリがリポジトリになる。((個人用)) |
| + | |
| + | この時だと,まだhogehogeにあるファイルはバージョン管理されていない状態。~ |
| + | git statusコマンドでそれが確認できる。トラックしていないファイルって表示される。~ |
| + | $ git add . |
| + | でトラックするようにする。addコマンドはいろいろな意味があって,新しいファイルのトラック開始・ファイル衝突時のマージなどのマーク付けなんかで使用するみたいだ。 |
| + | |
| + | その後,まだリポジトリに変更を確定してないので,コミットする。 |
| + | $ git commit -m "最初のコミット" |
| + | これで,コミットされる。 |
| + | |
| + | ***普段の流れ [#hddb2a26] |
| + | gitを使った流れは,下記のような感じになる。 |
| + | +ファイルを編集,新規作成 |
| + | +git statusで変更状況を確認 |
| + | +git diffで変更箇所を確認 |
| + | +編集作業が終わったらgit add ファイル名,またはgit add -uで変更ファイルを記録する指定をする。 |
| + | +git commitでリポジトリに変更を登録(git commit -a "説明・・・") |
| + | |
| + | $ git status |
| + | # On branch master |
| + | nothing to commit (working directory clean) |
| + | 変更したものがない場合は,statusコマンドを使うと,このような出力が返ってくる。 |
| + | |
| + | ***gitに登録させたくないファイル [#t4285e5b] |
| + | gitに登録させたくない場合のファイル指定は,無視させるファイルを.gitignoreファイルに指定することが出来る。 |
| + | .gitignoreの内容を, |
| + | *~ |
| + | のようにすると,file.txt~とかいうファイルを無視するようになる。 |
| + | |
| + | ***共有レポジトリの作成と運用 [#u8c9db25] |
| + | 複数の人で共有するリポジトリがあると便利。 |
| + | $ mkdir /var/www/git/hogehoge.git |
| + | $ cd /var/www/git/hogehoge.git |
| + | $ git init --bare |
| + | これで,/var/www/git/hogehoge.gitという共有用リポジトリが出来た。 |
| + | |
| + | 前に作った個人用レポジトリ設定を共有リポジトリに反映させる。 |
| + | $ git push /var/www/git/hogehoge.git master |
| + | これで,共有リポジトリに登録できたんで,複数人で共同作業が行えるようになった。 |
| + | |
| + | コピーを持ってくるには, |
| + | $ git clone /var/www/git/hogehoge.git hogehoge.new |
| + | とかすればOK。~ |
| + | svn だとcheckoutに似ているんだけど,gitでは,リポジトリサーバーが保持しているデータを全てコピーする。つまり履歴も含んだ全てが,git cloneとすることで手元に持ってこれる。これは,リポジトリサーバーが万が一壊れちゃっても,どこかに残っているcloneしたデータを戻してやれば復元も可能になる。これまでの履歴ももちろん復元される。~ |
| + | このへんが,Subversionとは違うところ。 |
| + | |
| + | その後,編集後,例えば,hogehoge.newでfile1.txtを作成後,共有レポジトリに反映させる時には, |
| + | $ git commit -a "add file1.txt" |
| + | $ git push origin master |
| + | これで,共有レポジトリにfile1.txtが追加される。 |
| + | |
| + | hogehogeディレクトリで,今までの更新を反映させるには, |
| + | $ cd hogehoge |
| + | $ git pull /var/www/git/hogehoge.git |
| + | とすると,hogehogeが,hogehoge.newと結果的には同じになる。 |
| + | |
| + | これで共同でファイルを編集・更新が出来るようになります。 |
| + | |
| + | 共有リポジトリがある場合の流れ, |
| + | +git cloneで共有リポジトリからファイルをコピーする |
| + | +ファイルを編集,新規作成 |
| + | +git commitでリポジトリに変更を登録(git commit -a "説明・・・") |
| + | +git pushで共有リポジトリを更新 |
| + | $git push origin master |
| + | |
| + | ***githubを使う [#vcd63cc6] |
| + | 共有リポジトリは,別のコンピュータやネットワークの外のコンピュータでも同様に使用できる。~ |
| + | cloneやpushやpullといったコマンドは,ネットワークを経由して行われる。通信プロトコルは,いくつかを選択できるようになっている。~ |
| + | githubというのは,共有リポジトリを作成して,それをWeb上で共有できるサービスの事をいうようだ。 |