スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Git に再入門してみる(2)

あとでかきますー。
スポンサーサイト

Git に再入門してみる(1)

ついさっき、うっかり git reset --hard HEAD してしまって泣いたのでGitを勉強しなおしてみる。

たぶん、いろいろ間違ってるので見つけた方はご指摘よろしくです。
あと、こことかのほうがよくまとまってる。


【0】Gitとは?

詳しくは Wikipedia とか他のサイトを見ればいいと思うが、いわゆるバージョン管理システム

他のバージョン管理システムとしてはSubversionとかCVSとかあるらしいが、にわかな俺は使ったことない。

とにかく、バージョン管理システムというと、「げ、コードいじってたら動かなくなった……!」などという場合に以前のバージョンにサクッと戻せるツール。
他にも、みんなで分担してコードを書き進めていく時とかに便利。

使い始めたら、Gitなしではコード書けない。


【1】作業ツリー、ステージングエリア、リポジトリ

用語のおはなし。

《作業ツリー》
普段、コードを書いたり設定ファイルをいじったりするところ。

Gitを使ってない場合、コードが置かれている環境は1つだが、Gitだとbranchという機能によって、複数の作業ツリーを並行的に使える。

正直、初めはよくわからないので、作業用ディレクトリのようなものだと考えれば良いと思う。

A という branch の a.txt というファイルには変更を加えずに、B という branch の a.txt に変更を加えて動作を確認した後、それを A という branch に適用したり、丸ごと捨ててしまったりできる。


《ステージングエリア》
作業ツリーで行った変更は最終的にはリポジトリに反映するんだが、その前に変更を仮確定するところ。
別名をインデックスというらしいが、そう呼んでいる人は見たことがない。

作業ツリーからステージングエリアにファイルを追加することを「ステージする」とかいう。


《リポジトリ》
最終的に、全ての変更を保存する場所。レポジトリと言ったりもする。
apt-get とかでプログラムをインストールするときに参照するリポジトリとは別物なので、混乱しないように。

ステージングエリアの変更をリポジトリに適用することを「コミットする」という。


【2】Gitを使った作業の流れ

ざくっと書くとこんな感じ。

作業ツリーでファイルを追加・編集する。
 ↓
編集した結果をステージングエリアに加える。
 ↓
変更をリポジトリにコミットする。


【3】Gitのインストール

Ubuntu 12.04(Quantal)だと、

$ sudo apt-get install git

で入ります。

他のOSは知りません。
ggrks。


【4】Gitのセットアップ

いかにGitが便利とはいえ、コンピュータの中の全ファイルを追跡してたら死ぬので、Gitでバージョン管理する際には対象ディレクトリを指定する必要があります。

hoge ディレクトリ以下を追跡する場合、

$ cd hoge
$ git init

とします。

これで、hoge ディレクトリ以下のファイルの変更が追跡されるようになり、Gitによるバージョン管理の準備が整いました。

ちなみに、gitによるバージョン管理をやめる場合は、git init したディレクトリにある .git ディレクトリを削除するだけです。

$ cd hoge
$ rm -r .git




続きます=>「Gitに再入門してみる(2)」





Git入門の良書。
たぶん、このブログの1000倍わかりやすい。

git rm を一括処理する。

Gitで新しく追加されたファイルは

$ git add .

で簡単にステージに追加できます。

しかし、削除したファイルをステージから削除するのは1個ずつやらないといけない。
しかも、ファイルが削除されてしまっているので、ターミナルのファイル名補完が働かないという罠。

というわけで、仕方なく一部手打ちで

$ git rm app/controller/user*

とかしてたんですが、めんどくさくなったので、git statusの結果から一括削除することに。

$ git status | grep -e deleted: | sed -e "s/#\t*deleted: *//g" | xargs git rm


これでステージからの一括削除ができます。
ただし、Gitのバージョンが違ったりすると、正規表現が一致しなくなるかも知れないので、そのあたりは自己責任で。


【補足:簡単な説明】
git status で変更があったファイル一覧を出力し、パイプでgrepに投げます。

grep は受け取った文字列から、ステージから削除したいファイル名が含まれる行、すなわち、「deleted:」が含まれる行を抽出し、sedに投げます。

sed はファイル名以外の部分を削除します(Gitのバージョンが変わると、ここが一番弱い)。

最後に、xargsでsedの出力を受け取って、それぞれに対して git rm します。


上にも書きましたが、sedの正規表現の部分が一番弱いので、変更に対して強い正規表現に書き換える必要がありますが、面倒なので困ってから書きk(ry
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
検索フォーム
カテゴリ
月別アーカイブ
最新記事
最新コメント
最新トラックバック
RSSリンクの表示
QRコード
QR
リンク
アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。