メインコンテンツまでスキップ

pull

git remote から pull して、すべての Target に同期します。

skillshare pull              # pull して同期
skillshare pull --dry-run # プレビュー
skillshare pull --force # 初回 pull でローカルを remote で置き換える

使うタイミング​

  • 他のマシンから push された変更で Skill を同期する
  • 他の人が更新を push した後、最新の Skill を取得する
  • init --remote の後、新しいマシンで作業を開始する

実行される処理​

オプション​

フラグ説明
--dry-run, -n変更を加えずにプレビュー
--force, -f初回 pull のコンフリクト時、ローカルの Skill を remote で置き換える

Git Root スコープ​

pull は git_root 設定フィールド(デフォルト: skills source)で選択されたディレクトリに対して動作します。スコープの一覧は commit — Git Root スコープ を参照してください。git_root が変更されたものの、git リポジトリが別のスコープのディレクトリにまだ存在している場合、pull は修正に必要な正確な git init / mv コマンドとともに「Git root mismatch」エラーを表示します。init 後にスコープを変更する も参照してください。

pull 後、pull はそのスコープが保持するものを同期します。skills は sync を実行し、agents は sync agents を実行し、extras は sync extras を実行し、root は 3 つすべてを実行します。

Plugins、MCP サーバー、hooks は config.yaml 内の設定で、どのスコープでも追跡されないため、pull はそれらを持ってくることも適用することもありません。クロスマシン Sync — Plugins、MCP、Hooks を参照してください。

前提条件​

Source ディレクトリは remote を持つ git リポジトリである必要があります。

# 準備できているか確認:
skillshare status
# 表示: Git: initialized with remote

ローカル変更の警告​

コミットされていない変更がある場合、pull は失敗します。

$ skillshare pull
✗ Local changes detected
Run: skillshare push
Or: cd ~/.config/skillshare/skills && git stash -u

解決策:

# オプション 1: push せずにまずローカルでコミットする
skillshare commit -m "Local changes"
skillshare pull

# オプション 2: まず変更を push する
skillshare push
skillshare pull

# オプション 3: 変更を stash する
cd ~/.config/skillshare/skills
git stash
skillshare pull
git stash pop

両方のマシンでコミットした場合​

このマシンに remote にないコミットがあり、remote にもこのマシンにないコミットがある場合、pull は2つの履歴をマージコミットにまとめてから sync します。マージを共有するには、そのあとでプッシュしてください。

どちらのマシンも Skill をインストール・更新するたびに .metadata.json を書き換えるため、このファイルはよく競合します。pull はこれらの競合を自動で解決します。Skill ごとのエントリを個別にマージし、両方のマシンが同じエントリを変更していた場合は installed_at が新しいほうを採用します。

それ以外のファイルで競合が起きると、pull は停止してマージを取り消し、該当ファイルを表示します:

$ skillshare pull
✗ git pull failed
pull stopped: this machine and the remote both changed my-skill/SKILL.md; the merge was undone, resolve it with git in ~/.config/skillshare/skills

リポジトリは pull 前の状態のままです。自分で競合を解決するには:

cd ~/.config/skillshare/skills
git pull --no-rebase # マージをやり直し、競合を残す
# 競合したファイルを編集してから
git add . && git commit --no-edit
skillshare push
skillshare sync

既存の Skill がある状態での初回 pull​

初回の pull 時(まだアップストリームがない場合)、ローカルの repository に既に内容(任意のディレクトリ、または .gitignore 以外の追跡済み・無視されていないファイル)がある場合、 pull は両方を統合するために merge を試みます。merge が成功すると、ローカルと remote 両方の内容が保持されます。それ以外に何もない repository のみ、remote branch に reset されます。

git_root: root では、config.yaml はマシン固有の設定ファイルです。remote repository が config.yaml を追跡している場合、ローカルの設定が上書きされないよう、最初の pull はエラーを出して拒否します。pull する前に、該当ファイルを追跡しているマシンから skillshare push を実行して remote 上で追跡を解除してください。2 回目以降の pull では、このマシンの config.yaml を保持して警告を表示します。skillshare push を実行すると remote から取り除かれます。

merge コンフリクト がある場合、pull はゼロ以外の終了コードで失敗します。

$ skillshare pull
✗ Pull failed
Resolve manually: cd ~/.config/skillshare/skills && git merge --allow-unrelated-histories <remote branch>
Or force-pull: skillshare pull --force (replaces local with remote)

解決方法:

# コンフリクトを手動で解決してから push する
cd ~/.config/skillshare/skills
git add . && git commit
skillshare push

# またはローカルを破棄して remote を採用する
skillshare pull --force

例​

# 標準的な pull(最も一般的)
skillshare pull

# 何が起こるかをプレビュー
skillshare pull --dry-run

# 初回 pull のコンフリクト時にローカルを remote で置き換える
skillshare pull --force

ワークフロー​

2 台目のマシンでの典型的なワークフロー:

# 一日の始め: 最新の Skill を取得する
skillshare pull

# ... AI ツールで作業する ...

# 一日の終わり: 新しい Skill を共有する
skillshare collect claude # 新しい Skill を作成した場合
skillshare push -m "Add new skill"

関連項目​

  • commit — push せずにローカルでコミット
  • push — remote へ push
  • sync — pull なしで手動同期
  • Cross-Machine Sync — 完全なセットアップ手順