library(git2r)
RStudioのメニューから、新規パッケージプロジェクト作成(git2rパッケージにもリポジトリを作成するinit関数があるが、今回はパッケージなので説明しない)。gitオプションにチェックをつけたので、すでにgitリポジトリとして作成されている。
repo <- repository("../designer/") # なにはなくともrepository関数でリポジトリのパスを渡しておく
# .git, .gigignoreがあることを確認する
list.files(all.files = T)
# [1] "." ".."
# [3] ".git" ".gitignore"
# [5] ".Rbuildignore" ".Rproj.user"
# [7] "DESCRIPTION" "designer.Rproj"
# [9] "man" "NAMESPACE"
# [11] "R" "Read-and-delete-me"
次に、Gitリポジトリの設定を確認する
~/.gitconfigがあればそちらの設定が読み込まれるが、このリポジトリにのみ反映させる.gitconfigを作成することもできる。
config(repo)
# global:
# color.ui=true
# core.editer=emacs
# core.editor=emacs
# core.excludefiles=/Usrs/uri/.gitignore
# ... 以下略
特に変更する必要はないのでそのままの設定で進める。
status(repo) # git status
# Untracked files:
# Untracked: .Rbuildignore
# Untracked: .gitignore
# Untracked: DESCRIPTION
# Untracked: NAMESPACE
# Untracked: R/
# Untracked: Read-and-delete-me
# Untracked: designer.Rproj
# Untracked: man/
まだなにもしていないので、すべてのファイルがGitの管理対象となっていない(Untracked)状態
不要なファイルを削除する
file.remove("Read-and-delete-me")
# [1] TRUE
残りのファイルをGitの管理対象とするが、その前にDESCRIPTIONファイルの中身を編集しておく…
git2rパッケージではgit addコマンドはadd関数で実行する
add(repo, "DESCRIPTION")
確認のために再度status関数で管理状況の確認を行うと…
status(repo)
# Untracked files:
# Untracked: .Rbuildignore
# Untracked: .gitignore
# Untracked: NAMESPACE
# Untracked: R/
# Untracked: designer.Rproj
# Untracked: man/
#
# Staged changes:
# New: DESCRIPTION
DESCRIPTIONがインデックスに登録されたことがわかる。 というわけで、他のファイルもGit管理下におくことにする。
add(repo, c("NAMESPACE", "R/", "designer.Rproj", "man/"))
(すべてのファイルをインデックスに登録するgit add -allコマンドのような機能はないのだろうか?)
おっと。不可視ファイルの登録も忘れずに。
add(repo, c(".gitignore", ".Rbuildignore"))
status(repo)
# Staged changes:
# New: .Rbuildignore
# New: .gitignore
# New: DESCRIPTION
# New: NAMESPACE
# New: R/designer.R
# New: designer.Rproj
# New: man/designer-package.Rd
これでフォルダ内のすべてのファイルがGitの管理対象となるようになった。しかし、これだけではバージョンが完了したわけではない。
これまでの段階では、ワーキングツリーからインデックスに登録されるようになっただけで、実際のローカルリポジトリにはその状態が記録されていない。ファイルの変更を記録するためにはgit commitコマンドがあり、git2rではcommit関数によりコミットを行う。
リポジトリ作成から最初のコミットなので、個々のファイルの変更点はすべて “[add]initial commit”で統一することにする。
commit(repo, "[add]initial commit")
# [d09210a] 2015-01-04: [add]initial commit
というわけで一通り、リポジトリの作成からファイルのコミットまでを行った。Gitには他にも、コミットの履歴を表示するlogや差分を示すdiffコマンドがあるが、続きはまだ今度。