خصوصیات
اکاؤنٹس کے درمیان شیئرنگ
اس صفحے کا انگریزی سے مشینی ترجمہ کیا گیا ہے۔ اصلاحات کا خیرمقدم ہے۔ اس صفحے میں GitHub پر ترمیم کریں
ہر اکاؤنٹ کا اپنا فولڈر ہوتا ہے، لیکن اس میں موجود زیادہ تر چیزوں کو الگ رکھنے کی ضرورت نہیں۔ ccam share ایک وقت میں ایک اکاؤنٹ اور ایک آئٹم کے لیے شیئرنگ آن یا بند کرتا ہے: اکاؤنٹ کی فائل یا فولڈر ایک گروپ فولڈر میں منتقل ہو کر symbolic link سے بدل دیا جاتا ہے، اس لیے گروپ کا ہر اکاؤنٹ ایک ہی کاپی پڑھتا اور لکھتا ہے۔ اسے ccam add کے بعد یہ بدلنے کے لیے استعمال کریں کہ کوئی اکاؤنٹ کیا شیئر کرتا ہے، یا کچھ اکاؤنٹس کو ان کے اپنے گروپ میں رکھنے کے لیے۔
استعمال
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 موجودہ حالت پرنٹ کرتا ہے:
$ 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 سرورز، سیٹنگز اور ہسٹری شیئر کریں ہر آئٹم کو صارف کے نقطۂ نظر سے بیان کرتا ہے۔
آپشنز
| آپشن | کیا کرتا ہے | ڈیفالٹ |
|---|---|---|
--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>/: شیئر کی گئی کاپیاں۔
internal/cli/share.goکنفیگ پڑھتا ہے، ہر--<item>قدر کوconfig.Share.Setسے اکاؤنٹ کی سیٹنگز کی ایک کاپی پر لاگو کرتا ہے، اور اکاؤنٹ چل رہا ہو تو انکار کرتا ہے۔share.Buildموجودہ سیٹنگز کو مطلوبہ سیٹنگز سے موازنہ کرتا ہے اور مراحل کی فہرست بناتا ہے۔ یہ ڈسک کو صرف پڑھتا ہے:share.Layoutکے ہر راستے کے لیےos.Lstatاورos.Readlink۔ منصوبہ کارروائیوں کی ایک فہرست ہے: گروپ کی خالی جگہ میں منتقل کرنا (adopt)، وہ فائلیں منتقل کرنا جو گروپ میں نہیں (merge dir)، حل شدہ ٹکراؤ گروپ میں لکھنا، بیک اپ، لنک ہٹانا، لنک بنانا، واپس کاپی کرنا، پلگ اِن کے راستے دوبارہ لکھنا اور پلگ اِن رجسٹری ملانا۔- ٹکراؤ کا فیصلہ ہوتا ہے، سوال کے ذریعے یا
--preferسے۔ Plan.Describeمنصوبہ پرنٹ کرتا ہے، اور ccam پوچھتا ہے۔- کچھ بھی منتقل ہونے سے پہلے مطلوبہ سیٹنگز
config.tomlمیں لکھی جاتی ہیں۔ اگرPlan.Applyآدھے راستے میں رک جائے توccam doctor --fixاور دوبارہ چلانا اپنا منصوبہ محفوظ کیے گئے ہدف کی طرف بناتے ہیں اور تبدیلی مکمل کرتے ہیں۔ Plan.Applyمراحل کو ترتیب سے چلاتا ہے۔ ہر مرحلہ ڈیٹا کو گروپ یا بیک اپ فولڈر میں منتقل کرتا ہے؛ کچھ بھی حذف نہیں ہوتا۔
share.Layout ان راستوں کی اجازت شدہ فہرست ہے جو ہر آئٹم میں آتے ہیں۔ جو چیز اس میں نہیں وہ کبھی گروپ تک نہیں پہنچ سکتی۔ share.Never میں .credentials.json اور .claude.json کے نام ہیں، اور اگر ان میں سے کوئی کبھی ترتیب میں نظر آئے تو Build اندرونی غلطی کے ساتھ رک جاتا ہے۔ mcp آئٹم کا کوئی راستہ نہیں: سرورز کی فہرست .claude.json کے اندر ہوتی ہے، اس لیے MCP شیئرنگ اس کے بجائے گروپ کی 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۔ پہلا انتخاب ڈیفالٹ ہے:
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 کے ذریعے موازنہ کرتا ہے، جس سے یہ لانچ کے راستے کے لیے کافی سستا رہتا ہے۔ غائب لنک فوراً بنا دیا جاتا ہے، کیونکہ اس میں کھونے کو کچھ نہیں۔ جہاں لنک ہونا چاہیے وہاں اصل فائل، غلط جگہ کا لنک، یا باسی لنک لانچ روک دیتا ہے:
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 againccam 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 انتباہ دیتا ہے اور جاری رکھنے سے پہلے پوچھتا ہے۔