GitおよびSourceTreeの勉強メモ。重要な用語を整理する。
リポジトリ
リポジトリとは履歴管理機能付きディレクトリである。
Gitの管理単位はディレクトリである。ただOSのディレクトリそのままでは履歴管理機能がない。そのためGitではディレクトに履歴管理機能を追加する。この履歴管理機能が追加されたディレクトリがリポジトリである。
ワークスペース(ワークツリー)
要するにこれは履歴管理対象とするディレクトリそのもののことである。
履歴管理に使用されるファイル以外のファイルのこととも言える。
ワークスペースに対するファイルの追加/削除や編集はSourceTreeとは関係なく、別途行う。その変更をGitシステムが自動的に認識して、SourceTreeはその自動検出情報に基づきGit的な操作を行う。
コミット
Gitでは任意のタイミングでリポジトリのスナップショット(瞬間写真)撮影ないし凍結保存をしていく。このスナップショット作成をコミットと呼ぶ。
タグ
コミットごとに付ける目印となる名前。
インデックス
コミットはリポジトリの凍結保存であるが、実際にはリポジトリ全体を毎回保存するのではなく、変更のあった部分だけを保存していく。こうすることで管理する情報量を必要最小限に抑えるためであろう。実際にあるコミットにおける変更部分となるファイル群をインデクスと呼ぶ。
まとめると、ワークツリー → (登録)→ インデックス → (コミット) → リポジトリ、という流れになる。
ワークツリーの一部をインデクスとして「登録」する。インデックスをリポジトリに「コミット」する。というような表現を使う。
SourceTreeでは、ワークスペース(ワークツリー)の中にunstagedとstagedなファイルがある。Stagedとはコミット対象ということ。unstagedはコミット対象外ということ。
リモートリポジトリとローカルリポジトリ
リポジトリにはリモートリポジトリとローカルリポジトリがある。要するにサーバーとクライアント。
クライント → サーバー(通常はアップロードという)はプッシュ。
サーバー → クライアント(通常はダウンロードという)はプル。
ブランチ
ブランチは一人で開発している限りは要するにワークスペース、ディレクトリそのものである。複数人で開発する場合、ワークスペースを各人が一時的にコピーしてそれぞれ進化させて再度統合することができる。この各人が持つコピーがブランチである。従ってこれは複数人で開発しない限りほとんど価値のない概念である。
ブランチの一部には予約名がある。例えばmaster。
リポジトリに最初のコミットを行うと、Gitはmasterという名前のブランチを作成する。
逆に言うと初回コミットをするまでいかなるブランチも生成されない。
ブランチには「統合ブランチ」(本幹)と「トピックブランチ」(一時的な枝葉)がある。
統合ブランチ=masterが通常。
チェックアウト
作業するブランチを切り替えるには、チェックアウトという操作を行う。つまり チェックアウトはブランチの切り替えのこと。ファイルを編集のためにサーバーから一時的にローカルに持ってくることではない。
HEADとは、現在使用しているブランチの最新版を示す名前。
stash
自分の加えた修正を一時退避する領域のこと。チェックアウトする際に必要になることがある。それ以外の場合、必要ない概念。
コミットせずにチェックアウトするとデフォルトでは自分の加えた変更は、変更後のブランチに対する変更となる。しかし時にこれは不整合を生じチェックアウトそのものができないことがある。このような場合にstashと呼ばれるファイルの変更内容を一時的に記録しておく領域に自分の加えた変更を一時退避させることで、変更を保持しつつチェックアウトも可能になる。
フェッチ
リモートリポジトリを参照専用目的で取得すること。プルはリモートリポジトリの取得と同時にローカルリポジトリとのマージを伴うものであり、これは不都合だがリモートの内容を手元に取得したい場合に用いる。
既存のRプロジェクトをGit(Bitbucket)管理下におきたい。
<マシーン1>
既存のRプロジェクトからローカルリポジトリを作成。
ローカルリポジトリをいったん全てコミット。
ローカルリポジトリをプッシュ。
以後は、ローカルを編集する度に変更をコミット、プッシュ。
また編集開始前には毎回サーバーからのプルが必要(しかしこれは面倒臭い)
<マシーン2>
本来マシーン2では都度都度リモートからプルしてこないと行けないが、これも面倒臭い。
なのでローカルリポジトリはDropBoxなどで併用してしまえば、この手間はなくなるはず。
コメント