gitとは, anchor.png

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

Page Top

インストール anchor.png

# yum install git

でインストールした。

Page Top

設定 anchor.png

git configコマンドはで,gitの環境設定ファイルを編集する。 gitの環境設定ファイルは,環境に応じ3つの場所に置かれる。

設定ファイルの場所意味git configのオプション
/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
Page Top

使い方 anchor.png

Page Top

作業領域をgitで管理対象にする anchor.png

hogehoheディレクトリ以下をgitで管理する。

$ cd hohehoge
$ git init

こうすると,hogehogeディレクトリに「.git」というディレクトリが作られ,このディレクトリがリポジトリになる。*1

この時だと,まだhogehogeにあるファイルはバージョン管理されていない状態。
git statusコマンドでそれが確認できる。トラックしていないファイルって表示される。

$ git add .

でトラックするようにする。addコマンドはいろいろな意味があって,新しいファイルのトラック開始・ファイル衝突時のマージなどのマーク付けなんかで使用するみたいだ。

その後,まだリポジトリに変更を確定してないので,コミットする。コミットされるのは,addコマンドを実行したファイルに対してのみになる。

$ git commit -m "最初のコミット"

これで,コミットされる。 いちいちaddコマンドするのは面倒なこともある。その時には,

$ git commit -a -m "次のコミット"

と-aオプション付きでコミットすると,add処理を自動的にやってくれる。

よくやるのは,commitした後を早まったというか変更するファイルがまだ有った時の要な場合は,

$ git commit -m '最初のコミット'
$ git add 忘れてたファイル
$ git commit --amend

で,忘れてたファイルを再度commitする時,直近のcommitに上書きのような状態にする。

Page Top

普段の流れ anchor.png

gitを使った流れは,下記のような感じになる。

  1. ファイルを編集,新規作成
  2. git statusで変更状況を確認
  3. git diffで変更箇所を確認
  4. 編集作業が終わったらgit add ファイル名,またはgit add -uで変更ファイルを記録する指定をする。
  5. git commitでリポジトリに変更を登録(git commit -a "説明・・・")
$ git status
# On branch master
nothing to commit (working directory clean)

変更したものがない場合は,statusコマンドを使うと,このような出力が返ってくる。

Page Top

gitに登録させたくないファイル anchor.png

gitに登録させたくない場合のファイル指定は,無視させるファイルを.gitignoreファイルに指定することが出来る。 .gitignoreの内容を,

*~

のようにすると,file.txt~とかいうファイルを無視するようになる。

Page Top

gitに登録したファイルを削除 anchor.png

単にrmでファイルを削除した場合は,リポジトリには登録されたままになる。この場合,

$ git checkout -- filename

とかすると,削除したファイルを復活できます。リポジトリにファイルが残ってるからです。

gitリポジトリからファイルを削除する場合は,

$ git rm filename

を実行すると,ファイルの削除が登録される。次にコミットすると,ファイルが削除される。

Page Top

共有レポジトリの作成と運用 anchor.png

複数の人で共有するリポジトリがあると便利。

$ 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

これで,共有リポジトリに登録できたんで,複数人で共同作業が行えるようになった。

Page Top

共有リポジトリからコピーを持ってくる anchor.png

コピーを持ってくるには,

$ 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と結果的には同じになる。

これで共同でファイルを編集・更新が出来るようになります。

共有リポジトリがある場合の流れ,

  1. git cloneで共有リポジトリからファイルをコピーする
  2. ファイルを編集,新規作成
  3. git commitでリポジトリに変更を登録(git commit -a "説明・・・")
  4. git pushで共有リポジトリを更新
    $ git push origin master
Page Top

githubを使う anchor.png

共有リポジトリは,別のコンピュータやネットワークの外のコンピュータでも同様に使用できる。
cloneやpushやpullといったコマンドは,ネットワークを経由して行われる。通信プロトコルは,いくつかを選択できるようになっている。
githubというのは,共有リポジトリを作成して,それをWeb上で共有できるサービスの事をいうようだ。


*1 個人用

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 549, today: 1, yesterday: 0
最終更新: 2020-12-26 (土) 16:07:53 (JST) (1188d) by yuji