Git簡易マニュアル
gitはプログラム開発の過程のバージョン管理を自動化するツールで、ネットワーク上で複数人でのプログラム開発を行う上で非常に有効である。下記にgitの基本的な操作を記す。 gitは非常に機能が多いのでその他は各自ググること。git の使用方法を会得するために、GitHubを使用してみるのもいいだろう。個人用 or 外部公開用のリポジトリの作成に加え、リポジトリ用の Wiki の作成など、多くの機能が提供されている。
初回操作
git config --global user.name “…” ### ユーザー名の登録 git config --global user.email …@***.tohoku.ac.jp ### メールアドレスの登録 git clone git@comp.chem.tohoku.ac.jp:~/FreeFlex.git ### 共有リポジトリ(master)からプログラムを新規にコピーする
gitの構造
gitでは、ns1内で管理されている大元のファイル(master)と、個々人のローカルリポジトリにあるファイル(origin)、
実際に作業している作業ファイルの3種類が存在する。
プログラム開発の流れとして、自分の手でプログラムを編集し、下記のgitコマンドを用いて
まずローカルリポジトリ(origin)にコピーし(commit)、その後リモートリポジトリ(master)に上げる(push)といった作業を繰り返す。
masterは開発者全員で共有されるため、慎重に作業する必要がある。
プログラム作成
…ファイル作成・編集作業、動作確認
git status ### プログラムを編集したのち、自分がどのファイルをmasterに追加するのかを見ることができる。 ### changed not staged for commit の欄では、自分が編集したがaddしていないファイルが表示される。 ### changes to be committed の欄では、git commitした際に追加されるファイルが表示される。 ### untracked files の欄では、masterに存在しないファイルが表示される。新しいブログラムを追加したい場合はgit addで追加する。 git diff ### ローカルリポジトリと現在のプログラムを比較する。 ### ※ 無意味な更新がないよう add & commit の前に確認した方が良い。 git add File1 File2 … ### commitする予定のファイルを追加する。ここでaddしたものはgit statusで確認できる。 git commit ### 作成・編集したファイルをローカルリポジトリ(origin)に保存する。 ### commit時、エディタが立ち上がるのでログメッセージを書く。 ### ※ タイトルと本文の間を1行空けること(git log --oneline を正しく表示するため) ### この時点ではmasterは更新されていない。 git log ### ログの表示 git log --oneline ### ログの表示(1行) git commit --amend ### 直前のコミットをやり直す。 ### ※ ログの書き間違いやaddのし忘れ等のときに使用する。
…編集, add, commit の繰り返し
共有リポジトリ(master)の更新
git log ### ログの表示 ### ※ pushの前に表示がおかしくないか確認すること git log --oneline ### ログの表示(1行) ### ※ push の前に表示がおかしくないか確認すること git log --name-only ### ログの表示 ### commitされたファイルの名前を表示する。意図しないファイルをaddしていないか確認すること。 git rebase -i Hash ### ログの編集。詳しくは各自ググる。 ### ※ 編集後のログは、他人も見ることになるので読みやすくすること git push origin master ### コミットされている内容をで共有リポジトリ(master)を更新する。 ### すでに他人がプログラムを更新している場合、push が失敗するので下の作業を行う。
共有リポジトリのプログラムの取得
git pull origin master ### 共有リポジトリから最新のプログラムを取得する。 ### ※ 自分のプログラムがなくなるわけではない。 git status ### 現在のプログラムと最新のプログラムの競合を確認
…競合箇所の修正、動作確認
… add & commit で修正個所をcommitする。
git pullができないとき
…しばしばgit pullができない場合(makefileの編集などを行うとpullでも競合しやすい)、以下の作業を行えばよい。
git stash
### 現在の作業を中断し、ローカルリポジトリの状態に戻す。
### 中断した作業自体は保存され、git stash list で確認できる。
git stash list
### stashのリストを表示する。
git pull origin master
### 上記作業を行ったのち、git pullしてみる。
git stash apply stash@{*}
### *番目のstashの状態に戻す。git pullが成功したのち行う。
この作業を行うことで、競合があった箇所にHEADとローカルの両方の内容が書かれた状態になり、
どちらかを削除することで競合を解消できる。競合を解消したのち、git pushが通るはずである。
その他
git checkout Hash -- File ### ファイルを過去の位置に戻す。 git reset HEAD filename ### 間違えてgit addしてしまった時の取り消し。 git push -f origin HEAD^n:master ### リモートリポジトリの更新をn個前のものに戻す。 ### 他の人の更新と競合するかもしれない(未確認)ので基本的には使わない。 git tag -a v*.* Hash ### タグ(バージョン名。ハッシュとして使える。)を設定する。 git tag ### タグを確認する。 git push origin v*.* ### リモートにタグを登録 vi .gitignore ### ファイル中に記載されている正規表現に当てはまるファイルは git status 中に表示されない。 git blame filename ### ファイルを書いた人物、日付等を確認できる。
サーバーの設定
場所:リモートサーバー上で git リポジトリを作成するディレクトリ git@comp.chem.tohoku.ac.jp:~/XXX.git など
git init --bare ### 共有リポジトリの新規作成 vi ~/FreeFlex.git/hooks/post-receive ### メール送信設定のためのスクリプト
リモートリポジトリ更新時のメール配信先を追加・削除する際には post-receive ファイルを編集すれば良い.
