go-gh-pages¶
cli のたたき台として gh-pages を Go で実装する * go-git を使って git を操作すると pure go になっておしゃれ
注釈
go-git で同様の操作ができるかどうかは要確認
go-gh-pages¶
あるディレクトリにgit cloneする。
git clone 'https://github.com/d-tsuji/test-go-gh-pages.git' tempDir --branch xxx --single-branch --origin origin --depth 1
ブランチが存在しない場合はエラーになるので、その場合はオプションを変更して再度 git clone する。
git clone 'https://github.com/d-tsuji/test-go-gh-pages.git' tempDir --origin origin
リポートリポジトリの URL を取得する
git config --get remote.origin.url
アントラッキングなファイルを強制的に削除する
git clean -f -d
# ちなみに git のオプション的には以下のようになっている。
# git clean -h
# usage: git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>...
#
# -q, --quiet do not print names of files removed
# -n, --dry-run dry run
# -f, --force force
# -i, --interactive interactive cleaning
# -d remove whole directories
# -e, --exclude <pattern>
# add <pattern> to ignore rules
# -x remove ignored files, too
# -X remove only ignored files
リモートリポジトリから fetch する
リモートリポジトリから checkout する
リモートリポジトリにターゲットのブランチが存在するかチェックする
git ls-remote --exit-code . origin/gh-pages
リモートに存在しない場合はローカルに --orphan
オプションを付けてブランチを作成する
git checkout --orphan gh-pages
リモートに存在する場合はローカルで初期化する
git clean -f -d
git reset --hard origin/gh-pages
ちなみに git checkout
のオプションは以下。
#git checkout -h
#usage: git checkout [<options>] <branch>
#or: git checkout [<options>] [<branch>] -- <file>...
#
# -b <branch> create and checkout a new branch
# -B <branch> create/reset and checkout a branch
# -l create reflog for new branch
# --guess second guess 'git checkout <no-such-branch>' (default)
# --overlay use overlay mode (default)
# -q, --quiet suppress progress reporting
# --recurse-submodules[=<checkout>]
# control recursive updating of submodules
# --progress force progress reporting
# -m, --merge perform a 3-way merge with the new branch
# --conflict <style> conflict style (merge or diff3)
# -d, --detach detach HEAD at named commit
# -t, --track set upstream info for new branch
# -f, --force force checkout (throw away local modifications)
# --orphan <new-branch>
# new unparented branch
# --overwrite-ignore update ignored files (default)
# --ignore-other-worktrees
# do not check if another worktree is holding the given ref
# -2, --ours checkout our version for unmerged files
# -3, --theirs checkout their version for unmerged files
# -p, --patch select hunks interactively
# --ignore-skip-worktree-bits
# do not limit pathspecs to sparse entries only
強制的な更新(
-f
)を許容するかどうか追加のみ(既存のファイルを削除しない)の設定するかどうか
デフォルトの設定ではすべて更新するモードになっている。以下の git コマンドでファイルを削除している。
git rm --ignore-unmatch -r -f files
#git rm --ignore-unmatch -r -f .
ファイルのコピーをする
元のディレクトリの対象のディレクトリパス(basePath)からファイルを対象の新しく作成したディレクトリにコピーする
ファイルのトラッキングをする(git add)
git add .
git config の設定をする
git confil.email xxx
git confil.user xxx
コミットする
git diff-index --quiet HEAD
git commit -m "update"
タグを打つかどうか
プッシュする
git push --tags origin gh-pages
git commit -m "update"
注釈
ちなみに gh-pages では swapn を使ってサーバ上の実行環境の git を実行している。ワーキングディレクトリは Git インスタンスを生成するときに設定