আমার মনে হয় @ অ্যারিড্রেলের পোস্টটি নিকটতম ছিল তবে এর থেকে আরও কিছুটা আছে - তাই আমি এটি এখানে যুক্ত করব; জিনিসটি হ'ল, svn
যদি আপনি কোনও রেপোর সাবফোল্ডারে থাকেন এবং আপনি তা করেন:
/media/disk/repo_svn/subdir$ svn export . /media/disk2/repo_svn_B/subdir
তারপরে svn
পুনর্বিবেচনার নিয়ন্ত্রণাধীন সমস্ত ফাইল রফতানি করবে (সেগুলিতে নতুনভাবে সংযোজন করা যেতে পারে; বা পরিবর্তিত স্থিতি) - এবং যদি আপনার সেই ডিরেক্টরিতে অন্য "জাঙ্ক" থাকে (এবং আমি .svn
এখানে সাবফোল্ডারগুলি গণনা করছি না , তবে .o
ফাইলগুলির মতো দৃশ্যমান স্টাফ ) , এটি রফতানি হবে না ; কেবলমাত্র এসভিএন রেপো দ্বারা নিবন্ধিত ফাইলগুলি রফতানি হবে। আমার জন্য, এক চমৎকার ব্যাপার হল এই রপ্তানি স্থানীয় যে পরিবর্তন হয়েছে ফাইল রয়েছে না এখনো সংঘটিত; এবং আরেকটি সুন্দর বিষয় হ'ল রফতানি হওয়া ফাইলগুলির টাইমস্ট্যাম্পগুলি মূল ফাইলগুলির মতো। বা, যেমন svn help export
এটি রাখে:
- PATH1 দ্বারা উল্লিখিত ওয়ার্কিং কপি থেকে একটি পরিস্কার ডিরেক্টরি গাছটি পুনর্বিবেচনা REV এ রচনা করা হয়, যদি তা দেওয়া হয়, অন্যথায় ওয়ার্কিং এ, PATH2 তে। ... আরইভি নির্দিষ্ট না করা থাকলে, সমস্ত স্থানীয় পরিবর্তনগুলি সংরক্ষণ করা হবে। সংস্করণ নিয়ন্ত্রণে নেই এমন ফাইলগুলি অনুলিপি করা হবে না।
git
টাইমস্ট্যাম্পগুলি সংরক্ষণ করবে না তা বুঝতে , এই কমান্ডগুলির আউটপুট তুলনা করুন ( git
আপনার পছন্দসই একটি রেপোর সাবফোল্ডারে ):
/media/disk/git_svn/subdir$ ls -la .
... এবং:
/media/disk/git_svn/subdir$ git archive --format=tar --prefix=junk/ HEAD | (tar -t -v --full-time -f -)
... এবং আমি, যে কোনও ক্ষেত্রেই লক্ষ্য করি যে git archive
আর্কাইভ করা ফাইলের সমস্ত টাইমস্ট্যাম্পগুলি একই হতে পারে! git help archive
বলেছেন:
ট্রিট আইডি বনাম যখন কমিট আইডি বা ট্যাগ আইডি দেওয়া হয় তখন গিট সংরক্ষণাগারটি আলাদা আচরণ করে। প্রথম ক্ষেত্রে বর্তমান সময়টি সংরক্ষণাগারে প্রতিটি ফাইলের পরিবর্তনের সময় হিসাবে ব্যবহৃত হয়। পরবর্তী ক্ষেত্রে রেফারেন্সড কমিট অবজেক্টে রেকর্ড করা কমিটের সময় পরিবর্তে ব্যবহৃত হয়।
... তবে দৃশ্যত উভয় ক্ষেত্রেই " প্রতিটি ফাইলের পরিবর্তনের সময়" সেট করা হয় ; এর ফলে সেই ফাইলগুলির প্রকৃত টাইমস্ট্যাম্পগুলি সংরক্ষণ করা যায় না !
সুতরাং, টাইমস্ট্যাম্পগুলি সংরক্ষণ করার জন্য, এখানে একটি bash
স্ক্রিপ্ট রয়েছে যা কিছুটা জটিল হলেও বাস্তবে "ওয়ান-লাইনার", তাই এর নীচে একাধিক লাইনে পোস্ট করা হয়েছে:
/media/disk/git_svn/subdir$ git archive --format=tar master | (tar tf -) | (\
DEST="/media/diskC/tmp/subdirB"; \
CWD="$PWD"; \
while read line; do \
DN=$(dirname "$line"); BN=$(basename "$line"); \
SRD="$CWD"; TGD="$DEST"; \
if [ "$DN" != "." ]; then \
SRD="$SRD/$DN" ; TGD="$TGD/$DN" ; \
if [ ! -d "$TGD" ] ; then \
CMD="mkdir \"$TGD\"; touch -r \"$SRD\" \"$TGD\""; \
echo "$CMD"; \
eval "$CMD"; \
fi; \
fi; \
CMD="cp -a \"$SRD/$BN\" \"$TGD/\""; \
echo "$CMD"; \
eval "$CMD"; \
done \
)
নোট করুন যে ধরে নেওয়া হয়েছে যে আপনি "বর্তমান" ডিরেক্টরিতে (উপরের /media/disk/git_svn/subdir
) ডিরেক্টরিতে সামগ্রী রফতানি করছেন - এবং আপনি যে গন্তব্যে রফতানি করছেন তা কিছুটা অসুবিধাজনকভাবে স্থাপন করা হয়েছে তবে এটি DEST
পরিবেশের পরিবর্তনশীল। এই স্ক্রিপ্ট সহ নোট করুন; আপনি অবশ্যই তৈরি করতে হবেDEST
উপরের স্ক্রিপ্টটি চালানোর আগে আপনাকে নিজে নিজে ডিরেক্টরি ।
স্ক্রিপ্টটি রান করার পরে, আপনার তুলনা করতে সক্ষম হওয়া উচিত:
ls -la /media/disk/git_svn/subdir
ls -la /media/diskC/tmp/subdirB # DEST
... এবং আশা করি একই টাইমস্ট্যাম্পগুলি দেখুন (সংস্করণ নিয়ন্ত্রণে থাকা সেই ফাইলগুলির জন্য)।
আশা করি এটি কাউকে সাহায্য করবে,
চিয়ার্স!