library(git2r)

リポジトリの作成と設定 git init, config

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
# ... 以下略

特に変更する必要はないのでそのままの設定で進める。

管理対象状況の確認 git status

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)状態

ファイルをインデックスに登録 git add

不要なファイルを削除する

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

これまでの段階では、ワーキングツリーからインデックスに登録されるようになっただけで、実際のローカルリポジトリにはその状態が記録されていない。ファイルの変更を記録するためにはgit commitコマンドがあり、git2rではcommit関数によりコミットを行う。

リポジトリ作成から最初のコミットなので、個々のファイルの変更点はすべて “[add]initial commit”で統一することにする。

commit(repo, "[add]initial commit")
# [d09210a] 2015-01-04: [add]initial commit

というわけで一通り、リポジトリの作成からファイルのコミットまでを行った。Gitには他にも、コミットの履歴を表示するlogや差分を示すdiffコマンドがあるが、続きはまだ今度。