通常の使い方(Linux)

はじめに_

リモートリポジトリおよび作業ディレクトリの作業が終わったあとに日々のバックアップ作業について説明します。リモートリポジトリおよび作業ディレクトリの作業が終わっていなければバージョン管理開始(TortoiseGit)を参照のこと。

用語定義_

PC上のファイル編集を行うフォルダのことを「作業ディレクトリ」、複数のPC間で持ち運ぶためにGitのデータを保管しておくフォルダのことを「リモートリポジトリ」と呼ぶことにします。

日々のバックアップの流れ_

基本的には以下を繰り返すだけで簡単にバックアップできます。

  1. そのPCで作業を始めるとき:Pull(プル)
  2. 以下を作業するたびに繰り返す
    1. ファイルやフォルダを新たに追加するとき:Add(追加)
    2. ファイルに修正を加えたとき:Commit(コミット)
  3. そのPCで作業を終えるとき or 一息つくとき:Push(プッシュ)

Pull(プル)_

リモートリポジトリから作業ディレクトリに変更履歴の差分を持ってくる。作業ディレクトリがworkdirであるとき以下のようにする。

% cd workdir
% git pull (デフォルトのリモートリポジトリから差分を取得)
% git pull <<リモートリポジトリのURL or ファイルのパス>>

設定されているリモートリポジトリを調べる場合は以下のコマンドで調べられる。「origin」という名前がつけられているリモートリポジトリがデフォルトのリモートリポジトリ。「(fetch)」が最後についているのがpullで取得するリポジトリ。「(push)」が最後についているのがpushで保存するリポジトリ。

% git remote -v
origin	~ (fetch) 
origin	~ (push)

Add(追加)_

コミットする対象のファイルを指定する。TortoiseGitの場合は、新規にGitで管理対象とするファイルに対してだけAddを実行すればよいが、Linuxでgitコマンドを直接使う場合は、編集したファイルに対してもAddを実行しなければならない。

たとえばFirstFile.txtが新たなファイル/編集したファイルであるとき、以下のように追加する。

% git add FirstFile.txt

どのファイルが管理対象かを調べるためにはstatusコマンドを使う。

% git status (作業ディレクトリ全部を調べる場合)
% git status . (カレントディレクトリ以下を調べる場合)

Commit(コミット)_

Addで追加したファイルの変更履歴をリポジトリに保存する。Gitではコミット時に必ずコメントをつけなければならない。

% git commit (コメント追加のためのエディタが起動する)
% git commit -m "コメント" (一言コメントであれば-mオプションをつけると便利)
% git commit -a (既に管理対象になっており、かつ、編集済のファイルをコミットする)
% git commit -a -m "コメント" (-m と -a は同時に使うこともできる)

Push(プッシュ)_

作業ディレクトリの変更履歴をリモートリポジトリに保存するコマンド。

% git push (デフォルトのリモートリポジトリへ保存)
% git push origin master (デフォルトのリモートリポジトリへ保存。上と同じ)
% git push <<リモートリポジトリーの名前>> <<ブランチ名>> 

設定されているリモートリポジトリを調べる場合は以下のコマンドで調べられる。「origin」という名前がつけられているリモートリポジトリがデフォルトのリモートリポジトリ。「(fetch)」が最後についているのがpullで取得するリポジトリ。「(push)」が最後についているのがpushで保存するリポジトリ。

% git remote -v
origin	~ (fetch) 
origin	~ (push)

競合の解消_

競合の発生_

次のときに競合が起こる。

  • リモートリポジトリの最新変更状態N
  • 作業ディレクトリWorkDirにて状態Nをプル→ファイルaを編集→コミット
  • 作業ディレクトリWorkDir2にて状態Newestをプル→ファイルaを編集→コミット→リモートリポジトリにプッシュ(最新状態N'に変更)
  • 作業ディレクトリWorkDirにてN'をプル→競合発生

作業終了時にプッシュ、作業開始時にプルをしていないと競合が発生しやすい。

テキストファイルの競合_

バイナリファイルの競合_

以下のように競合が起こっていることが表示される。

% git pull    
Enter passphrase for key '/home/gotoh/.ssh/id_rsa': 
warning: Cannot merge binary files: hogehoge.pdf (HEAD vs. e3c854a5dbf95506965869630683bd0866b76110)

Auto-merging hogehoge.pdf
CONFLICT (content): Merge conflict in hogehoge.pdf
Automatic merge failed; fix conflicts and then commit the result.

競合しているファイルの一覧を表示するときは以下のコマンドで調べる。

% git ls-files -u hogehoge.pdf (指定したファイルの競合状態)
100644 94620ee77f34cccf4267c2b5bb4bcfd1b6bef92c 1	hogehoge.pdf
100644 fbc39c783fee5cd97ffaf05e6acc53fbc64136f0 2	hogehoge.pdf
100644 dc3a2f95489db7ed9fb84996d855c148f255aad5 3	hogehoge.pdf

% git ls-files -u (競合しているファイルの一覧)

リモートリポジトリの方の変更を採用する場合。

% git checkout --theirs hogehoge.pdf

作業ディレクトリの方の変更を採用する場合。

% git checkout --ours hogehoge.pdf

コミットする。

% git commit -m "resolved conflict"
[master 3cb6778] resolved conflict

Gitの管理対象から外す(git rm)_

間違えて管理対象にしてしまったファイルをGitの管理対象から外す。

% git rm --cached 外したいファイル名

参考リンク_

戻る_