अपने Mac पर मौजूद किसी प्रोजेक्ट फ़ोल्डर की तुलना SSH-सुलभ सर्वर पर मौजूद कॉपी से करने के लिए, dry-run मोड में rsync का उपयोग करें। यह बिना फ़ाइलें ट्रांसफ़र किए या बदले यह सूचीबद्ध कर सकता है कि कौन सी फ़ाइलें आउट-ऑफ़-सिंक दिखती हैं। किसी एक फ़ाइल के अंदर टेक्स्ट अंतर देखने के लिए, दोनों संस्करणों को Mac पर लाने के बाद diff का उपयोग करें। यह गाइड किसी स्थानीय प्रोजेक्ट डायरेक्टरी की तुलना रिमोट डायरेक्टरी से करने पर केंद्रित है; यह यह नहीं मानती कि दोनों प्रतियां सिंक्रोनाइज़ हैं और न ही यह बताती है कि कौन सा संस्करण मान्य होना चाहिए।
पहले कनेक्शन और पाथ की जाँच करें
अपने Mac पर Terminal खोलें। Apple द्वारा SSH को उन प्रोटोकॉल में से एक के रूप में प्रलेखित किया गया है जिनका उपयोग Terminal रिमोट सर्वर से कनेक्ट करने के लिए कर सकता है; कमांड-लाइन ssh क्लाइंट के साथ, आप रिमोट मशीन पर कोई कमांड भी चला सकते हैं। आपको एक सर्वर नाम, एक रिमोट खाता, प्रोजेक्ट डायरेक्टरी तक एक्सेस और काम करने वाले SSH प्रमाणीकरण (ऑथेंटिकेशन) की आवश्यकता होगी। Apple की Terminal गाइड और OpenBSD ssh मैनुअल इन कनेक्शन विकल्पों का वर्णन करते हैं।
नीचे दिए गए उदाहरण खाते, होस्ट और फ़ोल्डर नामों को अपने विवरण से बदलें। रिमोट मशीन पर rsync इंस्टॉल होना चाहिए और आपके खाते के लिए उपलब्ध होना चाहिए। rsync --version स्थानीय संस्करण दिखाता है; रिमोट संस्करण की जाँच ssh user@host rsync --version से की जा सकती है।
ssh user@server.example.com
यदि वह लॉगिन विफल हो जाता है, तो फ़ाइलों की तुलना करने से पहले होस्ट, प्रमाणीकरण, नेटवर्क या एक्सेस संबंधी समस्या का समाधान करें। फिर दोनों प्रोजेक्ट डायरेक्टरीज़ की सटीक पहचान करें। उदाहरणों में, /Users/you/Projects/site स्थानीय है और /srv/projects/site रिमोट है। डायरेक्टरी सामग्री की उसी सापेक्ष लेआउट में तुलना करने के लिए प्रत्येक डायरेक्टरी पाथ के अंत में ट्रेलिंग स्लैश (trailing slash) बनाए रखें। रिक्त स्थान (spaces) वाले पाथ को कोटेशन मार्क्स में रखें।
पूर्वावलोकन करें कि कौन सी फ़ाइलें भिन्न हैं
अपने Mac से यह कमांड चलाएँ:
rsync -rnic --out-format='%i %n' \
user@server.example.com:/srv/projects/site/ \
/Users/you/Projects/site/
रिमोट पाथ स्रोत (source) है और Mac पाथ गंतव्य (destination) है। यह कमांड रिकर्शन (-r), आइटमवार परिवर्तन आउटपुट (-i), चेकसम तुलना (-c) और dry-run मोड (-n) का उपयोग करता है। Rsync के दस्तावेज़ कहते हैं कि dry-run कोई बदलाव नहीं करता है; आइटमवार आउटपुट प्रस्तावित अपडेट्स की एक संक्षिप्त सूची देता है। इस दिशा में, सूचीबद्ध आइटम का अर्थ है कि रिमोट स्रोत स्थानीय गंतव्य से भिन्न है, या उसमें अनुपलब्ध है। rsync मैनुअल dry runs, आइटमवार परिवर्तनों और चेकसम तुलना का दस्तावेज़ीकरण करता है।
चेकसम मोड सामग्री की तुलना करने के लिए दोनों तरफ़ फ़ाइल डेटा को पढ़ता है, इसलिए यह rsync के डिफ़ॉल्ट त्वरित परीक्षण (quick check) की तुलना में अधिक समय ले सकता है और अधिक डिस्क I/O का उपयोग कर सकता है, जो केवल फ़ाइल आकार और संशोधन समय (modification time) पर निर्भर करता है। जब सामग्री मायने रखती हो तब -nic का उपयोग करें, भले ही टाइमस्टैम्प या आकार से किसी बदलाव का पता न चले। तेज़ प्रारंभिक जाँच के लिए, इसके बजाय -rin का उपयोग करें; यह rsync के त्वरित परीक्षण द्वारा पहचाने गए परिवर्तनों की रिपोर्ट करता है और जब आकार और संशोधन समय दोनों मेल खाते हैं, तो यह सामग्री परिवर्तनों को छोड़ सकता है। यह पूर्वावलोकन फ़ाइलों के अंदर बदली गई पंक्तियों को प्रदर्शित नहीं करता है।
यदि Mac कॉपी को स्रोत और रिमोट कॉपी को गंतव्य माना जाना चाहिए, तो दोनों पाथ को उलट दें। दिशा मायने रखती है: rsync के आइटमवार मार्कर दर्शाते हैं कि यह गंतव्य पर क्या अपडेट करेगा। परिणामों का निरीक्षण करते समय -n को बनाए रखें। इसे केवल तभी हटाएँ जब आप जानबूझकर कोई ट्रांसफ़र करने का निर्णय लें; rsync कॉपी करने का एक टूल है, टू-वे मर्ज टूल नहीं।
टेक्स्ट-फ़ाइल के अंतर की सामग्री पढ़ें
वास्तविक पंक्ति परिवर्तनों का निरीक्षण करने के लिए, diff -u के साथ दो स्थानीय फ़ाइलों की तुलना करें। पहले अपनी सामान्य स्वीकृत ट्रांसफ़र विधि का उपयोग करके एक संस्करण को एक अलग अस्थायी स्थान पर कॉपी करें, या उस प्रोजेक्ट कॉपी का उपयोग करें जो आपके पास पहले से स्थानीय रूप से मौजूद है। फिर चलाएँ:
diff -u \
"/Users/you/Projects/site/config/settings.yml" \
"/Users/you/Desktop/settings-remote.yml"
यूनिफ़ाइड आउटपुट बदली हुई पंक्तियों के आसपास संदर्भ प्रदर्शित करता है। - उपसर्ग वाली पंक्तियाँ पहली फ़ाइल की हैं; + उपसर्ग वाली पंक्तियाँ दूसरी फ़ाइल की हैं। diff सामग्री की तुलना करता है, इसलिए यह एडिट्स को ट्रांसफ़र या मर्ज नहीं करेगा। संपूर्ण स्थानीय डायरेक्टरी ट्री के लिए, diff -ru local-folder remote-folder संबंधित फ़ाइलों की पुनरावर्ती (recursively) तुलना करता है, लेकिन रिमोट फ़ोल्डर माउंट होना चाहिए या अन्यथा स्थानीय पाथ के रूप में उपलब्ध होना चाहिए। GNU Diffutils मैनुअल रिकर्सिव डायरेक्टरी तुलना और यूनिफ़ाइड आउटपुट की व्याख्या करता है; macOS कमांड विकल्प भिन्न हो सकते हैं, इसलिए यदि कोई विकल्प अस्वीकार कर दिया जाता है तो अपने Mac पर man diff देखें। GNU Diffutils manual।
कदम उठाने से पहले सीमाओं को समझें
एक साफ़ rsync पूर्वावलोकन का अर्थ है कि आपके द्वारा चुने गए तुलना नियमों और पाथ का उपयोग करके कोई अंतर नहीं पाया गया। यह आमने-सामने (side-by-side) समीक्षा नहीं दिखाता है, परस्पर विरोधी संपादनों को हल नहीं करता है, या यह गारंटी नहीं देता है कि प्रत्येक फ़ाइल सिस्टम विशेषता समतुल्य है। Rsync का चेकसम विकल्प फ़ाइल सामग्री की तुलना करता है, जबकि अनुमतियाँ (permissions) और टाइमस्टैम्प जैसे मेटाडेटा इस बात पर निर्भर करते हैं कि आप कौन से विकल्प चुनते हैं। इसके अलावा, यदि कोई किसी भी कॉपी को संपादित करता है, तो पूर्वावलोकन के बाद फ़ाइल ट्री बदल सकते हैं।
यदि रिमोट सिस्टम SSH या rsync एक्सेस प्रदान नहीं करता है, तो यह वर्कफ़्लो बताए गए तरीके से काम नहीं करेगा। उस सिस्टम द्वारा अनुमत एक्सेस विधि का उपयोग करें, दो सुलभ स्थानीय प्रतियाँ बनाएँ, और diff या किसी अन्य उपयुक्त तुलना टूल के साथ उनकी तुलना करें। पूर्वावलोकन के स्थान पर ट्रांसफ़र कमांड तब तक न चलाएँ जब तक कि आप इसके स्रोत-से-गंतव्य अपडेट व्यवहार का इरादा न रखते हों।
स्रोत
Connect to servers in Terminal on Mac — Apple Support
ssh(1) — OpenBSD manual pages — OpenBSD
rsync(1) manpage — The Samba Project
Comparing and Merging Files — GNU Project