# অ্যাকাউন্টগুলোর মধ্যে শেয়ার করা

> ccam share কীভাবে পরিকল্পনা, ব্যাকআপ ও দ্বন্দ্বের পছন্দসহ সেটিংস, CLAUDE.md, এক্সটেনশন ও ইতিহাস একটি গ্রুপ ফোল্ডারে লিংক করে, আর off কীভাবে আবার কপি ফিরিয়ে দেয়।

Source: https://ccam.dev/bn/features/share/ · Updated 2026-10-19

প্রতিটি অ্যাকাউন্টের নিজস্ব ফোল্ডার আছে, কিন্তু তার ভেতরের বেশিরভাগ জিনিস আলাদা রাখার দরকার নেই। `ccam share` একবারে একটি অ্যাকাউন্ট ও একটি আইটেমের জন্য শেয়ার চালু বা বন্ধ করে: অ্যাকাউন্টের ফাইল বা ফোল্ডার একটি গ্রুপ ফোল্ডারে সরানো হয় এবং একটি সিম্বলিক লিংক দিয়ে প্রতিস্থাপিত হয়, তাই গ্রুপের প্রতিটি অ্যাকাউন্ট একই কপি পড়ে ও লেখে। `ccam add`-এর পরে কোনো অ্যাকাউন্ট কী শেয়ার করে তা বদলাতে, বা কয়েকটি অ্যাকাউন্টকে তাদের নিজস্ব একটি গ্রুপে রাখতে এটি ব্যবহার করুন।

## ব্যবহার

```sh
ccam share work                       # show what work shares, and with which group
ccam share work --history on          # share conversation history with the default group
ccam share side --history team        # share it with the group team instead
ccam share work --settings off        # give work its own copy of settings.json again
ccam share work --memory off --fresh  # stop sharing CLAUDE.md and start with no file
ccam share work --settings on --yes --prefer merge   # no questions; merge JSON on conflicts
ccam --dry-run share work --history on               # print the plan, change nothing
```

আইটেম অপশন ছাড়া `ccam share` বর্তমান অবস্থা প্রিন্ট করে:

```console
$ ccam share work
Sharing for work
  MCP servers                        shared (group default)  --mcp
  settings.json                      shared (group default)  --settings
  global CLAUDE.md                   shared (group default)  --memory
  agents, commands, skills, plugins  shared (group default)  --extensions
  conversation history               local                   --history
```

