# Gitとチーム (/ja/docs/workspaces/git-and-teams)

ワークスペースは、Gitで管理することを前提に書かれたテキストファイルのフォルダです。リクエスト1件につき1ファイル、同じ内容なら同じバイト列で、中に非公開のものは入りません。コミットしてプッシュすれば、チームは同じリクエストで作業でき、それぞれが自分の認証情報を使います。

## 差分に向いたファイル [#files-made-for-diffs]

- **リクエスト1件につき1ファイル。** リクエストを変更すると、変更されるのは1ファイルです。リクエストを追加すると、追加されるのは1ファイルです。
- **決定的。** Echolotは同じ内容を毎回同じ方法で書き込みます。同じキーが同じ順序になるので、変更なしで保存しても何も変わらず、差分には変更した部分だけが表示されます。
- **読みやすい。** リクエストはTOMLです。ボディはリクエストの隣に独立したファイル（`create-order.body.json`）として置かれ、GraphQLクエリは`.graphql`になります。そのため、エスケープされた文字列ではなく、JSONやGraphQLとして差分が取れます。
- **順序はフォルダのファイルに。** フォルダ内の項目の順序は、ファイル名の一部ではなく、`_folder.toml`のリストです。並べ替えても変更されるのは1行です。
- **あなたのコメントは残ります。** ファイルに手書きしたコメント（`# why this header`）は、Echolotが保存するときに保持されます。先頭のコメントブロック、キーやテーブルの上のコメント、値の後ろのコメントが対象です。すでに存在しないキーに付いたコメントは削除されます。

リクエストの名前を変更すると、そのファイルと、隣にあるボディやスクリプトのファイルの名前も変わります。環境の名前を変更しても、ファイル名は変わりません。

## コミットするもの [#what-to-commit]

ワークスペースフォルダ全体をコミットします。中には無視すべきものはありません。Echolotは、シークレットの値、履歴、レスポンスボディ、個人の設定を、決して書き込みません。

| ワークスペース内（共有される） | あなたのMacのみ（共有されない） |
| --- | --- |
| リクエスト、フォルダ、その順序、ドキュメント、認証、スクリプト | シークレットの値（キーチェーン内） |
| 変数と、そのシークレットでない値 | グローバル変数 |
| 環境と、どれが保護されているか | どの環境がアクティブか |
| MCPサーバ、仕様、モック、フロー | 履歴とレスポンスボディ |
| ワークスペースのエージェントのルール、プロキシ、証明書 | ペインのレイアウトとそのほかのアプリ設定 |
| 共有することを選んだアシスタントの会話 | 信頼したスクリプトとエージェントのルール |

`workspace.toml`にあるワークスペースIDは、そのままにしておいてください。Echolotは、これを使って各自のシークレットの値を見つけます。

<Callout type="warn">
  シークレット変数を通さず、フィールドに直接入力した値は、そのままファイルに書き込まれます。そのような値が入っている認証やプロキシのフィールドには、Echolotがその下に警告（**ワークスペースのファイルにプレーンテキストとして保存されます。**）を表示します。コミットする前に**キーチェーンに移動**をクリックしてください。[シークレット](/docs/workspaces/secrets)を参照してください。
</Callout>

## 共有を始める [#start-sharing]

1. ワークスペースをGitリポジトリに置きます。`.echolot`フォルダにリポジトリを作るか、プロジェクトのリポジトリ内にフォルダとしてワークスペースを置きます。`workspace.toml`を含むフォルダなら、Echolotで開けます。
2. コミットしてプッシュします。
3. チームメンバーはリポジトリをクローンし、<strong>ファイル › ワークスペースを開く…</strong>でワークスペースを開きます。
4. チームメンバーは、それぞれ自分のMacでシークレットの値を1回設定します。[環境](/docs/workspaces/environments)ページには、それぞれに**このMacでは未設定**と表示されます。

コマンドラインツールは同じファイルを読むので、CIではコミットしたリクエストが実行されます。[CIでテストする](/docs/tutorials/test-in-ci)を参照してください。

## Git、エディタ、エージェントからの変更 [#changes-from-git-editors-and-agents]

Echolotはワークスペースフォルダを監視します。Echolotの外でファイルが変更されると（`git pull`、ブランチの切り替え、エディタ、エージェントなど）、ウインドウがそれを再読み込みします。サイドバー、開いているリクエスト、環境、仕様、モック、フローがすぐに追従します。

未保存の編集がない、開いているリクエストは、確認なしで新しいバージョンに切り替わります。

リクエストのタブに未保存の編集がある場合、Echolotはどちらかを選びません。リクエストの上にバーが表示されます。**このリクエストはディスク上で変更されました**、「ここに未保存の編集内容があるあいだに、ほかのアプリまたはGitがファイルを変更しました。」

- **自分の変更を保持**は、タブ内の編集を残し、ファイルに上書きします。
- **ファイルの内容を使用**は、タブ内の編集を破棄し、ディスクからファイルを読み込みます。

選ぶまで、Echolotはそのリクエストを保存しないので、ディスク上の変更はそのままです。

### 競合中にタブを閉じる [#closing-a-tab-during-a-conflict]

選ぶ前にタブを閉じると、Echolotは確認します。**未保存の編集内容があるあいだに「Create order」がディスク上で変更されました。**「タブを閉じると、残せるのは1つのバージョンだけです。」**自分の変更を保持**、**ファイルの内容を使用**、またはタブを開いたままにする**キャンセル**を選びます。競合が残っている間にウインドウを閉じたり終了したりすると、編集を保存できないことが伝えられ、破棄する前に確認されます。そのため、どちらのバージョンも、あなたの判断なしに失われることはありません。

### マージの競合 [#merge-conflicts]

Gitのマージの競合は、ほかのテキストファイルと同じように、エディタまたはGitのツールで解決してください。競合マーカーが残っているファイルは、有効なTOMLではありません。ファイルが読めない間、開いているウインドウは以前に読み込んだ内容を保持します。ワークスペースを開こうとすると失敗し、ようこそウインドウに、ファイルを示すメッセージ「…を読み込めませんでした。」が表示されます。ファイルを修正すると、ワークスペースが再び読み込まれます。

## Gitからのスクリプトとエージェントのルール [#scripts-and-agent-rules-from-git]

スクリプトはリクエストを送信し、ワークスペースの変数を読み取れるので、Echolotは、あなたがこのMacで信頼したスクリプトだけを実行します。Echolotで書いたスクリプトは信頼されています。Git、読み込み、別のエディタから届いたスクリプト、またはそこでコードが変更されたスクリプトには、読んで**スクリプトを信頼**をクリックするまで、**これらのスクリプトはEcholotの外部から来たものです**と表示されます。[スクリプトとテスト](/docs/requests/scripts-and-tests)を参照してください。

ワークスペースのエージェントのルールも同様です。ファイルのルールのうち、エージェントにできることを厳しくするものはすぐに適用されます。緩めるものは、そのバージョンをこのMacで信頼した後にのみ有効になります。[エージェント](/docs/ai/agents)を参照してください。

## Gitなしで共有する [#sharing-without-git]

Gitを使わない人にワークスペースを渡すには、**Echolotワークスペース**として[書き出し](/docs/workspaces/exporting)ます。コピーには新しいIDが付くので、シークレットはあなたのものとは別になり、シークレットの値が書き込まれることはありません。

Finderでワークスペースフォルダをコピーすると、IDは同じままです。同じMac上では、コピーと元のワークスペースが、キーチェーンから同じシークレットの値を読み取ります。
