# اکاؤنٹس کے درمیان شیئرنگ

> ccam share کس طرح سیٹنگز، CLAUDE.md، ایکسٹینشنز اور ہسٹری کو منصوبے، بیک اپس اور ٹکراؤ کے انتخاب کے ساتھ ایک گروپ فولڈر سے لنک کرتا ہے، اور off کس طرح انہیں واپس کاپی کرتا ہے۔

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

ہر اکاؤنٹ کا اپنا فولڈر ہوتا ہے، لیکن اس میں موجود زیادہ تر چیزوں کو الگ رکھنے کی ضرورت نہیں۔ `ccam share` ایک وقت میں ایک اکاؤنٹ اور ایک آئٹم کے لیے شیئرنگ آن یا بند کرتا ہے: اکاؤنٹ کی فائل یا فولڈر ایک گروپ فولڈر میں منتقل ہو کر symbolic link سے بدل دیا جاتا ہے، اس لیے گروپ کا ہر اکاؤنٹ ایک ہی کاپی پڑھتا اور لکھتا ہے۔ اسے `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/ur/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` کنفیگ پڑھتا ہے، ہر `--<item>` قدر کو `config.Share.Set` سے اکاؤنٹ کی سیٹنگز کی ایک کاپی پر لاگو کرتا ہے، اور اکاؤنٹ چل رہا ہو تو انکار کرتا ہے۔
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/ur/features/mcp.md) اس کے بجائے گروپ کی `mcp.json` کے ذریعے کام کرتی ہے، اور `--mcp` صرف سیٹنگ بدلتا ہے۔

جب `side` ہسٹری آن کرے اور گروپ میں پہلے سے مواد ہو، تو ایک فولڈر `projects/` کے ساتھ یہ ہوتا ہے:

اگر گروپ میں اس راستے پر ابھی کچھ نہ ہو تو یہ اکاؤنٹ اسے شیئر کرنے والا پہلا ہے اور اس کا فولڈر جوں کا توں، بغیر بیک اپ کے، وہاں منتقل ہو جاتا ہے۔ ورنہ `mergeDir` ہر وہ فائل جو گروپ میں نہیں گروپ میں منتقل کرتا ہے، اور جو فائلیں دونوں طرف موجود ہوں وہ اکاؤنٹ کے فولڈر میں رہتی ہیں، اس لیے گروپ کا ورژن برقرار رہتا ہے۔ پھر اکاؤنٹ کا فولڈر اکاؤنٹ فولڈر کے اندر `.ccam-backup/<time>/` میں جاتا ہے، اور `os.Symlink` اس کی جگہ ایک لنک لگا دیتا ہے۔ گفتگو کی فائلوں کے نام ان کے سیشن ID پر رکھے جاتے ہیں، اس لیے کئی اکاؤنٹس کی ہسٹریاں بغیر ٹکراؤ کے یکجا ہو جاتی ہیں۔

منتقلی `rename(2)` استعمال کرتی ہے اور مختلف فائل سسٹمز کے درمیان کاپی اور حذف پر چلی جاتی ہے۔ منتقل کیے گئے ٹری کے اندر کوئی relative لنک جو اس سے باہر اشارہ کرتا تھا، مکمل راستے والے لنک کے طور پر دوبارہ لکھا جاتا ہے (`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`) آبجیکٹس کو recursive طریقے سے ملاتا ہے، arrays کو بغیر تکرار کے جوڑتا ہے، اور جب دونوں طرف ایک ہی key کی قدر مختلف ہو تو گروپ کی قدر رکھتا ہے، تاکہ دوسرے اکاؤنٹس کو رویے میں کوئی تبدیلی نظر نہ آئے۔ `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/ur/docs/sharing.md)
- [شیئر کیے گئے MCP سرورز](https://ccam.dev/ur/features/mcp.md)
- [موجودہ سیٹ اپ کاپی کریں](https://ccam.dev/ur/features/migrate.md)
- [تمام کمانڈز](https://ccam.dev/ur/docs/commands.md)