অপশন দিলে ccam একটি পরিকল্পনা প্রিন্ট করে, গ্রুপের কপি থেকে আলাদা প্রতিটি ফাইলের বিষয়ে জিজ্ঞেস করে, এবং কিছু বদলানোর আগে জিজ্ঞেস করে `Proceed? [y/N]`। নতুন অ্যাকাউন্ট কথোপকথনের ইতিহাস ছাড়া বাকি সবকিছু শেয়ার করে; [MCP সার্ভার, সেটিংস ও ইতিহাস শেয়ার করুন](https://ccam.dev/bn/docs/sharing.md) ব্যবহারকারীর দিক থেকে প্রতিটি আইটেম বর্ণনা করে।

## অপশন

| অপশন | কী করে | ডিফল্ট |
| --- | --- | --- |
| `--mcp <on\|off\|group>` | MCP সার্ভার | অপরিবর্তিত |
| `--settings <on\|off\|group>` | `settings.json` | অপরিবর্তিত |
| `--memory <on\|off\|group>` | গ্লোবাল `CLAUDE.md` | অপরিবর্তিত |
| `--extensions <on\|off\|group>` | `agents/`, `commands/`, `skills/`, `plugins/`, `output-styles/`, `rules/` | অপরিবর্তিত |
| `--history <on\|off\|group>` | `projects/` ও `history.jsonl` | অপরিবর্তিত |
| `--fresh` | শেয়ার বন্ধ করার সময় গ্রুপের বিষয়বস্তু কপি করার বদলে খালি অবস্থা থেকে শুরু করে | বন্ধ |
| `--prefer <group\|mine\|merge>` | দ্বন্দ্ব কীভাবে মীমাংসা হবে | জিজ্ঞেস করে; `--yes` দিলে প্রতিটি আইটেমের ডিফল্ট |
| `-y`, `--yes` | জিজ্ঞেস না করেই চালায়; দ্বন্দ্ব `--prefer` অনুসরণ করে | বন্ধ |
| `-h`, `--help` | `share`-এর সাহায্য | |
| `--dry-run` (গ্লোবাল) | মানা হয়: দ্বন্দ্বের বিষয়ে জিজ্ঞেস করে, পরিকল্পনা প্রিন্ট করে, কিছু বদলায় না | বন্ধ |

মান `on` মানে গ্রুপ `default`, `off` মানে লোকাল (শেয়ার করা নয়), আর অন্য যেকোনো মান একটি গ্রুপের নাম। গ্রুপের নাম `~/.local/share/ccam/groups/`-এর নিচে ফোল্ডারের নাম হয়, তাই `ccam share side --history ../x` `invalid group name: "../x"` দিয়ে ব্যর্থ হয়। অ্যাকাউন্ট দেওয়া হয় নাম বা নম্বর দিয়ে, এবং শুধু আপনার উল্লেখ করা আইটেমগুলো বদলায়।

## এটি কীভাবে কাজ করে

সংশ্লিষ্ট ফাইলগুলো:

- `~/.config/ccam/config.toml`: প্রতিটি অ্যাকাউন্টের `[profile.share]` টেবিল, প্রতি আইটেমে একটি মান।
- `~/.local/share/ccam/profiles/<name>/`: অ্যাকাউন্টের `CLAUDE_CONFIG_DIR`।
- `~/.local/share/ccam/groups/<group>/`: শেয়ার করা কপিগুলো।

1. `internal/cli/share.go` কনফিগ পড়ে, `config.Share.Set` দিয়ে অ্যাকাউন্টের সেটিংসের একটি কপিতে প্রতিটি `--<item>` মান প্রয়োগ করে, এবং অ্যাকাউন্টটি চলতে থাকলে প্রত্যাখ্যান করে।
2. `share.Build` বর্তমান সেটিংস লক্ষ্যের সঙ্গে তুলনা করে ধাপগুলোর তালিকা দেয়। এটি শুধু ডিস্ক পড়ে: `share.Layout`-এর প্রতিটি পাথের জন্য `os.Lstat` ও `os.Readlink`। পরিকল্পনাটি অপারেশনের একটি তালিকা: গ্রুপের খালি জায়গায় সরানো (adopt), গ্রুপে না থাকা ফাইলগুলো সরানো (merge dir), মীমাংসিত দ্বন্দ্ব গ্রুপে লেখা, ব্যাকআপ, আনলিংক, লিংক, আবার কপি করা, প্লাগইন পাথ আবার লেখা এবং প্লাগইন রেজিস্ট্রি মার্জ করা।
3. দ্বন্দ্বগুলো মীমাংসা হয়, প্রশ্নের মাধ্যমে বা `--prefer` দিয়ে।
4. `Plan.Describe` পরিকল্পনাটি প্রিন্ট করে, এবং ccam জিজ্ঞেস করে।
5. কিছু সরানোর আগেই লক্ষ্য সেটিংস `config.toml`-এ লেখা হয়। `Plan.Apply` মাঝপথে থেমে গেলে `ccam doctor --fix` ও আবার চালানো সংরক্ষিত লক্ষ্যের দিকে তাদের পরিকল্পনা তৈরি করে এবং পরিবর্তনটি শেষ করে।
6. `Plan.Apply` ধাপগুলো ক্রমানুসারে চালায়। প্রতিটি ধাপ ডেটা গ্রুপে বা ব্যাকআপ ফোল্ডারে সরায়; কিছুই মুছে ফেলা হয় না।

`share.Layout` হলো প্রতিটি আইটেমের আওতাভুক্ত পাথগুলোর একটি অনুমোদিত তালিকা। এর বাইরের কোনো কিছু কখনও গ্রুপে পৌঁছাতে পারে না। `share.Never` `.credentials.json` ও `.claude.json`-এর নাম দেয়, এবং কোনোটি কখনও কাঠামোতে দেখা দিলে `Build` একটি অভ্যন্তরীণ ত্রুটি দিয়ে থেমে যায়। `mcp` আইটেমের কোনো পাথ নেই: সার্ভার তালিকা থাকে `.claude.json`-এর ভেতরে, তাই [MCP শেয়ার](https://ccam.dev/bn/features/mcp.md) এর বদলে গ্রুপের `mcp.json`-এর মাধ্যমে কাজ করে, আর `--mcp` শুধু সেটিংটি বদলায়।

`side` ইতিহাস চালু করলে এবং গ্রুপে আগে থেকেই বিষয়বস্তু থাকলে একটি ফোল্ডার, `projects/`-এর ক্ষেত্রে যা ঘটে:

গ্রুপে ওই পাথে এখনও কিছু না থাকলে অ্যাকাউন্টটিই প্রথম সেটি শেয়ার করে, এবং তার ফোল্ডারটি ব্যাকআপ ছাড়াই যেমন আছে তেমনই সেখানে সরানো হয়। অন্যথায় `mergeDir` গ্রুপে না থাকা প্রতিটি ফাইল গ্রুপে সরায়, আর দুই দিকেই থাকা ফাইলগুলো অ্যাকাউন্টের ফোল্ডারে থেকে যায়, তাই গ্রুপের সংস্করণ রাখা হয়। তারপর অ্যাকাউন্টের ফোল্ডারটি অ্যাকাউন্ট ফোল্ডারের ভেতরে `.ccam-backup/<time>/`-এ যায়, এবং `os.Symlink` তার জায়গায় একটি লিংক বসায়। কথোপকথনের ফাইলের নাম তাদের সেশন ID অনুযায়ী হয়, তাই একাধিক অ্যাকাউন্টের ইতিহাস কোনো সংঘাত ছাড়াই একত্র হয়।

সরানোর জন্য `rename(2)` ব্যবহার হয়, এবং ভিন্ন ফাইল সিস্টেমের মধ্যে এটি কপি ও মুছে ফেলায় ফিরে যায়। সরানো ট্রির ভেতরের যে আপেক্ষিক লিংক তার বাইরে নির্দেশ করত, সেটি পূর্ণ লিংক হিসেবে আবার লেখা হয় (`fsutil.PortableLink`), তাই নতুন জায়গা থেকেও সেটি ঠিকমতো পৌঁছায়। `plugins/` রেজিস্ট্রি (`installed_plugins.json`, `known_marketplaces.json`) অ্যাকাউন্ট ফোল্ডারের মধ্য দিয়ে পূর্ণ পাথ রাখে; ccam সেগুলোকে গ্রুপের ফোল্ডারে নির্দেশ করায় এবং গ্রুপে আগে থেকেই রেজিস্ট্রি থাকলে অ্যাকাউন্টের এন্ট্রিগুলো তাতে মার্জ করে।

কোনো আইটেম বন্ধ করলে লিংকটি উল্টে যায়:

ccam লিংকটি সরায় শুধু যদি সেটি groups ফোল্ডারের ভেতরে নির্দেশ করে, তারপর `CopyTree` দিয়ে গ্রুপের বর্তমান বিষয়বস্তু অ্যাকাউন্টে কপি করে। `--fresh` দিলে কপি বাদ যায় এবং অ্যাকাউন্টটি ওই পাথে কিছু ছাড়াই শুরু হয়। অন্য অ্যাকাউন্টগুলোর জন্য গ্রুপ তার বিষয়বস্তু রেখে দেয়। একটি আইটেম এক গ্রুপ থেকে অন্য গ্রুপে সরালে সেটি আনলিংক হয়ে নতুন গ্রুপের সঙ্গে লিংক হয়, পুরোনো গ্রুপ যেমন আছে তেমনই থাকে; পরিকল্পনা একটি `Note:` লাইনে তা জানায়।

দুই দিকেই আলাদা বিষয়বস্তু নিয়ে থাকা একটি একক ফাইল হলো দ্বন্দ্ব:

`share.NewConflict` ফাইলটির জন্য উপযুক্ত পছন্দগুলোর তালিকা দেয়। `history.jsonl` দেয় `merge by line`, `keep group` ও `use mine`, মার্জ প্রথমে। অন্য `.json` ফাইল দেয় `keep group`, `use mine` ও `merge JSON`। বাকি সবকিছু দেয় `keep group` ও `use mine`। প্রথম পছন্দটিই ডিফল্ট:

```console
history.jsonl differs from the group's copy.
  mine:  ~/.local/share/ccam/profiles/side/history.jsonl
  group: ~/.local/share/ccam/groups/default/history.jsonl
  1) merge by line
  2) keep group
  3) use mine
Choice [1]:
```

`merge JSON` (`MergeJSONBytes`) অবজেক্টগুলো রিকার্সিভভাবে মার্জ করে, অ্যারেগুলো ডুপ্লিকেট ছাড়া যুক্ত করে, এবং দুই দিকেই একই কী ভিন্নভাবে নির্ধারিত থাকলে গ্রুপের মান রাখে, তাই অন্য অ্যাকাউন্টগুলো আচরণে কোনো পরিবর্তন দেখে না। `merge by line` গ্রুপের লাইনগুলো রাখে, তারপর আপনার যে লাইনগুলো তাতে নেই সেগুলো যোগ করে। `keep group` ছাড়া প্রতিটি পছন্দ প্রথমে অ্যাকাউন্ট ফোল্ডারের `.ccam-backup/<time>/group/`-এ গ্রুপের কপি সংরক্ষণ করে, তারপর `fsutil.AtomicWrite` দিয়ে ফলাফল লেখে। আপনার নিজের ফাইল সবসময় ব্যাকআপে যায়।

`--prefer group`, `mine` বা `merge` জিজ্ঞেস না করেই প্রতিটি দ্বন্দ্বের মীমাংসা করে; `merge` মানে `merge JSON` বা `merge by line`, ফাইলটি যেটি দেয়, আর যে ফাইল কোনোটিই দেয় না সেটি ডিফল্ট রাখে। শুধু `--yes` প্রতিটি ফাইলের ডিফল্ট নেয়।

প্রতিবার চালু করার সময় `share.Check` কাঠামোর প্রতিটি পাথকে সেটিংয়ের সঙ্গে শুধু `lstat` ও `readlink` দিয়ে তুলনা করে, যা চালু করার পথের জন্য একে যথেষ্ট সস্তা রাখে। অনুপস্থিত লিংক সঙ্গে সঙ্গে তৈরি হয়, কারণ হারানোর কিছু নেই। যেখানে লিংক থাকার কথা সেখানে আসল ফাইল, ভুল জায়গায় লিংক, বা বাসি লিংক চালু করা থামিয়ে দেয়:

```console
ccam: stopped because of share link problems:
  ~/.local/share/ccam/profiles/work/CLAUDE.md: set to shared but is a real file, not a link
Repair them with `ccam doctor --fix`, then run again
```

`ccam doctor --fix` দুই দিকেই সংরক্ষিত সেটিংস দিয়ে `share.Build` চালায়, যা ডিস্কে যা আছে তা থেকে প্রতিটি ধাপ বের করে, দ্বন্দ্বে গ্রুপের বিষয়বস্তু রাখে এবং যা প্রতিস্থাপন করে তার ব্যাকআপ রাখে।

## নিরাপত্তা ও বিশেষ ক্ষেত্র

- **চলমান অ্যাকাউন্ট।** অ্যাকাউন্ট হিসেবে Claude Code চলতে থাকলে ccam শেয়ার বদলাতে রাজি হয় না (`account work is running; quit it first, then change its sharing`), কারণ সেশনটি যে ফাইলগুলো সরানো হচ্ছে সেগুলোতে লিখতে থাকে এবং এর মধ্যে যোগ করা লাইনগুলো হারিয়ে যেত। `--dry-run` তবুও পরিকল্পনা প্রিন্ট করে।
- **ব্যাকআপ।** প্রতিটি পরিকল্পনা অ্যাকাউন্ট ফোল্ডারে নিজস্ব `.ccam-backup/<time>/` ফোল্ডার পায়, একই সেকেন্ডে দুটি পরিকল্পনা শুরু হলে একটি নম্বরযুক্ত প্রত্যয়সহ। ccam কখনও এগুলো মুছে ফেলে না।
- **আংশিক ব্যর্থতা।** কোনো ধাপ ব্যর্থ হলে ccam ত্রুটি ও মূল ফাইলগুলো কোথায় আছে তা প্রিন্ট করে, এবং আপনাকে `ccam doctor --fix` দিয়ে শেষ করতে বলে। লক্ষ্য আগেই সংরক্ষিত, তাই মেরামত সেদিকেই এগোয়।
- **আপনার নিজের লিংক।** কোনো পাথ যদি আগে থেকেই আপনার তৈরি করা একটি লিংক হয়, যেমন একটি dotfiles রিপোজিটরির দিকে, এবং গ্রুপ খালি থাকে, তাহলে ccam লিংকের লক্ষ্যটি গ্রুপে কপি করে এবং লিংকটিকেই ব্যাকআপে সরায়। লক্ষ্যটি স্পর্শ করা হয় না।
- **লগইন ফাইল।** `.credentials.json` ও `.claude.json` কখনও গ্রুপে লিংক, সরানো বা কপি করা হয় না।
- **একই ফোল্ডারে দুটি অ্যাকাউন্ট।** যে অ্যাকাউন্টগুলো ইতিহাস শেয়ার করে, সেগুলো একই ফাইলে লেখে। একই ইতিহাস গ্রুপের দ্বিতীয় একটি অ্যাকাউন্ট এমন ফোল্ডারে চালু হলে যেখানে একটি আগে থেকেই চলছে, ccam সতর্ক করে এবং চালিয়ে যাওয়ার আগে জিজ্ঞেস করে।

## সম্পর্কিত

- [MCP সার্ভার, সেটিংস ও ইতিহাস শেয়ার করুন](https://ccam.dev/bn/docs/sharing.md)
- [শেয়ার করা MCP সার্ভার](https://ccam.dev/bn/features/mcp.md)
- [আগের সেটআপ কপি করুন](https://ccam.dev/bn/features/migrate.md)
- [সব কমান্ড](https://ccam.dev/bn/docs/commands.md)
