Git簡易マニュアル

提供: ComplexRI: Manual
ナビゲーションに移動 検索に移動

 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.png



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 ファイルを編集すれば良い.